diff --git a/404.html b/404.html index bcf09558cd77..709d14ad357c 100644 --- a/404.html +++ b/404.html @@ -18,14 +18,14 @@ - - - + + +
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/css/styles.76c2e1e4.css b/assets/css/styles.58f640de.css similarity index 56% rename from assets/css/styles.76c2e1e4.css rename to assets/css/styles.58f640de.css index ee05de028181..7bd615b43c4f 100644 --- a/assets/css/styles.76c2e1e4.css +++ b/assets/css/styles.58f640de.css @@ -1 +1 @@ -.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.DocSearch-Button,.button{-webkit-user-select:none;-moz-user-select:none}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.dropdown,pre{position:relative}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.markdown li,body{word-wrap:break-word}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}*,.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:transparent;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:rgba(0,0,0,.05);--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 rgba(0,0,0,.1);--ifm-global-shadow-md:0 5px 40px rgba(0,0,0,.2);--ifm-global-shadow-tl:0 12px 28px 0 rgba(0,0,0,.2),0 2px 4px 0 rgba(0,0,0,.1);--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:transparent;--ifm-table-stripe-background:rgba(0,0,0,.03);--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#e6007a;--ifm-color-primary-dark:#cf006e;--ifm-color-primary-darker:#c40068;--ifm-color-primary-darkest:#a10055;--ifm-color-primary-light:#fd0086;--ifm-color-primary-lighter:#ff0a8c;--ifm-color-primary-lightest:#ff2c9c;--secondaryColor:#172026;--snowColor:#efefef;--silverColor:#b7b8bb;--nickelColor:#6d7278;--blackColor:#000;--ifm-navbar-height:50px;--sansFontFamily:"Inter",sans-serif!important;--headingFontFamily:"Unbounded",sans-serif!important;--docsearch-searchbox-background:#fff;--docsearch-searchbox-shadow:var(--snowColor);--docusaurus-announcement-bar-height:auto!important;--custom-code-block-background:#f6f8fa;--docusaurus-highlighted-code-line-bg:#e6ebf1;--custom-content-max-width:none;--docusaurus-announcement-bar-height:auto;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docusaurus-collapse-button-bg:transparent;--docusaurus-collapse-button-bg-hover:rgba(0,0,0,.1);--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12);--docsearch-primary-color:var(--ifm-color-primary);--docsearch-text-color:var(--ifm-font-color-base)}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:transparent}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);text-rendering:optimizelegibility}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.list_eTzJ article:last-child,.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none,.tabItem_LNqP,footer .list-social-links li{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid rgba(0,0,0,.1);border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:transparent;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}.container_lyt7,.container_lyt7>svg,img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul,.tabList__CuJ{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol,ol ul,ul ol,ul ul{margin:0}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{list-style:none;padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:rgba(53,120,229,.15);--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:rgba(235,237,240,.15);--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:rgba(0,164,0,.15);--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:rgba(84,199,236,.15);--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:rgba(255,186,0,.15);--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:rgba(250,56,62,.15);--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{-moz-column-gap:var(--ifm-avatar-intro-margin);column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs__link:-moz-any-link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs__link:any-link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:transparent;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;list-style:none;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor transparent;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.docs-wrapper,.navbar__inner{max-width:var(--custom-content-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer-legal li+li,.footer__item,.h1,.h2,.h3,.h4,.h5,.h6{margin-top:0}.admonitionContent_S0QG>:last-child,.cardContainer_fWXF :last-child,.collapsibleContent_i85q>:last-child,.footer-legal ul,.footer__items,.tabItem_Ymn6>:last-child{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title,.homeNavItem h1{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{list-style:none;margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;top:0;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;left:0;visibility:hidden}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;content:"";filter:var(--ifm-menu-link-sublist-icon-filter)}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.navbar__items--center .navbar__brand,body{margin:0}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:hsla(0,0%,100%,.1);--ifm-navbar-search-input-placeholder-color:hsla(0,0%,100%,.5);color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:hsla(0,0%,100%,.05);--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::-moz-placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);position:fixed;transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:rgba(0,0,0,.6);position:fixed;right:0;transition-property:opacity,visibility}.btn-primary,.cards,.nav-footer{position:relative}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.container.container-custom,.navbar__inner,article iframe,article img{margin-left:auto;margin-right:auto}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{-moz-column-gap:var(--ifm-pagination-page-spacing);column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.homeContainer a,.nav-footer a:hover,.pagination__link:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.text-heading,h1{line-height:1.333333}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid transparent;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}#__docusaurus-base-url-issue-banner-container,.DocSearch.DocSearch-Button .DocSearch-Button-Keys,.docSidebarContainer_b6E3,.navbar__inner .navbar__item:last-child a:after,.navbar__inner a.navbar__item svg[class^=iconExternalLink],.sidebarLogo_isFc,.themedImage_ToTc,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:hsla(0,0%,100%,.05);--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:hsla(0,0%,100%,.1);--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:hsla(0,0%,100%,.07);--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec;--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}@font-face{font-family:Unbounded;font-weight:100 900;src:url(/assets/fonts/Unbounded-Variable-a247d72576aff02445f8abeb96056589.woff2) format("woff2-variations")}body{font-family:var(--sansFontFamily)}h1{font-family:Unbounded,sans-serif!important;padding-top:1.2rem}h2,h3,h4,h5,h6{font-family:var(--sansFontFamily)}.text-heading{font-family:var(--headingFontFamily)}.font-weight-medium{font-weight:500!important}.font-weight-bolder{font-weight:900!important}button.menu__button{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.img_ev3q,.navbar.navbar--fixed-top{height:auto}.DocSearch.DocSearch-Button{background-color:#fff;border:1px solid var(--snowColor);color:var(--silverColor);cursor:text;width:170px}.btn-primary:before,.btn-primary[type=submit]:active,.btn-primary[type=submit]:focus,.btn-primary[type=submit]:hover{background:var(--ifm-color-primary)}.DocSearch.DocSearch-Button .DocSearch-Search-Icon{color:var(--silverColor)}.DocSearch.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--secondaryColor)}.DocSearch.DocSearch-Button .DocSearch-Button-Placeholder{font-size:13px;font-weight:500}.navbar__inner .navbar__item:last-child{margin-left:5px;margin-right:5px;opacity:1}.navbar__inner .navbar__item:last-child .dropdown__menu{border-radius:1.5rem;box-shadow:0 1rem 3rem rgba(0,0,0,.175);right:0;text-align:center;top:32px}.navbar__inner .navbar__item:last-child .dropdown__menu>li a{color:var(--secondaryColor);padding:12px 24px}.navbar__inner .navbar__item:last-child .dropdown__menu>li a.dropdown__link--active{background-color:#fff;color:var(--blackColor)}.navbar__inner .navbar__item:last-child .dropdown__menu>li a.dropdown__link--active:hover,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.navbar__inner .navbar__item:last-child .dropdown__menu>li a:hover{background-color:var(--snowColor);color:var(--ifm-color-primary)}.homeContainer{background:#fff;text-align:center}.homeFooterContainer,div[role=banner]{background-image:linear-gradient(217deg,rgba(196,0,97,.8),rgba(196,0,97,0) 70%),linear-gradient(127deg,rgba(230,0,122,.8),rgba(230,0,122,0) 70%),linear-gradient(336deg,rgba(103,69,210,.7),rgba(103,69,210,0) 70%)}.text-dark{color:var(--secondaryColor)!important}.homeNavContainer,.homeNavItem{padding:3rem 0}.homeNavItem{border-radius:3.25rem!important;transition:.15s ease-in-out}.homeNavItem p{max-width:300px}div[role=banner]{padding:10px 0}div[role=banner] .close{color:#fff}div[role=banner] .close:focus,div[role=banner] .close:hover{color:#fff!important;opacity:1}div.sticky{background-color:#ff0;font-family:Unbounded;font-size:20px;padding:30px;position:sticky;top:0}.homeFooterContainer{background-color:#e6007a;padding:6rem 0 4rem}.homeFooterContainer .col-lg-6{align-items:flex-start;display:flex;flex-flow:column nowrap;margin-bottom:2rem}.homeFooterContainer .col-lg-6>:first-child{margin-bottom:1.3rem}.homeFooterContainer p{margin-bottom:2.5rem}.docs-wrapper{margin:0 auto;padding-bottom:80px}article blockquote{background-color:rgba(255,229,100,.3);border-left:8px solid #ffe564}article iframe,article img{display:block;max-width:100%}.prism-code{background-color:var(--custom-code-block-background)!important}.prism-code>div{width:100px!important}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{font-weight:600}.btn{font-size:16px;font-weight:700;padding:8px 16px}.btn,.btn:before{border-radius:1.5rem}.btn:before{left:-42px;width:42px}.btn-group-lg>.btn,.btn-lg{border-radius:2rem;padding:16px 20px}.btn-group-lg>.btn:before,.btn-lg:before{border-radius:2rem;left:-58px;width:58px}.btn-group-sm>.btn,.btn-sm{border-radius:1.5rem;font-size:16px;padding:8px 16px}.btn-group-sm>.btn:before,.btn-sm:before{border-radius:1.5rem;left:-42px;width:42px}.btn-primary{background-color:transparent;border-color:var(--ifm-color-primary);color:var(--ifm-color-primary);overflow:hidden;transform:scale(.999);transition:.2s,border 1ms;z-index:1}.btn-primary,.btn-primary:before{border:1px solid var(--ifm-color-primary);will-change:transform}.btn-primary:before{color:transparent;content:"";height:100%;position:absolute;top:0;transition:.2s;z-index:-1}.btn-primary:active,.btn-primary:focus,.btn-primary:hover{background:none;border:1px solid transparent;color:#fff;transform:scale(1.05);will-change:transform}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 .2rem .2rem rgba(0,0,0,.1)}.btn-primary:not(:disabled):not(.disabled):active{background-color:transparent}.btn-primary:active:before,.btn-primary:focus:before,.btn-primary:hover:before{left:0;width:100%}.btn-bg-primary.btn-primary{border:1px solid #fff;color:#fff!important}.btn-bg-primary.btn-primary:active,.btn-bg-primary.btn-primary:focus,.btn-bg-primary.btn-primary:hover{background:#fff;color:var(--ifm-color-primary)!important}.btn-bg-primary.btn-primary:before{background:#fff;border:1px solid #fff;color:transparent;content:none;height:100%;position:absolute;top:0;transition:.2s;will-change:transform;z-index:-1}.btn-white,.footer-legal a.text-white:hover,.nav-footer a.text-white:hover{color:#fff!important}.nav-footer.spacer-y-4{padding-bottom:3rem;padding-top:3rem}.nav-footer.pb-4{padding-bottom:2.25rem!important}.nav-footer .text-small{font-size:.875rem}.nav-footer{background:var(--secondaryColor);border:none;color:#202020;font-size:16px;line-height:24px}.nav-footer h5{font-size:1.25rem;font-weight:400;margin-top:0}.nav-footer a.text-white,.nav-footer a.text-white:visited{color:var(--silverColor)!important}.nav-footer-item-pill{background-color:#e6007a;border-radius:10px;color:#fff;font-size:.75rem;font-weight:700;padding:1px 8px}.list-social-links{display:flex;list-style:none;padding:0}.cardTitle_rnsV,footer .list-social-links i{font-size:1.2rem}footer .list-social-links a{text-decoration:none;background:0 0!important;border:1px solid #fff;border-radius:50%;color:#fff;display:block;padding:.25rem .9rem}footer [class^=socicon-]{line-height:2}footer .list-social-links{margin-left:0}.footer-legal .navbar-brand{display:block;padding-bottom:0}.footer-legal .list-pipe-separator>li:not(:last-child)>a:after{content:"|";margin:0 .375rem;opacity:.5}.footer-legal a.text-white,.footer-legal a.text-white:visited{color:#b5aeae!important}.cards-container{flex-flow:row wrap;max-width:100%;min-width:0}.cards,.cards-container{align-items:center;display:flex;justify-content:center}.cards{border:1px solid var(--primaryColor);border-radius:10px;box-shadow:0 .1rem .1rem rgba(0,0,0,.4);height:80px;margin:5px;padding:10px;top:0;transition:top .2s;width:350px}.cards:hover{top:-5px}.cards-body{align-items:flex-start;color:#000;display:flex;flex:1 auto;flex-flow:column nowrap;margin-left:5px}.cards-title{align-content:center;color:var(--ifm-color-primary-dark);font-size:1rem;font-weight:700}.cards-text{margin:1px 1px 1px 5px}.docusaurus-highlight-code-line{background-color:#faff9f;display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}html[data-theme=dark] .docusaurus-highlight-code-line{background-color:#646464}.container.container-custom{width:100%}pre .btnIcon{background-color:hsla(0,0%,100%,.7);border:1px solid transparent;color:#000;cursor:pointer;height:30px;padding:3px;position:absolute;top:4px;transition:.25s ease-out;z-index:2}pre .btnIcon:hover{border:1px solid silver;text-decoration:none}.DocSearch-Button-Container,.btnIcon__body{align-items:center;display:flex}.btnIcon svg{fill:currentColor;margin-right:.4em}.btnIcon__label{font-size:11px}.btnClipboard{right:10px}@font-face{font-family:Socicon;font-style:normal;font-weight:400;src:url(/assets/fonts/Socicon-5e166614f1c831694816befaba8d03cf.eot);src:url(/assets/fonts/Socicon-5e166614f1c831694816befaba8d03cf.eot#iefix) format("embedded-opentype"),url(/assets/fonts/Socicon-d02985133d7e9e09bde470dd54104762.woff2) format("woff2"),url(/assets/fonts/Socicon-48b2d1e286d6b8d6ebefa630301dcf3b.ttf) format("truetype"),url(/assets/fonts/Socicon-9075c233656883ebc65aeb93d2fb76ba.woff) format("woff"),url(/assets/images/Socicon-620cd8c93935433c4e69112bb91768e8.svg#Socicon) format("svg")}[class*=" socicon-"],[class^=socicon-]{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Socicon!important;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none}.socicon-internet:before{content:"\e957"}.socicon-moddb:before{content:"\e94b"}.socicon-indiedb:before{content:"\e94c"}.socicon-traxsource:before{content:"\e94d"}.socicon-gamefor:before{content:"\e94e"}.socicon-pixiv:before{content:"\e94f"}.socicon-myanimelist:before{content:"\e950"}.socicon-blackberry:before{content:"\e951"}.socicon-wickr:before{content:"\e952"}.socicon-spip:before{content:"\e953"}.socicon-napster:before{content:"\e954"}.socicon-beatport:before{content:"\e955"}.socicon-hackerone:before{content:"\e956"}.socicon-hackernews:before{content:"\e946"}.socicon-smashwords:before{content:"\e947"}.socicon-kobo:before{content:"\e948"}.socicon-bookbub:before{content:"\e949"}.socicon-mailru:before{content:"\e94a"}.socicon-gitlab:before{content:"\e945"}.socicon-instructables:before{content:"\e944"}.socicon-portfolio:before{content:"\e943"}.socicon-codered:before{content:"\e940"}.socicon-origin:before{content:"\e941"}.socicon-nextdoor:before{content:"\e942"}.socicon-udemy:before{content:"\e93f"}.socicon-livemaster:before{content:"\e93e"}.socicon-crunchbase:before{content:"\e93b"}.socicon-homefy:before{content:"\e93c"}.socicon-calendly:before{content:"\e93d"}.socicon-realtor:before{content:"\e90f"}.socicon-tidal:before{content:"\e910"}.socicon-qobuz:before{content:"\e911"}.socicon-natgeo:before{content:"\e912"}.socicon-mastodon:before{content:"\e913"}.socicon-unsplash:before{content:"\e914"}.socicon-homeadvisor:before{content:"\e915"}.socicon-angieslist:before{content:"\e916"}.socicon-codepen:before{content:"\e917"}.socicon-slack:before{content:"\e918"}.socicon-openaigym:before{content:"\e919"}.socicon-logmein:before{content:"\e91a"}.socicon-fiverr:before{content:"\e91b"}.socicon-gotomeeting:before{content:"\e91c"}.socicon-aliexpress:before{content:"\e91d"}.socicon-guru:before{content:"\e91e"}.socicon-appstore:before{content:"\e91f"}.socicon-homes:before{content:"\e920"}.socicon-zoom:before{content:"\e921"}.socicon-alibaba:before{content:"\e922"}.socicon-craigslist:before{content:"\e923"}.socicon-wix:before{content:"\e924"}.socicon-redfin:before{content:"\e925"}.socicon-googlecalendar:before{content:"\e926"}.socicon-shopify:before{content:"\e927"}.socicon-freelancer:before{content:"\e928"}.socicon-seedrs:before{content:"\e929"}.socicon-bing:before{content:"\e92a"}.socicon-doodle:before{content:"\e92b"}.socicon-bonanza:before{content:"\e92c"}.socicon-squarespace:before{content:"\e92d"}.socicon-toptal:before{content:"\e92e"}.socicon-gust:before{content:"\e92f"}.socicon-ask:before{content:"\e930"}.socicon-trulia:before{content:"\e931"}.socicon-loomly:before{content:"\e932"}.socicon-ghost:before{content:"\e933"}.socicon-upwork:before{content:"\e934"}.socicon-fundable:before{content:"\e935"}.socicon-booking:before{content:"\e936"}.socicon-googlemaps:before{content:"\e937"}.socicon-zillow:before{content:"\e938"}.socicon-niconico:before{content:"\e939"}.socicon-toneden:before{content:"\e93a"}.socicon-augment:before{content:"\e908"}.socicon-bitbucket:before{content:"\e909"}.socicon-fyuse:before{content:"\e90a"}.socicon-yt-gaming:before{content:"\e90b"}.socicon-sketchfab:before{content:"\e90c"}.socicon-mobcrush:before{content:"\e90d"}.socicon-microsoft:before{content:"\e90e"}.socicon-pandora:before{content:"\e907"}.socicon-messenger:before{content:"\e906"}.socicon-gamewisp:before{content:"\e905"}.socicon-bloglovin:before{content:"\e904"}.socicon-tunein:before{content:"\e903"}.socicon-gamejolt:before{content:"\e901"}.socicon-trello:before{content:"\e902"}.socicon-spreadshirt:before{content:"\e900"}.socicon-500px:before{content:"\e000"}.socicon-8tracks:before{content:"\e001"}.socicon-airbnb:before{content:"\e002"}.socicon-alliance:before{content:"\e003"}.socicon-amazon:before{content:"\e004"}.socicon-amplement:before{content:"\e005"}.socicon-android:before{content:"\e006"}.socicon-angellist:before{content:"\e007"}.socicon-apple:before{content:"\e008"}.socicon-appnet:before{content:"\e009"}.socicon-baidu:before{content:"\e00a"}.socicon-bandcamp:before{content:"\e00b"}.socicon-battlenet:before{content:"\e00c"}.socicon-mixer:before{content:"\e00d"}.socicon-bebee:before{content:"\e00e"}.socicon-bebo:before{content:"\e00f"}.socicon-behance:before{content:"\e010"}.socicon-blizzard:before{content:"\e011"}.socicon-blogger:before{content:"\e012"}.socicon-buffer:before{content:"\e013"}.socicon-chrome:before{content:"\e014"}.socicon-coderwall:before{content:"\e015"}.socicon-curse:before{content:"\e016"}.socicon-dailymotion:before{content:"\e017"}.socicon-deezer:before{content:"\e018"}.socicon-delicious:before{content:"\e019"}.socicon-deviantart:before{content:"\e01a"}.socicon-diablo:before{content:"\e01b"}.socicon-digg:before{content:"\e01c"}.socicon-discord:before{content:"\e01d"}.socicon-disqus:before{content:"\e01e"}.socicon-douban:before{content:"\e01f"}.socicon-draugiem:before{content:"\e020"}.socicon-dribbble:before{content:"\e021"}.socicon-drupal:before{content:"\e022"}.socicon-ebay:before{content:"\e023"}.socicon-ello:before{content:"\e024"}.socicon-endomodo:before{content:"\e025"}.socicon-envato:before{content:"\e026"}.socicon-etsy:before{content:"\e027"}.socicon-facebook:before{content:"\e028"}.socicon-feedburner:before{content:"\e029"}.socicon-filmweb:before{content:"\e02a"}.socicon-firefox:before{content:"\e02b"}.socicon-flattr:before{content:"\e02c"}.socicon-flickr:before{content:"\e02d"}.socicon-formulr:before{content:"\e02e"}.socicon-forrst:before{content:"\e02f"}.socicon-foursquare:before{content:"\e030"}.socicon-friendfeed:before{content:"\e031"}.socicon-github:before{content:"\e032"}.socicon-goodreads:before{content:"\e033"}.socicon-google:before{content:"\e034"}.socicon-googlescholar:before{content:"\e035"}.socicon-googlegroups:before{content:"\e036"}.socicon-googlephotos:before{content:"\e037"}.socicon-googleplus:before{content:"\e038"}.socicon-grooveshark:before{content:"\e039"}.socicon-hackerrank:before{content:"\e03a"}.socicon-hearthstone:before{content:"\e03b"}.socicon-hellocoton:before{content:"\e03c"}.socicon-heroes:before{content:"\e03d"}.socicon-smashcast:before{content:"\e03e"}.socicon-horde:before{content:"\e03f"}.socicon-houzz:before{content:"\e040"}.socicon-icq:before{content:"\e041"}.socicon-identica:before{content:"\e042"}.socicon-imdb:before{content:"\e043"}.socicon-instagram:before{content:"\e044"}.socicon-issuu:before{content:"\e045"}.socicon-istock:before{content:"\e046"}.socicon-itunes:before{content:"\e047"}.socicon-keybase:before{content:"\e048"}.socicon-lanyrd:before{content:"\e049"}.socicon-lastfm:before{content:"\e04a"}.socicon-line:before{content:"\e04b"}.socicon-linkedin:before{content:"\e04c"}.socicon-livejournal:before{content:"\e04d"}.socicon-lyft:before{content:"\e04e"}.socicon-macos:before{content:"\e04f"}.socicon-mail:before{content:"\e050"}.socicon-medium:before{content:"\e051"}.socicon-meetup:before{content:"\e052"}.socicon-mixcloud:before{content:"\e053"}.socicon-modelmayhem:before{content:"\e054"}.socicon-mumble:before{content:"\e055"}.socicon-myspace:before{content:"\e056"}.socicon-newsvine:before{content:"\e057"}.socicon-nintendo:before{content:"\e058"}.socicon-npm:before{content:"\e059"}.socicon-odnoklassniki:before{content:"\e05a"}.socicon-openid:before{content:"\e05b"}.socicon-opera:before{content:"\e05c"}.socicon-outlook:before{content:"\e05d"}.socicon-overwatch:before{content:"\e05e"}.socicon-patreon:before{content:"\e05f"}.socicon-paypal:before{content:"\e060"}.socicon-periscope:before{content:"\e061"}.socicon-persona:before{content:"\e062"}.socicon-pinterest:before{content:"\e063"}.socicon-play:before{content:"\e064"}.socicon-player:before{content:"\e065"}.socicon-playstation:before{content:"\e066"}.socicon-pocket:before{content:"\e067"}.socicon-qq:before{content:"\e068"}.socicon-quora:before{content:"\e069"}.socicon-raidcall:before{content:"\e06a"}.socicon-ravelry:before{content:"\e06b"}.socicon-reddit:before{content:"\e06c"}.socicon-renren:before{content:"\e06d"}.socicon-researchgate:before{content:"\e06e"}.socicon-residentadvisor:before{content:"\e06f"}.socicon-reverbnation:before{content:"\e070"}.socicon-rss:before{content:"\e071"}.socicon-sharethis:before{content:"\e072"}.socicon-skype:before{content:"\e073"}.socicon-slideshare:before{content:"\e074"}.socicon-smugmug:before{content:"\e075"}.socicon-snapchat:before{content:"\e076"}.socicon-songkick:before{content:"\e077"}.socicon-soundcloud:before{content:"\e078"}.socicon-spotify:before{content:"\e079"}.socicon-stackexchange:before{content:"\e07a"}.socicon-stackoverflow:before{content:"\e07b"}.socicon-starcraft:before{content:"\e07c"}.socicon-stayfriends:before{content:"\e07d"}.socicon-steam:before{content:"\e07e"}.socicon-storehouse:before{content:"\e07f"}.socicon-strava:before{content:"\e080"}.socicon-streamjar:before{content:"\e081"}.socicon-stumbleupon:before{content:"\e082"}.socicon-swarm:before{content:"\e083"}.socicon-teamspeak:before{content:"\e084"}.socicon-teamviewer:before{content:"\e085"}.socicon-technorati:before{content:"\e086"}.socicon-telegram:before{content:"\e087"}.socicon-tripadvisor:before{content:"\e088"}.socicon-tripit:before{content:"\e089"}.socicon-triplej:before{content:"\e08a"}.socicon-tumblr:before{content:"\e08b"}.socicon-twitch:before{content:"\e08c"}.socicon-twitter:before{content:"\e08d"}.socicon-uber:before{content:"\e08e"}.socicon-ventrilo:before{content:"\e08f"}.socicon-viadeo:before{content:"\e090"}.socicon-viber:before{content:"\e091"}.socicon-viewbug:before{content:"\e092"}.socicon-vimeo:before{content:"\e093"}.socicon-vine:before{content:"\e094"}.socicon-vkontakte:before{content:"\e095"}.socicon-warcraft:before{content:"\e096"}.socicon-wechat:before{content:"\e097"}.socicon-weibo:before{content:"\e098"}.socicon-whatsapp:before{content:"\e099"}.socicon-wikipedia:before{content:"\e09a"}.socicon-windows:before{content:"\e09b"}.socicon-wordpress:before{content:"\e09c"}.socicon-wykop:before{content:"\e09d"}.socicon-xbox:before{content:"\e09e"}.socicon-xing:before{content:"\e09f"}.socicon-yahoo:before{content:"\e0a0"}.socicon-yammer:before{content:"\e0a1"}.socicon-yandex:before{content:"\e0a2"}.socicon-yelp:before{content:"\e0a3"}.socicon-younow:before{content:"\e0a4"}.socicon-youtube:before{content:"\e0a5"}.socicon-zapier:before{content:"\e0a6"}.socicon-zerply:before{content:"\e0a7"}.socicon-zomato:before{content:"\e0a8"}.socicon-zynga:before{content:"\e0a9"}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit;text-decoration:underline}.DocSearch-Container a,.tag_zVej:hover{text-decoration:none}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedImage--dark_i4oU,[data-theme=light] .themedImage--light_HNdA,html:not([data-theme]) .themedComponent--light_NU7w{display:initial}.iconExternalLink_nPIU{margin-left:.3rem}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color)}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.lastUpdated_vwxv{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.tocCollapsibleContent_vkbj a{display:block}.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.searchQueryInput_u2C7,.searchVersionInput_m0Ui{background:var(--docsearch-searchbox-focus-background);border:2px solid var(--ifm-toc-border-color);border-radius:var(--ifm-global-radius);color:var(--docsearch-text-color);font:var(--ifm-font-size-base) var(--ifm-font-family-base);margin-bottom:.5rem;padding:.8rem;transition:border var(--ifm-transition-fast) ease;width:100%}.searchQueryInput_u2C7:focus,.searchVersionInput_m0Ui:focus{border-color:var(--docsearch-primary-color);outline:0}.searchQueryInput_u2C7::-moz-placeholder{color:var(--docsearch-muted-color)}.searchQueryInput_u2C7::placeholder{color:var(--docsearch-muted-color)}.searchResultsColumn_JPFH{font-size:.9rem;font-weight:700}.algoliaLogo_rT1R{max-width:150px}.algoliaLogoPathFill_WdUC{fill:var(--ifm-font-color-base)}.searchResultItem_Tv2o{border-bottom:1px solid var(--ifm-toc-border-color);padding:1rem 0}.searchResultItemHeading_KbCB{font-weight:400;margin-bottom:0}.searchResultItemPath_lhe1{--ifm-breadcrumb-separator-size-multiplier:1;color:var(--ifm-color-content-secondary);font-size:.8rem}.searchResultItemSummary_AEaO{font-style:italic;margin:.5rem 0 0}.loadingSpinner_XVxU{animation:1s linear infinite a;border:.4em solid #eee;border-radius:50%;border-top:.4em solid var(--ifm-color-primary);height:3rem;margin:0 auto;width:3rem}@keyframes a{to{transform:rotate(1turn)}}.loader_vvXV{margin-top:2rem}.search-result-match{background:rgba(255,215,142,.25);color:var(--docsearch-hit-color);padding:.09em 0}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}[data-theme=dark]:root{--docusaurus-collapse-button-bg:hsla(0,0%,100%,.05);--docusaurus-collapse-button-bg-hover:hsla(0,0%,100%,.1)}.collapseSidebarButton_PEFL{display:none;margin:0}.docMainContainer_gTbr,.docPage__5DB{display:flex;width:100%}.docPage__5DB{flex:1 0}.docsWrapper_BCFX{display:flex;flex:1 0 auto}.cardContainer_fWXF{--ifm-link-color:var(--ifm-color-emphasis-800);--ifm-link-hover-color:var(--ifm-color-emphasis-700);--ifm-link-hover-decoration:none;border:1px solid var(--ifm-color-emphasis-200);box-shadow:0 1.5px 3px 0 rgba(0,0,0,.15);transition:all var(--ifm-transition-fast) ease;transition-property:border,box-shadow}.cardContainer_fWXF:hover{border-color:var(--ifm-color-primary);box-shadow:0 3px 6px 0 rgba(0,0,0,.2)}.cardDescription_PWke{font-size:.8rem}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;padding:0 8px;user-select:none}.DocSearch-Footer,.DocSearch-Help{-webkit-user-select:none;-moz-user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:0}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Hit-Tree,.DocSearch-Hit-action,.DocSearch-Hit-icon,.DocSearch-Reset{stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Input,.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;font:inherit}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 2px;position:relative;top:-1px;width:20px}.DocSearch--active{overflow:hidden!important}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Link{appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{appearance:none;background:0 0;border:0;color:var(--docsearch-text-color);flex:1;font-size:1.2em;height:100%;outline:0;padding:0 0 0 8px;width:80%}.DocSearch-Hit-action-button,.DocSearch-Reset{-webkit-appearance:none;-moz-appearance:none;border:0;cursor:pointer}.DocSearch-Input::-moz-placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Cancel,.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator,.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset{animation:.1s ease-in forwards b;appearance:none;background:none;border-radius:50%;color:var(--docsearch-icon-color);padding:2px;right:0}.DocSearch-Help,.DocSearch-HitsFooter,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:0 0}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help{font-size:.9em;margin:0;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}.DocSearch-Hit--deleting{opacity:0;transition:.25s linear}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:.25s linear .25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{appearance:none;background:none;border-radius:50%;color:inherit;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:background-color .1s ease-in}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:0;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;user-select:none;width:100%;z-index:300}.DocSearch-Commands li,.DocSearch-Commands-Key{align-items:center;display:flex}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{background:var(--docsearch-key-gradient);border:0;border-radius:2px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;width:20px}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}@keyframes b{0%{opacity:0}to{opacity:1}}.DocSearch-Button{margin:0;transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.DocSearch-Container{z-index:calc(var(--ifm-z-index-fixed) + 1)}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;-moz-user-select:none;user-select:none}.hash-link:before{content:"#"}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{-moz-column-gap:.2rem;column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;list-style:none;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:transparent transparent transparent var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.containsTaskList_mC6p{list-style:none}.admonition_LlT9{margin-bottom:1em}.admonitionHeading_tbUL{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.3rem;text-transform:uppercase}.admonitionHeading_tbUL code{text-transform:none}.admonitionIcon_kALy{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_kALy svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.title_kItE{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-leading)*1.25)}@media (min-width:576px){.container.container-custom{max-width:540px}}@media (min-width:768px){.nav-footer.spacer-y-4{padding-bottom:6rem;padding-top:6rem}.nav-footer .py-md-1{padding-bottom:.375rem!important;padding-top:.375rem!important}.container.container-custom{max-width:720px}}@media (min-width:992px){.homeNavContainer{height:90vh;max-height:900px;min-height:600px}.homeNavItem{border-radius:3.25rem!important;margin-top:-3rem;min-height:400px;transition:.15s ease-in-out}.homeNavItem:after{-webkit-font-feature-settings:"liga";bottom:3rem;color:var(--silverColor);content:"arrow_upward";font-family:Material Icons;font-size:1.5rem;left:50%;opacity:0;position:absolute;transform:translate(-50%);transition:.2s ease-in-out}.homeNavItem:hover{box-shadow:0 1rem 3rem rgba(0,0,0,.04);transform:translateY(-1rem)}.homeNavItem:hover:after{opacity:1}.homeNavItemContent{margin-top:10%}.homeNavItem h1{font-size:4.2vw}.container.container-custom{max-width:960px}}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_m80_{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.searchBox_ZlJk{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_vwxv{text-align:right}.tocMobile_ITEo{display:none}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_BlDH,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_m80_:focus,.expandButton_m80_:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_m80_{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_BlDH{transform:rotate(180deg)}.docSidebarContainer_b6E3{border-right:1px solid var(--ifm-toc-border-color);-webkit-clip-path:inset(0);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_b3ry{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_Xe31{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_gTbr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_Uz_u{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_czyv{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.docItemCol_VOVn,.generatedIndexPage_vN6x{max-width:75%!important}.list_eTzJ article:nth-last-child(-n+2){margin-bottom:0!important}}@media only screen and (min-width:1024px){.navbar__inner a.navbar__item[href*=contributing]{background:#fff;border:1px solid var(--ifm-color-primary);border-radius:20px;color:var(--ifm-color-primary);font-size:14px;font-weight:700;height:35px;line-height:35px;margin-left:16px;padding:0 16px}.navbar__inner a.navbar__item[href*=contributing]:hover{background:var(--ifm-color-primary);color:#fff}}@media (min-width:1200px){.homeNavItem h1{font-size:3.5rem;line-height:1.2}.container.container-custom{max-width:1140px}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.searchBox_ZlJk{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media only screen and (max-width:996px){.searchQueryColumn_RTkw,.searchResultsColumn_JPFH{max-width:60%!important}.searchLogoColumn_rJIA,.searchVersionColumn_ypXd{max-width:40%!important}.searchLogoColumn_rJIA{padding-left:0!important}}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder,.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%;max-height:calc(var(--docsearch-vh,1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:0;overflow:hidden;padding:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}}@media only screen and (max-width:750px){.DocSearch.DocSearch-Button{width:38px}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}}@media screen and (max-width:576px){.searchQueryColumn_RTkw{max-width:100%!important}.searchVersionColumn_ypXd{max-width:100%!important;padding-left:var(--ifm-spacing-horizontal)!important}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{stroke-width:var(--docsearch-icon-stroke-width);animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0}.DocSearch-Hit--deleting,.DocSearch-Hit--favoriting{transition:none}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:none}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file +.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.DocSearch-Button,.button{-webkit-user-select:none;-moz-user-select:none}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.dropdown,pre{position:relative}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.markdown li,body{word-wrap:break-word}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}*,.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:transparent;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:rgba(0,0,0,.05);--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 rgba(0,0,0,.1);--ifm-global-shadow-md:0 5px 40px rgba(0,0,0,.2);--ifm-global-shadow-tl:0 12px 28px 0 rgba(0,0,0,.2),0 2px 4px 0 rgba(0,0,0,.1);--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:transparent;--ifm-table-stripe-background:rgba(0,0,0,.03);--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#e6007a;--ifm-color-primary-dark:#cf006e;--ifm-color-primary-darker:#c40068;--ifm-color-primary-darkest:#a10055;--ifm-color-primary-light:#fd0086;--ifm-color-primary-lighter:#ff0a8c;--ifm-color-primary-lightest:#ff2c9c;--secondaryColor:#172026;--snowColor:#efefef;--silverColor:#b7b8bb;--nickelColor:#6d7278;--blackColor:#000;--ifm-navbar-height:50px;--sansFontFamily:"Inter",sans-serif!important;--headingFontFamily:"Unbounded",sans-serif!important;--docsearch-searchbox-background:#fff;--docsearch-searchbox-shadow:var(--snowColor);--docusaurus-announcement-bar-height:auto!important;--custom-code-block-background:#f6f8fa;--docusaurus-highlighted-code-line-bg:#e6ebf1;--custom-content-max-width:none;--docusaurus-announcement-bar-height:auto;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docusaurus-collapse-button-bg:transparent;--docusaurus-collapse-button-bg-hover:rgba(0,0,0,.1);--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12);--docsearch-primary-color:var(--ifm-color-primary);--docsearch-text-color:var(--ifm-font-color-base)}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:transparent}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);text-rendering:optimizelegibility}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.list_eTzJ article:last-child,.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none,.tabItem_LNqP,footer .list-social-links li{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid rgba(0,0,0,.1);border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:transparent;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}.container_lyt7,.container_lyt7>svg,img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul,.tabList__CuJ{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol,ol ul,ul ol,ul ul{margin:0}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{list-style:none;padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:rgba(53,120,229,.15);--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:rgba(235,237,240,.15);--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:rgba(0,164,0,.15);--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:rgba(84,199,236,.15);--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:rgba(255,186,0,.15);--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:rgba(250,56,62,.15);--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{-moz-column-gap:var(--ifm-avatar-intro-margin);column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs__link:-moz-any-link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs__link:any-link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:transparent;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;list-style:none;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor transparent;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.docs-wrapper,.navbar__inner{max-width:var(--custom-content-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer-legal li+li,.footer__item,.h1,.h2,.h3,.h4,.h5,.h6{margin-top:0}.admonitionContent_S0QG>:last-child,.cardContainer_fWXF :last-child,.collapsibleContent_i85q>:last-child,.footer-legal ul,.footer__items,.tabItem_Ymn6>:last-child{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title,.homeNavItem h1{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{list-style:none;margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;top:0;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;left:0;visibility:hidden}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;content:"";filter:var(--ifm-menu-link-sublist-icon-filter)}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.navbar__items--center .navbar__brand,body{margin:0}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:hsla(0,0%,100%,.1);--ifm-navbar-search-input-placeholder-color:hsla(0,0%,100%,.5);color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:hsla(0,0%,100%,.05);--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::-moz-placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);position:fixed;transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:rgba(0,0,0,.6);position:fixed;right:0;transition-property:opacity,visibility}.btn-primary,.cards,.nav-footer{position:relative}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.container.container-custom,.navbar__inner,article iframe,article img{margin-left:auto;margin-right:auto}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{-moz-column-gap:var(--ifm-pagination-page-spacing);column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.homeContainer a,.nav-footer a:hover,.pagination__link:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.text-heading,h1{line-height:1.333333}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid transparent;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}#__docusaurus-base-url-issue-banner-container,.DocSearch.DocSearch-Button .DocSearch-Button-Keys,.docSidebarContainer_b6E3,.navbar__inner .navbar__item:last-child a:after,.navbar__inner a.navbar__item svg[class^=iconExternalLink],.sidebarLogo_isFc,.themedImage_ToTc,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:hsla(0,0%,100%,.05);--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:hsla(0,0%,100%,.1);--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:hsla(0,0%,100%,.07);--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec;--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}@font-face{font-family:Unbounded;font-weight:100 900;src:url(/assets/fonts/Unbounded-Variable-a247d72576aff02445f8abeb96056589.woff2) format("woff2-variations")}body{font-family:var(--sansFontFamily)}h1{font-family:Unbounded,sans-serif!important;padding-top:1.2rem}h2,h3,h4,h5,h6{font-family:var(--sansFontFamily)}.text-heading{font-family:var(--headingFontFamily)}.font-weight-medium{font-weight:500!important}.font-weight-bolder{font-weight:900!important}button.menu__button{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.img_ev3q,.navbar.navbar--fixed-top{height:auto}.DocSearch.DocSearch-Button{background-color:#fff;border:1px solid var(--snowColor);color:var(--silverColor);cursor:text;width:170px}.btn-primary:before,.btn-primary[type=submit]:active,.btn-primary[type=submit]:focus,.btn-primary[type=submit]:hover{background:var(--ifm-color-primary)}.DocSearch.DocSearch-Button .DocSearch-Search-Icon{color:var(--silverColor)}.DocSearch.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--secondaryColor)}.DocSearch.DocSearch-Button .DocSearch-Button-Placeholder{font-size:13px;font-weight:500}.navbar__inner .navbar__item:last-child{margin-left:5px;margin-right:5px;opacity:1}.navbar__inner .navbar__item:last-child .dropdown__menu{border-radius:1.5rem;box-shadow:0 1rem 3rem rgba(0,0,0,.175);right:0;text-align:center;top:32px}.navbar__inner .navbar__item:last-child .dropdown__menu>li a{color:var(--secondaryColor);padding:12px 24px}.navbar__inner .navbar__item:last-child .dropdown__menu>li a.dropdown__link--active{background-color:#fff;color:var(--blackColor)}.navbar__inner .navbar__item:last-child .dropdown__menu>li a.dropdown__link--active:hover,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.navbar__inner .navbar__item:last-child .dropdown__menu>li a:hover{background-color:var(--snowColor);color:var(--ifm-color-primary)}.homeContainer{background:#fff;text-align:center}.homeFooterContainer,div[role=banner]{background-image:linear-gradient(217deg,rgba(196,0,97,.8),rgba(196,0,97,0) 70%),linear-gradient(127deg,rgba(230,0,122,.8),rgba(230,0,122,0) 70%),linear-gradient(336deg,rgba(103,69,210,.7),rgba(103,69,210,0) 70%)}.text-dark{color:var(--secondaryColor)!important}.homeNavContainer,.homeNavItem{padding:3rem 0}.homeNavItem{border-radius:3.25rem!important;transition:.15s ease-in-out}.homeNavItem p{max-width:300px}div[role=banner]{padding:10px 0}div[role=banner] .close{color:#fff}div[role=banner] .close:focus,div[role=banner] .close:hover{color:#fff!important;opacity:1}div.sticky{background-color:#f5cbc4;font-family:Unbounded;font-size:20px;padding:30px;position:sticky;top:0}.homeFooterContainer{background-color:#e6007a;padding:6rem 0 4rem}.homeFooterContainer .col-lg-6{align-items:flex-start;display:flex;flex-flow:column nowrap;margin-bottom:2rem}.homeFooterContainer .col-lg-6>:first-child{margin-bottom:1.3rem}.homeFooterContainer p{margin-bottom:2.5rem}.docs-wrapper{margin:0 auto;padding-bottom:80px}article blockquote{background-color:rgba(255,229,100,.3);border-left:8px solid #ffe564}article iframe,article img{display:block;max-width:100%}.prism-code{background-color:var(--custom-code-block-background)!important}.prism-code>div{width:100px!important}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{font-weight:600}.btn{font-size:16px;font-weight:700;padding:8px 16px}.btn,.btn:before{border-radius:1.5rem}.btn:before{left:-42px;width:42px}.btn-group-lg>.btn,.btn-lg{border-radius:2rem;padding:16px 20px}.btn-group-lg>.btn:before,.btn-lg:before{border-radius:2rem;left:-58px;width:58px}.btn-group-sm>.btn,.btn-sm{border-radius:1.5rem;font-size:16px;padding:8px 16px}.btn-group-sm>.btn:before,.btn-sm:before{border-radius:1.5rem;left:-42px;width:42px}.btn-primary{background-color:transparent;border-color:var(--ifm-color-primary);color:var(--ifm-color-primary);overflow:hidden;transform:scale(.999);transition:.2s,border 1ms;z-index:1}.btn-primary,.btn-primary:before{border:1px solid var(--ifm-color-primary);will-change:transform}.btn-primary:before{color:transparent;content:"";height:100%;position:absolute;top:0;transition:.2s;z-index:-1}.btn-primary:active,.btn-primary:focus,.btn-primary:hover{background:none;border:1px solid transparent;color:#fff;transform:scale(1.05);will-change:transform}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 .2rem .2rem rgba(0,0,0,.1)}.btn-primary:not(:disabled):not(.disabled):active{background-color:transparent}.btn-primary:active:before,.btn-primary:focus:before,.btn-primary:hover:before{left:0;width:100%}.btn-bg-primary.btn-primary{border:1px solid #fff;color:#fff!important}.btn-bg-primary.btn-primary:active,.btn-bg-primary.btn-primary:focus,.btn-bg-primary.btn-primary:hover{background:#fff;color:var(--ifm-color-primary)!important}.btn-bg-primary.btn-primary:before{background:#fff;border:1px solid #fff;color:transparent;content:none;height:100%;position:absolute;top:0;transition:.2s;will-change:transform;z-index:-1}.btn-white,.footer-legal a.text-white:hover,.nav-footer a.text-white:hover{color:#fff!important}.nav-footer.spacer-y-4{padding-bottom:3rem;padding-top:3rem}.nav-footer.pb-4{padding-bottom:2.25rem!important}.nav-footer .text-small{font-size:.875rem}.nav-footer{background:var(--secondaryColor);border:none;color:#202020;font-size:16px;line-height:24px}.nav-footer h5{font-size:1.25rem;font-weight:400;margin-top:0}.nav-footer a.text-white,.nav-footer a.text-white:visited{color:var(--silverColor)!important}.nav-footer-item-pill{background-color:#e6007a;border-radius:10px;color:#fff;font-size:.75rem;font-weight:700;padding:1px 8px}.list-social-links{display:flex;list-style:none;padding:0}.cardTitle_rnsV,footer .list-social-links i{font-size:1.2rem}footer .list-social-links a{text-decoration:none;background:0 0!important;border:1px solid #fff;border-radius:50%;color:#fff;display:block;padding:.25rem .9rem}footer [class^=socicon-]{line-height:2}footer .list-social-links{margin-left:0}.footer-legal .navbar-brand{display:block;padding-bottom:0}.footer-legal .list-pipe-separator>li:not(:last-child)>a:after{content:"|";margin:0 .375rem;opacity:.5}.footer-legal a.text-white,.footer-legal a.text-white:visited{color:#b5aeae!important}.cards-container{flex-flow:row wrap;max-width:100%;min-width:0}.cards,.cards-container{align-items:center;display:flex;justify-content:center}.cards{border:1px solid var(--primaryColor);border-radius:10px;box-shadow:0 .1rem .1rem rgba(0,0,0,.4);height:80px;margin:5px;padding:10px;top:0;transition:top .2s;width:350px}.cards:hover{top:-5px}.cards-body{align-items:flex-start;color:#000;display:flex;flex:1 auto;flex-flow:column nowrap;margin-left:5px}.cards-title{align-content:center;color:var(--ifm-color-primary-dark);font-size:1rem;font-weight:700}.cards-text{margin:1px 1px 1px 5px}.docusaurus-highlight-code-line{background-color:#faff9f;display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}html[data-theme=dark] .docusaurus-highlight-code-line{background-color:#646464}.container.container-custom{width:100%}pre .btnIcon{background-color:hsla(0,0%,100%,.7);border:1px solid transparent;color:#000;cursor:pointer;height:30px;padding:3px;position:absolute;top:4px;transition:.25s ease-out;z-index:2}pre .btnIcon:hover{border:1px solid silver;text-decoration:none}.DocSearch-Button-Container,.btnIcon__body{align-items:center;display:flex}.btnIcon svg{fill:currentColor;margin-right:.4em}.btnIcon__label{font-size:11px}.btnClipboard{right:10px}@font-face{font-family:Socicon;font-style:normal;font-weight:400;src:url(/assets/fonts/Socicon-5e166614f1c831694816befaba8d03cf.eot);src:url(/assets/fonts/Socicon-5e166614f1c831694816befaba8d03cf.eot#iefix) format("embedded-opentype"),url(/assets/fonts/Socicon-d02985133d7e9e09bde470dd54104762.woff2) format("woff2"),url(/assets/fonts/Socicon-48b2d1e286d6b8d6ebefa630301dcf3b.ttf) format("truetype"),url(/assets/fonts/Socicon-9075c233656883ebc65aeb93d2fb76ba.woff) format("woff"),url(/assets/images/Socicon-620cd8c93935433c4e69112bb91768e8.svg#Socicon) format("svg")}[class*=" socicon-"],[class^=socicon-]{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Socicon!important;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none}.socicon-internet:before{content:"\e957"}.socicon-moddb:before{content:"\e94b"}.socicon-indiedb:before{content:"\e94c"}.socicon-traxsource:before{content:"\e94d"}.socicon-gamefor:before{content:"\e94e"}.socicon-pixiv:before{content:"\e94f"}.socicon-myanimelist:before{content:"\e950"}.socicon-blackberry:before{content:"\e951"}.socicon-wickr:before{content:"\e952"}.socicon-spip:before{content:"\e953"}.socicon-napster:before{content:"\e954"}.socicon-beatport:before{content:"\e955"}.socicon-hackerone:before{content:"\e956"}.socicon-hackernews:before{content:"\e946"}.socicon-smashwords:before{content:"\e947"}.socicon-kobo:before{content:"\e948"}.socicon-bookbub:before{content:"\e949"}.socicon-mailru:before{content:"\e94a"}.socicon-gitlab:before{content:"\e945"}.socicon-instructables:before{content:"\e944"}.socicon-portfolio:before{content:"\e943"}.socicon-codered:before{content:"\e940"}.socicon-origin:before{content:"\e941"}.socicon-nextdoor:before{content:"\e942"}.socicon-udemy:before{content:"\e93f"}.socicon-livemaster:before{content:"\e93e"}.socicon-crunchbase:before{content:"\e93b"}.socicon-homefy:before{content:"\e93c"}.socicon-calendly:before{content:"\e93d"}.socicon-realtor:before{content:"\e90f"}.socicon-tidal:before{content:"\e910"}.socicon-qobuz:before{content:"\e911"}.socicon-natgeo:before{content:"\e912"}.socicon-mastodon:before{content:"\e913"}.socicon-unsplash:before{content:"\e914"}.socicon-homeadvisor:before{content:"\e915"}.socicon-angieslist:before{content:"\e916"}.socicon-codepen:before{content:"\e917"}.socicon-slack:before{content:"\e918"}.socicon-openaigym:before{content:"\e919"}.socicon-logmein:before{content:"\e91a"}.socicon-fiverr:before{content:"\e91b"}.socicon-gotomeeting:before{content:"\e91c"}.socicon-aliexpress:before{content:"\e91d"}.socicon-guru:before{content:"\e91e"}.socicon-appstore:before{content:"\e91f"}.socicon-homes:before{content:"\e920"}.socicon-zoom:before{content:"\e921"}.socicon-alibaba:before{content:"\e922"}.socicon-craigslist:before{content:"\e923"}.socicon-wix:before{content:"\e924"}.socicon-redfin:before{content:"\e925"}.socicon-googlecalendar:before{content:"\e926"}.socicon-shopify:before{content:"\e927"}.socicon-freelancer:before{content:"\e928"}.socicon-seedrs:before{content:"\e929"}.socicon-bing:before{content:"\e92a"}.socicon-doodle:before{content:"\e92b"}.socicon-bonanza:before{content:"\e92c"}.socicon-squarespace:before{content:"\e92d"}.socicon-toptal:before{content:"\e92e"}.socicon-gust:before{content:"\e92f"}.socicon-ask:before{content:"\e930"}.socicon-trulia:before{content:"\e931"}.socicon-loomly:before{content:"\e932"}.socicon-ghost:before{content:"\e933"}.socicon-upwork:before{content:"\e934"}.socicon-fundable:before{content:"\e935"}.socicon-booking:before{content:"\e936"}.socicon-googlemaps:before{content:"\e937"}.socicon-zillow:before{content:"\e938"}.socicon-niconico:before{content:"\e939"}.socicon-toneden:before{content:"\e93a"}.socicon-augment:before{content:"\e908"}.socicon-bitbucket:before{content:"\e909"}.socicon-fyuse:before{content:"\e90a"}.socicon-yt-gaming:before{content:"\e90b"}.socicon-sketchfab:before{content:"\e90c"}.socicon-mobcrush:before{content:"\e90d"}.socicon-microsoft:before{content:"\e90e"}.socicon-pandora:before{content:"\e907"}.socicon-messenger:before{content:"\e906"}.socicon-gamewisp:before{content:"\e905"}.socicon-bloglovin:before{content:"\e904"}.socicon-tunein:before{content:"\e903"}.socicon-gamejolt:before{content:"\e901"}.socicon-trello:before{content:"\e902"}.socicon-spreadshirt:before{content:"\e900"}.socicon-500px:before{content:"\e000"}.socicon-8tracks:before{content:"\e001"}.socicon-airbnb:before{content:"\e002"}.socicon-alliance:before{content:"\e003"}.socicon-amazon:before{content:"\e004"}.socicon-amplement:before{content:"\e005"}.socicon-android:before{content:"\e006"}.socicon-angellist:before{content:"\e007"}.socicon-apple:before{content:"\e008"}.socicon-appnet:before{content:"\e009"}.socicon-baidu:before{content:"\e00a"}.socicon-bandcamp:before{content:"\e00b"}.socicon-battlenet:before{content:"\e00c"}.socicon-mixer:before{content:"\e00d"}.socicon-bebee:before{content:"\e00e"}.socicon-bebo:before{content:"\e00f"}.socicon-behance:before{content:"\e010"}.socicon-blizzard:before{content:"\e011"}.socicon-blogger:before{content:"\e012"}.socicon-buffer:before{content:"\e013"}.socicon-chrome:before{content:"\e014"}.socicon-coderwall:before{content:"\e015"}.socicon-curse:before{content:"\e016"}.socicon-dailymotion:before{content:"\e017"}.socicon-deezer:before{content:"\e018"}.socicon-delicious:before{content:"\e019"}.socicon-deviantart:before{content:"\e01a"}.socicon-diablo:before{content:"\e01b"}.socicon-digg:before{content:"\e01c"}.socicon-discord:before{content:"\e01d"}.socicon-disqus:before{content:"\e01e"}.socicon-douban:before{content:"\e01f"}.socicon-draugiem:before{content:"\e020"}.socicon-dribbble:before{content:"\e021"}.socicon-drupal:before{content:"\e022"}.socicon-ebay:before{content:"\e023"}.socicon-ello:before{content:"\e024"}.socicon-endomodo:before{content:"\e025"}.socicon-envato:before{content:"\e026"}.socicon-etsy:before{content:"\e027"}.socicon-facebook:before{content:"\e028"}.socicon-feedburner:before{content:"\e029"}.socicon-filmweb:before{content:"\e02a"}.socicon-firefox:before{content:"\e02b"}.socicon-flattr:before{content:"\e02c"}.socicon-flickr:before{content:"\e02d"}.socicon-formulr:before{content:"\e02e"}.socicon-forrst:before{content:"\e02f"}.socicon-foursquare:before{content:"\e030"}.socicon-friendfeed:before{content:"\e031"}.socicon-github:before{content:"\e032"}.socicon-goodreads:before{content:"\e033"}.socicon-google:before{content:"\e034"}.socicon-googlescholar:before{content:"\e035"}.socicon-googlegroups:before{content:"\e036"}.socicon-googlephotos:before{content:"\e037"}.socicon-googleplus:before{content:"\e038"}.socicon-grooveshark:before{content:"\e039"}.socicon-hackerrank:before{content:"\e03a"}.socicon-hearthstone:before{content:"\e03b"}.socicon-hellocoton:before{content:"\e03c"}.socicon-heroes:before{content:"\e03d"}.socicon-smashcast:before{content:"\e03e"}.socicon-horde:before{content:"\e03f"}.socicon-houzz:before{content:"\e040"}.socicon-icq:before{content:"\e041"}.socicon-identica:before{content:"\e042"}.socicon-imdb:before{content:"\e043"}.socicon-instagram:before{content:"\e044"}.socicon-issuu:before{content:"\e045"}.socicon-istock:before{content:"\e046"}.socicon-itunes:before{content:"\e047"}.socicon-keybase:before{content:"\e048"}.socicon-lanyrd:before{content:"\e049"}.socicon-lastfm:before{content:"\e04a"}.socicon-line:before{content:"\e04b"}.socicon-linkedin:before{content:"\e04c"}.socicon-livejournal:before{content:"\e04d"}.socicon-lyft:before{content:"\e04e"}.socicon-macos:before{content:"\e04f"}.socicon-mail:before{content:"\e050"}.socicon-medium:before{content:"\e051"}.socicon-meetup:before{content:"\e052"}.socicon-mixcloud:before{content:"\e053"}.socicon-modelmayhem:before{content:"\e054"}.socicon-mumble:before{content:"\e055"}.socicon-myspace:before{content:"\e056"}.socicon-newsvine:before{content:"\e057"}.socicon-nintendo:before{content:"\e058"}.socicon-npm:before{content:"\e059"}.socicon-odnoklassniki:before{content:"\e05a"}.socicon-openid:before{content:"\e05b"}.socicon-opera:before{content:"\e05c"}.socicon-outlook:before{content:"\e05d"}.socicon-overwatch:before{content:"\e05e"}.socicon-patreon:before{content:"\e05f"}.socicon-paypal:before{content:"\e060"}.socicon-periscope:before{content:"\e061"}.socicon-persona:before{content:"\e062"}.socicon-pinterest:before{content:"\e063"}.socicon-play:before{content:"\e064"}.socicon-player:before{content:"\e065"}.socicon-playstation:before{content:"\e066"}.socicon-pocket:before{content:"\e067"}.socicon-qq:before{content:"\e068"}.socicon-quora:before{content:"\e069"}.socicon-raidcall:before{content:"\e06a"}.socicon-ravelry:before{content:"\e06b"}.socicon-reddit:before{content:"\e06c"}.socicon-renren:before{content:"\e06d"}.socicon-researchgate:before{content:"\e06e"}.socicon-residentadvisor:before{content:"\e06f"}.socicon-reverbnation:before{content:"\e070"}.socicon-rss:before{content:"\e071"}.socicon-sharethis:before{content:"\e072"}.socicon-skype:before{content:"\e073"}.socicon-slideshare:before{content:"\e074"}.socicon-smugmug:before{content:"\e075"}.socicon-snapchat:before{content:"\e076"}.socicon-songkick:before{content:"\e077"}.socicon-soundcloud:before{content:"\e078"}.socicon-spotify:before{content:"\e079"}.socicon-stackexchange:before{content:"\e07a"}.socicon-stackoverflow:before{content:"\e07b"}.socicon-starcraft:before{content:"\e07c"}.socicon-stayfriends:before{content:"\e07d"}.socicon-steam:before{content:"\e07e"}.socicon-storehouse:before{content:"\e07f"}.socicon-strava:before{content:"\e080"}.socicon-streamjar:before{content:"\e081"}.socicon-stumbleupon:before{content:"\e082"}.socicon-swarm:before{content:"\e083"}.socicon-teamspeak:before{content:"\e084"}.socicon-teamviewer:before{content:"\e085"}.socicon-technorati:before{content:"\e086"}.socicon-telegram:before{content:"\e087"}.socicon-tripadvisor:before{content:"\e088"}.socicon-tripit:before{content:"\e089"}.socicon-triplej:before{content:"\e08a"}.socicon-tumblr:before{content:"\e08b"}.socicon-twitch:before{content:"\e08c"}.socicon-twitter:before{content:"\e08d"}.socicon-uber:before{content:"\e08e"}.socicon-ventrilo:before{content:"\e08f"}.socicon-viadeo:before{content:"\e090"}.socicon-viber:before{content:"\e091"}.socicon-viewbug:before{content:"\e092"}.socicon-vimeo:before{content:"\e093"}.socicon-vine:before{content:"\e094"}.socicon-vkontakte:before{content:"\e095"}.socicon-warcraft:before{content:"\e096"}.socicon-wechat:before{content:"\e097"}.socicon-weibo:before{content:"\e098"}.socicon-whatsapp:before{content:"\e099"}.socicon-wikipedia:before{content:"\e09a"}.socicon-windows:before{content:"\e09b"}.socicon-wordpress:before{content:"\e09c"}.socicon-wykop:before{content:"\e09d"}.socicon-xbox:before{content:"\e09e"}.socicon-xing:before{content:"\e09f"}.socicon-yahoo:before{content:"\e0a0"}.socicon-yammer:before{content:"\e0a1"}.socicon-yandex:before{content:"\e0a2"}.socicon-yelp:before{content:"\e0a3"}.socicon-younow:before{content:"\e0a4"}.socicon-youtube:before{content:"\e0a5"}.socicon-zapier:before{content:"\e0a6"}.socicon-zerply:before{content:"\e0a7"}.socicon-zomato:before{content:"\e0a8"}.socicon-zynga:before{content:"\e0a9"}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit;text-decoration:underline}.DocSearch-Container a,.tag_zVej:hover{text-decoration:none}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedImage--dark_i4oU,[data-theme=light] .themedImage--light_HNdA,html:not([data-theme]) .themedComponent--light_NU7w{display:initial}.iconExternalLink_nPIU{margin-left:.3rem}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color)}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.lastUpdated_vwxv{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.tocCollapsibleContent_vkbj a{display:block}.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.searchQueryInput_u2C7,.searchVersionInput_m0Ui{background:var(--docsearch-searchbox-focus-background);border:2px solid var(--ifm-toc-border-color);border-radius:var(--ifm-global-radius);color:var(--docsearch-text-color);font:var(--ifm-font-size-base) var(--ifm-font-family-base);margin-bottom:.5rem;padding:.8rem;transition:border var(--ifm-transition-fast) ease;width:100%}.searchQueryInput_u2C7:focus,.searchVersionInput_m0Ui:focus{border-color:var(--docsearch-primary-color);outline:0}.searchQueryInput_u2C7::-moz-placeholder{color:var(--docsearch-muted-color)}.searchQueryInput_u2C7::placeholder{color:var(--docsearch-muted-color)}.searchResultsColumn_JPFH{font-size:.9rem;font-weight:700}.algoliaLogo_rT1R{max-width:150px}.algoliaLogoPathFill_WdUC{fill:var(--ifm-font-color-base)}.searchResultItem_Tv2o{border-bottom:1px solid var(--ifm-toc-border-color);padding:1rem 0}.searchResultItemHeading_KbCB{font-weight:400;margin-bottom:0}.searchResultItemPath_lhe1{--ifm-breadcrumb-separator-size-multiplier:1;color:var(--ifm-color-content-secondary);font-size:.8rem}.searchResultItemSummary_AEaO{font-style:italic;margin:.5rem 0 0}.loadingSpinner_XVxU{animation:1s linear infinite a;border:.4em solid #eee;border-radius:50%;border-top:.4em solid var(--ifm-color-primary);height:3rem;margin:0 auto;width:3rem}@keyframes a{to{transform:rotate(1turn)}}.loader_vvXV{margin-top:2rem}.search-result-match{background:rgba(255,215,142,.25);color:var(--docsearch-hit-color);padding:.09em 0}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}[data-theme=dark]:root{--docusaurus-collapse-button-bg:hsla(0,0%,100%,.05);--docusaurus-collapse-button-bg-hover:hsla(0,0%,100%,.1)}.collapseSidebarButton_PEFL{display:none;margin:0}.docMainContainer_gTbr,.docPage__5DB{display:flex;width:100%}.docPage__5DB{flex:1 0}.docsWrapper_BCFX{display:flex;flex:1 0 auto}.cardContainer_fWXF{--ifm-link-color:var(--ifm-color-emphasis-800);--ifm-link-hover-color:var(--ifm-color-emphasis-700);--ifm-link-hover-decoration:none;border:1px solid var(--ifm-color-emphasis-200);box-shadow:0 1.5px 3px 0 rgba(0,0,0,.15);transition:all var(--ifm-transition-fast) ease;transition-property:border,box-shadow}.cardContainer_fWXF:hover{border-color:var(--ifm-color-primary);box-shadow:0 3px 6px 0 rgba(0,0,0,.2)}.cardDescription_PWke{font-size:.8rem}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;padding:0 8px;user-select:none}.DocSearch-Footer,.DocSearch-Help{-webkit-user-select:none;-moz-user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:0}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Hit-Tree,.DocSearch-Hit-action,.DocSearch-Hit-icon,.DocSearch-Reset{stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Input,.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;font:inherit}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 2px;position:relative;top:-1px;width:20px}.DocSearch--active{overflow:hidden!important}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Link{appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{appearance:none;background:0 0;border:0;color:var(--docsearch-text-color);flex:1;font-size:1.2em;height:100%;outline:0;padding:0 0 0 8px;width:80%}.DocSearch-Hit-action-button,.DocSearch-Reset{-webkit-appearance:none;-moz-appearance:none;border:0;cursor:pointer}.DocSearch-Input::-moz-placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Cancel,.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator,.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset{animation:.1s ease-in forwards b;appearance:none;background:none;border-radius:50%;color:var(--docsearch-icon-color);padding:2px;right:0}.DocSearch-Help,.DocSearch-HitsFooter,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:0 0}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help{font-size:.9em;margin:0;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}.DocSearch-Hit--deleting{opacity:0;transition:.25s linear}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:.25s linear .25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{appearance:none;background:none;border-radius:50%;color:inherit;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:background-color .1s ease-in}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:0;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;user-select:none;width:100%;z-index:300}.DocSearch-Commands li,.DocSearch-Commands-Key{align-items:center;display:flex}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{background:var(--docsearch-key-gradient);border:0;border-radius:2px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;width:20px}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}@keyframes b{0%{opacity:0}to{opacity:1}}.DocSearch-Button{margin:0;transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.DocSearch-Container{z-index:calc(var(--ifm-z-index-fixed) + 1)}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;-moz-user-select:none;user-select:none}.hash-link:before{content:"#"}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{-moz-column-gap:.2rem;column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;list-style:none;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:transparent transparent transparent var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.containsTaskList_mC6p{list-style:none}.admonition_LlT9{margin-bottom:1em}.admonitionHeading_tbUL{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.3rem;text-transform:uppercase}.admonitionHeading_tbUL code{text-transform:none}.admonitionIcon_kALy{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_kALy svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.title_kItE{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-leading)*1.25)}@media (min-width:576px){.container.container-custom{max-width:540px}}@media (min-width:768px){.nav-footer.spacer-y-4{padding-bottom:6rem;padding-top:6rem}.nav-footer .py-md-1{padding-bottom:.375rem!important;padding-top:.375rem!important}.container.container-custom{max-width:720px}}@media (min-width:992px){.homeNavContainer{height:90vh;max-height:900px;min-height:600px}.homeNavItem{border-radius:3.25rem!important;margin-top:-3rem;min-height:400px;transition:.15s ease-in-out}.homeNavItem:after{-webkit-font-feature-settings:"liga";bottom:3rem;color:var(--silverColor);content:"arrow_upward";font-family:Material Icons;font-size:1.5rem;left:50%;opacity:0;position:absolute;transform:translate(-50%);transition:.2s ease-in-out}.homeNavItem:hover{box-shadow:0 1rem 3rem rgba(0,0,0,.04);transform:translateY(-1rem)}.homeNavItem:hover:after{opacity:1}.homeNavItemContent{margin-top:10%}.homeNavItem h1{font-size:4.2vw}.container.container-custom{max-width:960px}}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_m80_{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.searchBox_ZlJk{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_vwxv{text-align:right}.tocMobile_ITEo{display:none}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_BlDH,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_m80_:focus,.expandButton_m80_:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_m80_{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_BlDH{transform:rotate(180deg)}.docSidebarContainer_b6E3{border-right:1px solid var(--ifm-toc-border-color);-webkit-clip-path:inset(0);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_b3ry{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_Xe31{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_gTbr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_Uz_u{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_czyv{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.docItemCol_VOVn,.generatedIndexPage_vN6x{max-width:75%!important}.list_eTzJ article:nth-last-child(-n+2){margin-bottom:0!important}}@media only screen and (min-width:1024px){.navbar__inner a.navbar__item[href*=contributing]{background:#fff;border:1px solid var(--ifm-color-primary);border-radius:20px;color:var(--ifm-color-primary);font-size:14px;font-weight:700;height:35px;line-height:35px;margin-left:16px;padding:0 16px}.navbar__inner a.navbar__item[href*=contributing]:hover{background:var(--ifm-color-primary);color:#fff}}@media (min-width:1200px){.homeNavItem h1{font-size:3.5rem;line-height:1.2}.container.container-custom{max-width:1140px}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.searchBox_ZlJk{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media only screen and (max-width:996px){.searchQueryColumn_RTkw,.searchResultsColumn_JPFH{max-width:60%!important}.searchLogoColumn_rJIA,.searchVersionColumn_ypXd{max-width:40%!important}.searchLogoColumn_rJIA{padding-left:0!important}}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder,.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%;max-height:calc(var(--docsearch-vh,1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:0;overflow:hidden;padding:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}}@media only screen and (max-width:750px){.DocSearch.DocSearch-Button{width:38px}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}}@media screen and (max-width:576px){.searchQueryColumn_RTkw{max-width:100%!important}.searchVersionColumn_ypXd{max-width:100%!important;padding-left:var(--ifm-spacing-horizontal)!important}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{stroke-width:var(--docsearch-icon-stroke-width);animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0}.DocSearch-Hit--deleting,.DocSearch-Hit--favoriting{transition:none}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:none}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/assets/js/06597bc8.9063e606.js b/assets/js/06597bc8.9063e606.js deleted file mode 100644 index 33d17d60eab4..000000000000 --- a/assets/js/06597bc8.9063e606.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9856],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},h="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),h=p(n),c=o,m=h["".concat(l,".").concat(c)]||h[c]||d[c]||r;return n?a.createElement(m,i(i({ref:t},u),{},{components:n})):a.createElement(m,i({ref:t},u))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=c;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[h]="string"==typeof e?e:o,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>m,frontMatter:()=>s,metadata:()=>p,toc:()=>h});var a=n(87462),o=n(63366),r=(n(67294),n(3905)),i=["components"],s={id:"learn-treasury",title:"Governance v1 Treasury",sidebar_label:"Gov1 Treasury",description:"The Polkadot's On-chain Treasury during Gov1.",keywords:["treasury","funds","funding","tips","tipping"],slug:"../learn-treasury"},l=void 0,p={unversionedId:"learn/archive/learn-treasury",id:"learn/archive/learn-treasury",title:"Governance v1 Treasury",description:"The Polkadot's On-chain Treasury during Gov1.",source:"@site/../docs/learn/archive/learn-treasury.md",sourceDirName:"learn/archive",slug:"/learn/learn-treasury",permalink:"/docs/learn/learn-treasury",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/archive/learn-treasury.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710167319,formattedLastUpdatedAt:"Mar 11, 2024",frontMatter:{id:"learn-treasury",title:"Governance v1 Treasury",sidebar_label:"Gov1 Treasury",description:"The Polkadot's On-chain Treasury during Gov1.",keywords:["treasury","funds","funding","tips","tipping"],slug:"../learn-treasury"},sidebar:"docs",previous:{title:"Governance V1",permalink:"/docs/learn/learn-governance"},next:{title:"Polkadot Launch Phases",permalink:"/docs/learn/learn-launch"}},u={},h=[{value:"Funding the Treasury",id:"funding-the-treasury",level:2},{value:"Tipping",id:"tipping",level:2},{value:"Example",id:"example",level:3},{value:"Bounties Spending",id:"bounties-spending",level:2},{value:"Creating a Bounty Proposal",id:"creating-a-bounty-proposal",level:3},{value:"Closing a bounty",id:"closing-a-bounty",level:3},{value:"FAQ",id:"faq",level:2},{value:"What prevents the Treasury from being captured by a majority of the Council?",id:"what-prevents-the-treasury-from-being-captured-by-a-majority-of-the-council",level:3},{value:"Further Reading",id:"further-reading",level:2}],d={toc:h},c="wrapper";function m(e){var t=e.components,n=(0,o.Z)(e,i);return(0,r.kt)(c,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"sticky"},(0,r.kt)("br",null),(0,r.kt)("p",null,"The content on this page is archived. For up-to-date information about treasury, see the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-treasury"},"Polkadot OpenGov Treasury page"),".")),(0,r.kt)("p",null,"The Treasury is a pot of funds collected through a portion of block production rewards, transaction\nfees, slashing, ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-staking#inflation"},"staking inefficiencies"),", etc."),(0,r.kt)("p",null,"The Treasury funds are held in a ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-account-advanced#system-accounts"},"system account")," not\naccessible by anyone; only the system internal logic can access it. Funds can be spent by making a\nspending proposal that, if approved by the ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn/learn-governance#council"},"Council"),", will enter a\nwaiting period before distribution. This waiting period is known as the ",(0,r.kt)("em",{parentName:"p"},"spend period"),", and its\nduration is subject to ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn/learn-governance"},"governance"),", with the current default set to\n28 days. The Treasury attempts to spend as many\nproposals in the queue as it can without running out of funds."),(0,r.kt)("p",null,"Treasury payout is an automatic process:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"If the Treasury funds run out with approved proposals left to fund, those proposals are kept in\nthe approved queue, and will receive funding in the following spend period."),(0,r.kt)("li",{parentName:"ul"},"If the Treasury ends a spend period without spending all of its funds, it suffers a burn of a\npercentage of its funds - thereby causing deflationary pressure. This encourages the spending of\nthe funds in the Treasury by Polkadot's governance system.\nThis percentage is currently at 1% on Polkadot.\n","")),(0,r.kt)("p",null,"When a stakeholder wishes to propose a spend from the Treasury, they must reserve a deposit of at\nleast 5% of the proposed spend (see below for variations). This deposit will be slashed if the\nproposal is rejected, and returned if it is accepted."),(0,r.kt)("p",null,"Proposals may consist of (but are not limited to):"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Infrastructure deployment and continued operation."),(0,r.kt)("li",{parentName:"ul"},"Network security operations (monitoring services, continuous auditing)."),(0,r.kt)("li",{parentName:"ul"},"Ecosystem provisions (collaborations with friendly chains)."),(0,r.kt)("li",{parentName:"ul"},"Marketing activities (advertising, paid features, collaborations)."),(0,r.kt)("li",{parentName:"ul"},"Community events and outreach (meetups, pizza parties, hackerspaces)."),(0,r.kt)("li",{parentName:"ul"},"Software development (wallets and wallet integration, clients and client upgrades).")),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"learn-governance#council"},"Council")," governs the Treasury and how the funds are spent is up to\ntheir judgment."),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"The Council does not approve or deny Treasury Proposals based on the available funds. Proposals are\nnot approved just because there are funds ready to spend but are subject to a burn.")),(0,r.kt)("h2",{id:"funding-the-treasury"},"Funding the Treasury"),(0,r.kt)("p",null,"The Treasury is funded from different sources:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Slashing: When a validator is slashed for any reason, the slashed amount is sent to the Treasury\nwith a reward going to the entity that reported the validator (another validator). The reward is\ntaken from the slash amount and varies per offence and number of reporters."),(0,r.kt)("li",{parentName:"ol"},"Transaction fees: A portion of each block's transaction fees goes to the Treasury, with the\nremainder going to the block author."),(0,r.kt)("li",{parentName:"ol"},"Staking inefficiency: ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-staking#inflation"},"Inflation")," is designed to be 10% in the\nfirst year, and the ideal staking ratio is set at 50%, meaning half of all tokens should be\nlocked in staking. Any deviation from this ratio will cause a proportional amount of the\ninflation to go to the Treasury. In other words, if 50% of all tokens are staked, then 100% of\nthe inflation goes to the validators as reward. If the staking rate is greater than or less than\n50%, then the validators will receive less, with the remainder going to the Treasury."),(0,r.kt)("li",{parentName:"ol"},"Parathreads: ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-parathreads"},"Parathreads")," participate in a per-block auction for block\ninclusion. Part of this bid goes to the validator that accepts the block and the remainder goes\nto the Treasury.")),(0,r.kt)("h2",{id:"tipping"},"Tipping"),(0,r.kt)("p",null,"Next to the proposals process, a separate system for making tips exists for the Treasury. Tips can\nbe suggested by anyone and are supported by members of the Council. Tips do not have any definite\nvalue, and the final value of the tip is decided based on the median of all tips issued by the\ntippers."),(0,r.kt)("p",null,"Currently, the tippers are the same as the members of the Council. However, being a tipper is not\nthe direct responsibility of the Council, and at some point the Council and the tippers may be\ndifferent groups of accounts."),(0,r.kt)("p",null,"A tip will enter a closing phase when more than a half plus one of the tipping group have endorsed a\ntip. During that time frame, the other members of the tipping group can still issue their tips, but\ndo not have to. Once the window closes, anyone can call the ",(0,r.kt)("inlineCode",{parentName:"p"},"close_tip")," extrinsic, and the tip will\nbe paid out."),(0,r.kt)("p",null,"There are two types of tips:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"public: A small bond is required to place them. This bond depends on the tip message length, and a\nfixed bond constant defined on chain, currently 1 DOT.\nPublic tips carry a finder's fee of\n20%, which is paid out from the total amount."),(0,r.kt)("li",{parentName:"ul"},"tipper-initiated: Tips that a Council member published, do not have a finder's fee or a bond.")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"For information about how to submit a tip from the Treasury you can read\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181971"},"this support article"),".")),(0,r.kt)("p",null,"To better understand the process a tip goes through until it is paid out, let's consider the example\nbelow."),(0,r.kt)("h3",{id:"example"},"Example"),(0,r.kt)("p",null,"Bob has done something great for Polkadot.\nAlice has noticed this and decides to report Bob as deserving a tip from the Treasury. The Council\nis composed of three members Charlie, Dave, and Eve."),(0,r.kt)("p",null,"Alice begins the process by issuing the ",(0,r.kt)("inlineCode",{parentName:"p"},"report_awesome")," extrinsic. This extrinsic requires two\narguments, a reason and the beneficiary. Alice submits Bob's address with the reason being a UTF-8\nencoded URL to a post on ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io"},"Polkassembly"),"\n"," that explains her reasoning for\nwhy Bob deserves the tip."),(0,r.kt)("p",null,"As mentioned above, Alice must also lock up a deposit for making this report. The deposit is the\nbase deposit as set in the chain's parameter list, plus the additional deposit per byte contained in\nthe reason. This is why Alice submitted a URL as the reason instead of the explanation directly: it\nwas cheaper for her to do so. For her trouble, Alice is able to claim the eventual finder's fee if\nthe tip is approved by the tippers."),(0,r.kt)("p",null,"Since the tipper group is the same as the Council, the Council must now collectively (but also\nindependently) decide on the value of the tip that Bob deserves. Charlie, Dave, and Eve all review\nthe report and make tips according to their personal valuation of the benefit Bob has provided to\nPolkadot. Charlie tips\n10 DOT, Dave tips\n30 DOT, and Eve tips\n100 DOT."),(0,r.kt)("p",null,"The tip could have been closed out with only two of the three tippers. Once more than half of the\ntippers group have issued tip valuations, the countdown to close the tip will begin. In this case,\nthe third tipper issued their tip before the end of the closing period, so all three were able to\nmake their tip valuations known."),(0,r.kt)("p",null,"The actual tip that will be paid out to Bob is the median of these tips, so Bob will be paid out\n30 DOT from the Treasury. In order for Bob to\nbe paid his tip, some account must call the ",(0,r.kt)("inlineCode",{parentName:"p"},"close_tip")," extrinsic at the end of the closing period\nfor the tip. This extrinsic may be called by anyone."),(0,r.kt)("h2",{id:"bounties-spending"},"Bounties Spending"),(0,r.kt)("p",null,"There are practical limits to Council Members curation capabilities when it comes to treasury\nproposals: Council members likely do not have the expertise to make a proper assessment of the\nactivities described in all proposals. Even if individual Councillors have that expertise, it is\nhighly unlikely that a majority of members are capable in such diverse topics."),(0,r.kt)("p",null,"Bounties Spending proposals aim to delegate the curation activity of spending proposals to experts\ncalled Curators: They can be defined as addresses with agency over a portion of the Treasury with\nthe goal of fixing a bug or vulnerability, developing a strategy, or monitoring a set of tasks\nrelated to a specific topic: all for the benefit of the\nPolkadot ecosystem."),(0,r.kt)("p",null,"A proposer can submit a bounty proposal for the Council to pass, with a curator to be defined later,\nwhose background and expertise is such that they are capable of determining when the task is\ncomplete. Curators are selected by the Council after the bounty proposal passes, and need to add an\nupfront payment to take the position. This deposit can be used to punish them if they act\nmaliciously. However, if they are successful in their task of getting someone to complete the bounty\nwork, they will receive their deposit back and part of the bounty reward."),(0,r.kt)("p",null,"When submitting the value of the bounty, the proposer includes a reward for curators willing to\ninvest their time and expertise in the task: this amount is included in the total value of the\nbounty. In this sense, the curator's fee can be defined as the result of subtracting the value paid\nto the bounty rewardee from the total value of the bounty."),(0,r.kt)("p",null,"In general terms, curators are expected to have a well-balanced track record related to the issues\nthe bounty tries to resolve: they should be at least knowledgeable on the topics the bounty touches,\nand show project management skills or experience. These recommendations ensure an effective use of\nthe mechanism. A Bounty Spending is a reward for a specified body of work - or specified set of\nobjectives - that needs to be executed for a predefined treasury amount to be paid out. The\nresponsibility of assigning a payout address once the specified set of objectives is completed is\ndelegated to the curator."),(0,r.kt)("p",null,"After the Council has activated a bounty, it delegates the work that requires expertise to the\ncurator who gets to close the active bounty. Closing the active bounty enacts a delayed payout to\nthe payout address and a payout of the curator fee. The delay phase allows the Council to act if any\nissues arise."),(0,r.kt)("p",null,"To minimize storage on chain in the same way as any proposal, bounties don't contain contextual\ninformation. When a user submits a bounty spending proposal, they will probably need to find an\noff-chain way to explain the proposal (any of the available community forums serve this purpose).\n",(0,r.kt)("a",{parentName:"p",href:"https://docs.google.com/document/d/1-IBz_owspV5OcvezWXpksWDQReWowschD0TFuaVKKcU/edit?usp=sharing"},"This template"),"\ncan help as a checklist of all needed information for the Council to make an informed decision."),(0,r.kt)("p",null,"The bounty has a predetermined duration of 90 days with the possibility of being extended by the\ncurator. Aiming to maintain flexibility on the tasks\u2019 curation, the curator will be able to create\nsub-bounties for more granularity and allocation in the next iteration of the mechanism."),(0,r.kt)("h3",{id:"creating-a-bounty-proposal"},"Creating a Bounty Proposal"),(0,r.kt)("p",null,"Anyone can create a Bounty proposal using Polkadot-JS Apps: Users are able to submit a proposal on\nthe dedicated Bounty section under Governance. The development of a robust user interface to view\nand manage bounties in the Polkadot Apps is still under development and it will serve Council\nmembers, Curators and Beneficiaries of the bounties, as well as all users observing the on-chain\ntreasury governance. For now, the help of a Councillor is needed to open a bounty proposal as a\nmotion to be voted."),(0,r.kt)("p",null,"To submit a bounty, please visit ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps"},"Polkadot-JS Apps")," and click on the\ngovernance tab in the options bar on the top of the site. After, click on 'Bounties' and find the\nbutton '+ Add Bounty' on the upper-right side of the interface. Complete the bounty title, the\nrequested allocation (including curator's fee) and confirm the call."),(0,r.kt)("p",null,"After this, a Council member will need to assist you to pass the bounty proposal for vote as a\nmotion. You can contact the Council by joining the\nPolkadot Direction ",(0,r.kt)("a",{parentName:"p",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"channel"),"\n"," in\nElement or joining our\nPolkadot Discord ",(0,r.kt)("a",{parentName:"p",href:"https://parity.link/polkadot-discord"},"server"),"\n"," and publishing a\nshort description of your bounty, with a link to one of the ",(0,r.kt)("a",{parentName:"p",href:"#announcing-the-proposal"},"forums")," for\ncontextual information."),(0,r.kt)("p",null,"A bounty can be cancelled by deleting the earmark for a specific treasury amount or be closed if the\ntasks have been completed. On the opposite side, the 90 days life of a bounty can be extended by\namending the expiry block number of the bounty to stay active."),(0,r.kt)("h3",{id:"closing-a-bounty"},"Closing a bounty"),(0,r.kt)("p",null,"The curator can close the bounty once they approve the completion of its tasks. The curator should\nmake sure to set up the payout address on the active bounty beforehand. Closing the Active bounty\nenacts a delayed payout to the payout address and a payout of the curator fee."),(0,r.kt)("p",null,"A bounty can be closed by using the extrinsics tab and selecting the Treasury pallet, then\n",(0,r.kt)("inlineCode",{parentName:"p"},"Award_bounty"),", making sure the right bounty is to be closed and finally sign the transaction. It is\nimportant to note that those who received a reward after the bounty is completed, must claim the\nspecific amount of the payout from the payout address, by calling ",(0,r.kt)("inlineCode",{parentName:"p"},"Claim_bounty")," after the curator\nclosed the allocation."),(0,r.kt)("p",null,"To understand more about Bounties and how this new mechanism works, read this\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.network/kusama-and-polkadot-now-reward-curators-helping-to-scale-councils-functions-join-the-force-moving-the-community-forward/"},"Polkadot Blog post"),"."),(0,r.kt)("h2",{id:"faq"},"FAQ"),(0,r.kt)("h3",{id:"what-prevents-the-treasury-from-being-captured-by-a-majority-of-the-council"},"What prevents the Treasury from being captured by a majority of the Council?"),(0,r.kt)("p",null,"The majority of the Council can decide the outcome of a treasury spend proposal. In an adversarial\nmindset, we may consider the possibility that the Council may at some point go rogue and attempt to\nsteal all of the treasury funds. It is a possibility that the treasury pot becomes so great, that a\nlarge financial incentive would present itself."),(0,r.kt)("p",null,"For one, the Treasury has deflationary pressure due to the burn that is suffered every spend period.\nThe burn aims to incentivize the complete spend of all treasury funds at every burn period, so\nideally the treasury pot doesn't have time to accumulate mass amounts of wealth. However, it is the\ncase that the burn on the Treasury could be so little that it does not matter - as is the case\ncurrently on Kusama with a 0.2% burn."),(0,r.kt)("p",null,"However, it is the case on Kusama that the Council is composed of mainly well-known members of the\ncommunity. Remember, the Council is voted in by the token holders, so they must do some campaigning\nor otherwise be recognized to earn votes. In the scenario of an attack, the Council members would\nlose their social credibility. Furthermore, members of the Council are usually externally motivated\nby the proper operation of the chain. This external motivation is either because they run businesses\nthat depend on the chain, or they have direct financial gain (through their holdings) of the token\nvalue remaining steady."),(0,r.kt)("p",null,"Concretely, there are a couple on-chain methods that resist this kind of attack. One, the Council\nmajority may not be the token majority of the chain. This means that the token majority could vote\nto replace the Council if they attempted this attack - or even reverse the treasury spend. They\nwould do this through a normal referendum. Two, there are time delays to treasury spends. They are\nonly enacted every spend period. This means that there will be some time to observe this attack is\ntaking place. The time delay then allows chain participants time to respond. The response may take\nthe form of governance measures or - in the most extreme cases a liquidation of their holdings and a\nmigration to a minority fork. However, the possibility of this scenario is quite low."),(0,r.kt)("h2",{id:"further-reading"},"Further Reading"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/blob/master/frame/treasury/src/lib.rs"},"Substrate's Treasury Pallet"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/pallet_treasury/index.html"},"Documentation of the Rust implementation of the Treasury")))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/06597bc8.f4dd2684.js b/assets/js/06597bc8.f4dd2684.js new file mode 100644 index 000000000000..bd3cda39f0f2 --- /dev/null +++ b/assets/js/06597bc8.f4dd2684.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9856],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},h="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),h=p(n),c=o,m=h["".concat(l,".").concat(c)]||h[c]||d[c]||r;return n?a.createElement(m,i(i({ref:t},u),{},{components:n})):a.createElement(m,i({ref:t},u))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=c;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[h]="string"==typeof e?e:o,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>m,frontMatter:()=>s,metadata:()=>p,toc:()=>h});var a=n(87462),o=n(63366),r=(n(67294),n(3905)),i=["components"],s={id:"learn-treasury",title:"Governance v1 Treasury",sidebar_label:"Gov1 Treasury",description:"The Polkadot's On-chain Treasury during Gov1.",keywords:["treasury","funds","funding","tips","tipping"],slug:"../learn-treasury"},l=void 0,p={unversionedId:"learn/archive/learn-treasury",id:"learn/archive/learn-treasury",title:"Governance v1 Treasury",description:"The Polkadot's On-chain Treasury during Gov1.",source:"@site/../docs/learn/archive/learn-treasury.md",sourceDirName:"learn/archive",slug:"/learn/learn-treasury",permalink:"/docs/learn/learn-treasury",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/archive/learn-treasury.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-treasury",title:"Governance v1 Treasury",sidebar_label:"Gov1 Treasury",description:"The Polkadot's On-chain Treasury during Gov1.",keywords:["treasury","funds","funding","tips","tipping"],slug:"../learn-treasury"},sidebar:"docs",previous:{title:"Governance V1",permalink:"/docs/learn/learn-governance"},next:{title:"Polkadot Launch Phases",permalink:"/docs/learn/learn-launch"}},u={},h=[{value:"Funding the Treasury",id:"funding-the-treasury",level:2},{value:"Tipping",id:"tipping",level:2},{value:"Example",id:"example",level:3},{value:"Bounties Spending",id:"bounties-spending",level:2},{value:"Creating a Bounty Proposal",id:"creating-a-bounty-proposal",level:3},{value:"Closing a bounty",id:"closing-a-bounty",level:3},{value:"FAQ",id:"faq",level:2},{value:"What prevents the Treasury from being captured by a majority of the Council?",id:"what-prevents-the-treasury-from-being-captured-by-a-majority-of-the-council",level:3},{value:"Further Reading",id:"further-reading",level:2}],d={toc:h},c="wrapper";function m(e){var t=e.components,n=(0,o.Z)(e,i);return(0,r.kt)(c,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"sticky",style:{zIndex:1}},(0,r.kt)("br",null),(0,r.kt)("p",null,"The content on this page is archived. For up-to-date information about treasury, see the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-treasury"},"Polkadot OpenGov Treasury page"),".")),(0,r.kt)("p",null,"The Treasury is a pot of funds collected through a portion of block production rewards, transaction\nfees, slashing, ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-staking#inflation"},"staking inefficiencies"),", etc."),(0,r.kt)("p",null,"The Treasury funds are held in a ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-account-advanced#system-accounts"},"system account")," not\naccessible by anyone; only the system internal logic can access it. Funds can be spent by making a\nspending proposal that, if approved by the ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn/learn-governance#council"},"Council"),", will enter a\nwaiting period before distribution. This waiting period is known as the ",(0,r.kt)("em",{parentName:"p"},"spend period"),", and its\nduration is subject to ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn/learn-governance"},"governance"),", with the current default set to\n28 days. The Treasury attempts to spend as many\nproposals in the queue as it can without running out of funds."),(0,r.kt)("p",null,"Treasury payout is an automatic process:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"If the Treasury funds run out with approved proposals left to fund, those proposals are kept in\nthe approved queue, and will receive funding in the following spend period."),(0,r.kt)("li",{parentName:"ul"},"If the Treasury ends a spend period without spending all of its funds, it suffers a burn of a\npercentage of its funds - thereby causing deflationary pressure. This encourages the spending of\nthe funds in the Treasury by Polkadot's governance system.\nThis percentage is currently at 1% on Polkadot.\n","")),(0,r.kt)("p",null,"When a stakeholder wishes to propose a spend from the Treasury, they must reserve a deposit of at\nleast 5% of the proposed spend (see below for variations). This deposit will be slashed if the\nproposal is rejected, and returned if it is accepted."),(0,r.kt)("p",null,"Proposals may consist of (but are not limited to):"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Infrastructure deployment and continued operation."),(0,r.kt)("li",{parentName:"ul"},"Network security operations (monitoring services, continuous auditing)."),(0,r.kt)("li",{parentName:"ul"},"Ecosystem provisions (collaborations with friendly chains)."),(0,r.kt)("li",{parentName:"ul"},"Marketing activities (advertising, paid features, collaborations)."),(0,r.kt)("li",{parentName:"ul"},"Community events and outreach (meetups, pizza parties, hackerspaces)."),(0,r.kt)("li",{parentName:"ul"},"Software development (wallets and wallet integration, clients and client upgrades).")),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"learn-governance#council"},"Council")," governs the Treasury and how the funds are spent is up to\ntheir judgment."),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"The Council does not approve or deny Treasury Proposals based on the available funds. Proposals are\nnot approved just because there are funds ready to spend but are subject to a burn.")),(0,r.kt)("h2",{id:"funding-the-treasury"},"Funding the Treasury"),(0,r.kt)("p",null,"The Treasury is funded from different sources:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Slashing: When a validator is slashed for any reason, the slashed amount is sent to the Treasury\nwith a reward going to the entity that reported the validator (another validator). The reward is\ntaken from the slash amount and varies per offence and number of reporters."),(0,r.kt)("li",{parentName:"ol"},"Transaction fees: A portion of each block's transaction fees goes to the Treasury, with the\nremainder going to the block author."),(0,r.kt)("li",{parentName:"ol"},"Staking inefficiency: ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-staking#inflation"},"Inflation")," is designed to be 10% in the\nfirst year, and the ideal staking ratio is set at 50%, meaning half of all tokens should be\nlocked in staking. Any deviation from this ratio will cause a proportional amount of the\ninflation to go to the Treasury. In other words, if 50% of all tokens are staked, then 100% of\nthe inflation goes to the validators as reward. If the staking rate is greater than or less than\n50%, then the validators will receive less, with the remainder going to the Treasury."),(0,r.kt)("li",{parentName:"ol"},"Parathreads: ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-parathreads"},"Parathreads")," participate in a per-block auction for block\ninclusion. Part of this bid goes to the validator that accepts the block and the remainder goes\nto the Treasury.")),(0,r.kt)("h2",{id:"tipping"},"Tipping"),(0,r.kt)("p",null,"Next to the proposals process, a separate system for making tips exists for the Treasury. Tips can\nbe suggested by anyone and are supported by members of the Council. Tips do not have any definite\nvalue, and the final value of the tip is decided based on the median of all tips issued by the\ntippers."),(0,r.kt)("p",null,"Currently, the tippers are the same as the members of the Council. However, being a tipper is not\nthe direct responsibility of the Council, and at some point the Council and the tippers may be\ndifferent groups of accounts."),(0,r.kt)("p",null,"A tip will enter a closing phase when more than a half plus one of the tipping group have endorsed a\ntip. During that time frame, the other members of the tipping group can still issue their tips, but\ndo not have to. Once the window closes, anyone can call the ",(0,r.kt)("inlineCode",{parentName:"p"},"close_tip")," extrinsic, and the tip will\nbe paid out."),(0,r.kt)("p",null,"There are two types of tips:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"public: A small bond is required to place them. This bond depends on the tip message length, and a\nfixed bond constant defined on chain, currently 1 DOT.\nPublic tips carry a finder's fee of\n20%, which is paid out from the total amount."),(0,r.kt)("li",{parentName:"ul"},"tipper-initiated: Tips that a Council member published, do not have a finder's fee or a bond.")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"For information about how to submit a tip from the Treasury you can read\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181971"},"this support article"),".")),(0,r.kt)("p",null,"To better understand the process a tip goes through until it is paid out, let's consider the example\nbelow."),(0,r.kt)("h3",{id:"example"},"Example"),(0,r.kt)("p",null,"Bob has done something great for Polkadot.\nAlice has noticed this and decides to report Bob as deserving a tip from the Treasury. The Council\nis composed of three members Charlie, Dave, and Eve."),(0,r.kt)("p",null,"Alice begins the process by issuing the ",(0,r.kt)("inlineCode",{parentName:"p"},"report_awesome")," extrinsic. This extrinsic requires two\narguments, a reason and the beneficiary. Alice submits Bob's address with the reason being a UTF-8\nencoded URL to a post on ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io"},"Polkassembly"),"\n"," that explains her reasoning for\nwhy Bob deserves the tip."),(0,r.kt)("p",null,"As mentioned above, Alice must also lock up a deposit for making this report. The deposit is the\nbase deposit as set in the chain's parameter list, plus the additional deposit per byte contained in\nthe reason. This is why Alice submitted a URL as the reason instead of the explanation directly: it\nwas cheaper for her to do so. For her trouble, Alice is able to claim the eventual finder's fee if\nthe tip is approved by the tippers."),(0,r.kt)("p",null,"Since the tipper group is the same as the Council, the Council must now collectively (but also\nindependently) decide on the value of the tip that Bob deserves. Charlie, Dave, and Eve all review\nthe report and make tips according to their personal valuation of the benefit Bob has provided to\nPolkadot. Charlie tips\n10 DOT, Dave tips\n30 DOT, and Eve tips\n100 DOT."),(0,r.kt)("p",null,"The tip could have been closed out with only two of the three tippers. Once more than half of the\ntippers group have issued tip valuations, the countdown to close the tip will begin. In this case,\nthe third tipper issued their tip before the end of the closing period, so all three were able to\nmake their tip valuations known."),(0,r.kt)("p",null,"The actual tip that will be paid out to Bob is the median of these tips, so Bob will be paid out\n30 DOT from the Treasury. In order for Bob to\nbe paid his tip, some account must call the ",(0,r.kt)("inlineCode",{parentName:"p"},"close_tip")," extrinsic at the end of the closing period\nfor the tip. This extrinsic may be called by anyone."),(0,r.kt)("h2",{id:"bounties-spending"},"Bounties Spending"),(0,r.kt)("p",null,"There are practical limits to Council Members curation capabilities when it comes to treasury\nproposals: Council members likely do not have the expertise to make a proper assessment of the\nactivities described in all proposals. Even if individual Councillors have that expertise, it is\nhighly unlikely that a majority of members are capable in such diverse topics."),(0,r.kt)("p",null,"Bounties Spending proposals aim to delegate the curation activity of spending proposals to experts\ncalled Curators: They can be defined as addresses with agency over a portion of the Treasury with\nthe goal of fixing a bug or vulnerability, developing a strategy, or monitoring a set of tasks\nrelated to a specific topic: all for the benefit of the\nPolkadot ecosystem."),(0,r.kt)("p",null,"A proposer can submit a bounty proposal for the Council to pass, with a curator to be defined later,\nwhose background and expertise is such that they are capable of determining when the task is\ncomplete. Curators are selected by the Council after the bounty proposal passes, and need to add an\nupfront payment to take the position. This deposit can be used to punish them if they act\nmaliciously. However, if they are successful in their task of getting someone to complete the bounty\nwork, they will receive their deposit back and part of the bounty reward."),(0,r.kt)("p",null,"When submitting the value of the bounty, the proposer includes a reward for curators willing to\ninvest their time and expertise in the task: this amount is included in the total value of the\nbounty. In this sense, the curator's fee can be defined as the result of subtracting the value paid\nto the bounty rewardee from the total value of the bounty."),(0,r.kt)("p",null,"In general terms, curators are expected to have a well-balanced track record related to the issues\nthe bounty tries to resolve: they should be at least knowledgeable on the topics the bounty touches,\nand show project management skills or experience. These recommendations ensure an effective use of\nthe mechanism. A Bounty Spending is a reward for a specified body of work - or specified set of\nobjectives - that needs to be executed for a predefined treasury amount to be paid out. The\nresponsibility of assigning a payout address once the specified set of objectives is completed is\ndelegated to the curator."),(0,r.kt)("p",null,"After the Council has activated a bounty, it delegates the work that requires expertise to the\ncurator who gets to close the active bounty. Closing the active bounty enacts a delayed payout to\nthe payout address and a payout of the curator fee. The delay phase allows the Council to act if any\nissues arise."),(0,r.kt)("p",null,"To minimize storage on chain in the same way as any proposal, bounties don't contain contextual\ninformation. When a user submits a bounty spending proposal, they will probably need to find an\noff-chain way to explain the proposal (any of the available community forums serve this purpose).\n",(0,r.kt)("a",{parentName:"p",href:"https://docs.google.com/document/d/1-IBz_owspV5OcvezWXpksWDQReWowschD0TFuaVKKcU/edit?usp=sharing"},"This template"),"\ncan help as a checklist of all needed information for the Council to make an informed decision."),(0,r.kt)("p",null,"The bounty has a predetermined duration of 90 days with the possibility of being extended by the\ncurator. Aiming to maintain flexibility on the tasks\u2019 curation, the curator will be able to create\nsub-bounties for more granularity and allocation in the next iteration of the mechanism."),(0,r.kt)("h3",{id:"creating-a-bounty-proposal"},"Creating a Bounty Proposal"),(0,r.kt)("p",null,"Anyone can create a Bounty proposal using Polkadot-JS Apps: Users are able to submit a proposal on\nthe dedicated Bounty section under Governance. The development of a robust user interface to view\nand manage bounties in the Polkadot Apps is still under development and it will serve Council\nmembers, Curators and Beneficiaries of the bounties, as well as all users observing the on-chain\ntreasury governance. For now, the help of a Councillor is needed to open a bounty proposal as a\nmotion to be voted."),(0,r.kt)("p",null,"To submit a bounty, please visit ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps"},"Polkadot-JS Apps")," and click on the\ngovernance tab in the options bar on the top of the site. After, click on 'Bounties' and find the\nbutton '+ Add Bounty' on the upper-right side of the interface. Complete the bounty title, the\nrequested allocation (including curator's fee) and confirm the call."),(0,r.kt)("p",null,"After this, a Council member will need to assist you to pass the bounty proposal for vote as a\nmotion. You can contact the Council by joining the\nPolkadot Direction ",(0,r.kt)("a",{parentName:"p",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"channel"),"\n"," in\nElement or joining our\nPolkadot Discord ",(0,r.kt)("a",{parentName:"p",href:"https://parity.link/polkadot-discord"},"server"),"\n"," and publishing a\nshort description of your bounty, with a link to one of the ",(0,r.kt)("a",{parentName:"p",href:"#announcing-the-proposal"},"forums")," for\ncontextual information."),(0,r.kt)("p",null,"A bounty can be cancelled by deleting the earmark for a specific treasury amount or be closed if the\ntasks have been completed. On the opposite side, the 90 days life of a bounty can be extended by\namending the expiry block number of the bounty to stay active."),(0,r.kt)("h3",{id:"closing-a-bounty"},"Closing a bounty"),(0,r.kt)("p",null,"The curator can close the bounty once they approve the completion of its tasks. The curator should\nmake sure to set up the payout address on the active bounty beforehand. Closing the Active bounty\nenacts a delayed payout to the payout address and a payout of the curator fee."),(0,r.kt)("p",null,"A bounty can be closed by using the extrinsics tab and selecting the Treasury pallet, then\n",(0,r.kt)("inlineCode",{parentName:"p"},"Award_bounty"),", making sure the right bounty is to be closed and finally sign the transaction. It is\nimportant to note that those who received a reward after the bounty is completed, must claim the\nspecific amount of the payout from the payout address, by calling ",(0,r.kt)("inlineCode",{parentName:"p"},"Claim_bounty")," after the curator\nclosed the allocation."),(0,r.kt)("p",null,"To understand more about Bounties and how this new mechanism works, read this\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.network/kusama-and-polkadot-now-reward-curators-helping-to-scale-councils-functions-join-the-force-moving-the-community-forward/"},"Polkadot Blog post"),"."),(0,r.kt)("h2",{id:"faq"},"FAQ"),(0,r.kt)("h3",{id:"what-prevents-the-treasury-from-being-captured-by-a-majority-of-the-council"},"What prevents the Treasury from being captured by a majority of the Council?"),(0,r.kt)("p",null,"The majority of the Council can decide the outcome of a treasury spend proposal. In an adversarial\nmindset, we may consider the possibility that the Council may at some point go rogue and attempt to\nsteal all of the treasury funds. It is a possibility that the treasury pot becomes so great, that a\nlarge financial incentive would present itself."),(0,r.kt)("p",null,"For one, the Treasury has deflationary pressure due to the burn that is suffered every spend period.\nThe burn aims to incentivize the complete spend of all treasury funds at every burn period, so\nideally the treasury pot doesn't have time to accumulate mass amounts of wealth. However, it is the\ncase that the burn on the Treasury could be so little that it does not matter - as is the case\ncurrently on Kusama with a 0.2% burn."),(0,r.kt)("p",null,"However, it is the case on Kusama that the Council is composed of mainly well-known members of the\ncommunity. Remember, the Council is voted in by the token holders, so they must do some campaigning\nor otherwise be recognized to earn votes. In the scenario of an attack, the Council members would\nlose their social credibility. Furthermore, members of the Council are usually externally motivated\nby the proper operation of the chain. This external motivation is either because they run businesses\nthat depend on the chain, or they have direct financial gain (through their holdings) of the token\nvalue remaining steady."),(0,r.kt)("p",null,"Concretely, there are a couple on-chain methods that resist this kind of attack. One, the Council\nmajority may not be the token majority of the chain. This means that the token majority could vote\nto replace the Council if they attempted this attack - or even reverse the treasury spend. They\nwould do this through a normal referendum. Two, there are time delays to treasury spends. They are\nonly enacted every spend period. This means that there will be some time to observe this attack is\ntaking place. The time delay then allows chain participants time to respond. The response may take\nthe form of governance measures or - in the most extreme cases a liquidation of their holdings and a\nmigration to a minority fork. However, the possibility of this scenario is quite low."),(0,r.kt)("h2",{id:"further-reading"},"Further Reading"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/blob/master/frame/treasury/src/lib.rs"},"Substrate's Treasury Pallet"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/pallet_treasury/index.html"},"Documentation of the Rust implementation of the Treasury")))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/078895e8.7fe051c9.js b/assets/js/078895e8.42600545.js similarity index 53% rename from assets/js/078895e8.7fe051c9.js rename to assets/js/078895e8.42600545.js index 0313e51245f8..d91f59a833c8 100644 --- a/assets/js/078895e8.7fe051c9.js +++ b/assets/js/078895e8.42600545.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[740],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>g});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),i=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},d=function(e){var t=i(e.components);return r.createElement(c.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},h=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=i(n),h=o,g=u["".concat(c,".").concat(h)]||u[h]||p[h]||a;return n?r.createElement(g,s(s({ref:t},d),{},{components:n})):r.createElement(g,s({ref:t},d))}));function g(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,s=new Array(a);s[0]=h;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[u]="string"==typeof e?e:o,s[1]=l;for(var i=2;i{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>g,frontMatter:()=>l,metadata:()=>i,toc:()=>u});var r=n(87462),o=n(63366),a=(n(67294),n(3905)),s=["components"],l={id:"learn-controller",title:"Controller Accounts",sidebar_label:"Controller Accounts",description:"Controller Accounts used in Staking.",keywords:["nominated proof of stake","staking","controller"],slug:"../learn-controller"},c=void 0,i={unversionedId:"learn/archive/learn-controller",id:"learn/archive/learn-controller",title:"Controller Accounts",description:"Controller Accounts used in Staking.",source:"@site/../docs/learn/archive/learn-controller.md",sourceDirName:"learn/archive",slug:"/learn/learn-controller",permalink:"/docs/learn/learn-controller",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/archive/learn-controller.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710167319,formattedLastUpdatedAt:"Mar 11, 2024",frontMatter:{id:"learn-controller",title:"Controller Accounts",sidebar_label:"Controller Accounts",description:"Controller Accounts used in Staking.",keywords:["nominated proof of stake","staking","controller"],slug:"../learn-controller"},sidebar:"docs",previous:{title:"Redenomination of DOT",permalink:"/docs/learn/learn-redenomination"},next:{title:"Polkadot Developer Portal",permalink:"/docs/build-guide"}},d={},u=[{value:"Stash as Controller",id:"stash-as-controller",level:2},{value:"Stash not as Controller",id:"stash-not-as-controller",level:2}],p={toc:u},h="wrapper";function g(e){var t=e.components,l=(0,o.Z)(e,s);return(0,a.kt)(h,(0,r.Z)({},p,l,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("div",{className:"sticky"},(0,a.kt)("br",null),(0,a.kt)("p",null,"The content on this page is archived. Controller accounts are deprecated. For more information, see\n",(0,a.kt)("a",{parentName:"p",href:"https://forum.polkadot.network/t/staking-controller-deprecation-plan-staking-ui-leads-comms/2748"},"this discussion"),".")),(0,a.kt)("p",null,'Controller accounts were used for staking and were a "less-powerful" version of staking proxies.\nControllers could only sign for unbonding and rebonding funds, nominating and changing the reward\ndestination. The stash account was still used to bond more funds and change the controller.\nController accounts became redundant and added unnecessary complexity to the staking mechanics.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"controller-accounts",src:n(2203).Z,width:"1920",height:"800"})),(0,a.kt)("p",null,"With the setup shown above, the stash account was not entirely isolated. More complicated designs to\nfully isolate the stash account included having both controller and staking proxies (see below)."),(0,a.kt)("h2",{id:"stash-as-controller"},"Stash as Controller"),(0,a.kt)("p",null,"It was unnecessary to have a controller if you had a staking proxy. In this case the stash was also\nset to be the controller, and the account security would not have been compromised. The staking\nproxy was used to sign all staking-relate transactions. Note that you needed to sign with the stash\nto change the staking proxy."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"stash-as-controller",src:n(55602).Z,width:"1920",height:"800"})),(0,a.kt)("p",null,'This past situation was similar to the present setup, except that now there is no option to set the\nstash as controller and that the action of "changing the controller" is missing. From a practical\nperspective, we need to use only one account and remember one password to sign for all\nstaking-related transactions. From a security perspective, who controls the staking proxy controls\nour staking actions.'),(0,a.kt)("h2",{id:"stash-not-as-controller"},"Stash not as Controller"),(0,a.kt)("p",null,"If the stash and controller were different accounts, the staking proxy was used to bond more funds\nand change the controller. Thus the staking proxy was used to sign for those transactions that were\nused less often and usually signed by the stash."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"stash-not-as-controller",src:n(62776).Z,width:"1920",height:"800"})),(0,a.kt)("p",null,"From a practical perspective, there were two accounts, and we needed to remember two passwords. From\na security perspective, the party who wanted to control our staking actions was required to control\ntwo accounts."))}g.isMDXComponent=!0},55602:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/stash-as-controller-b9840d38c845fce713390da24c60e4a4.png"},2203:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/stash-controller-978875461a51b1f2689c22bdadfde1e4.png"},62776:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/stash-not-as-controller-8a6c27ea620379446da133a42f860029.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[740],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>g});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),i=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},d=function(e){var t=i(e.components);return r.createElement(c.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},h=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=i(n),h=o,g=u["".concat(c,".").concat(h)]||u[h]||p[h]||a;return n?r.createElement(g,s(s({ref:t},d),{},{components:n})):r.createElement(g,s({ref:t},d))}));function g(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,s=new Array(a);s[0]=h;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[u]="string"==typeof e?e:o,s[1]=l;for(var i=2;i{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>g,frontMatter:()=>l,metadata:()=>i,toc:()=>u});var r=n(87462),o=n(63366),a=(n(67294),n(3905)),s=["components"],l={id:"learn-controller",title:"Controller Accounts",sidebar_label:"Controller Accounts",description:"Controller Accounts used in Staking.",keywords:["nominated proof of stake","staking","controller"],slug:"../learn-controller"},c=void 0,i={unversionedId:"learn/archive/learn-controller",id:"learn/archive/learn-controller",title:"Controller Accounts",description:"Controller Accounts used in Staking.",source:"@site/../docs/learn/archive/learn-controller.md",sourceDirName:"learn/archive",slug:"/learn/learn-controller",permalink:"/docs/learn/learn-controller",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/archive/learn-controller.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-controller",title:"Controller Accounts",sidebar_label:"Controller Accounts",description:"Controller Accounts used in Staking.",keywords:["nominated proof of stake","staking","controller"],slug:"../learn-controller"},sidebar:"docs",previous:{title:"Redenomination of DOT",permalink:"/docs/learn/learn-redenomination"},next:{title:"Polkadot Developer Portal",permalink:"/docs/build-guide"}},d={},u=[{value:"Stash as Controller",id:"stash-as-controller",level:2},{value:"Stash not as Controller",id:"stash-not-as-controller",level:2}],p={toc:u},h="wrapper";function g(e){var t=e.components,l=(0,o.Z)(e,s);return(0,a.kt)(h,(0,r.Z)({},p,l,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("div",{className:"sticky",style:{zIndex:1}},(0,a.kt)("br",null),(0,a.kt)("p",null,"The content on this page is archived. Controller accounts are deprecated. For more information, see\n",(0,a.kt)("a",{parentName:"p",href:"https://forum.polkadot.network/t/staking-controller-deprecation-plan-staking-ui-leads-comms/2748"},"this discussion"),".")),(0,a.kt)("p",null,'Controller accounts were used for staking and were a "less-powerful" version of staking proxies.\nControllers could only sign for unbonding and rebonding funds, nominating and changing the reward\ndestination. The stash account was still used to bond more funds and change the controller.\nController accounts became redundant and added unnecessary complexity to the staking mechanics.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"controller-accounts",src:n(2203).Z,width:"1920",height:"800"})),(0,a.kt)("p",null,"With the setup shown above, the stash account was not entirely isolated. More complicated designs to\nfully isolate the stash account included having both controller and staking proxies (see below)."),(0,a.kt)("h2",{id:"stash-as-controller"},"Stash as Controller"),(0,a.kt)("p",null,"It was unnecessary to have a controller if you had a staking proxy. In this case the stash was also\nset to be the controller, and the account security would not have been compromised. The staking\nproxy was used to sign all staking-relate transactions. Note that you needed to sign with the stash\nto change the staking proxy."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"stash-as-controller",src:n(55602).Z,width:"1920",height:"800"})),(0,a.kt)("p",null,'This past situation was similar to the present setup, except that now there is no option to set the\nstash as controller and that the action of "changing the controller" is missing. From a practical\nperspective, we need to use only one account and remember one password to sign for all\nstaking-related transactions. From a security perspective, who controls the staking proxy controls\nour staking actions.'),(0,a.kt)("h2",{id:"stash-not-as-controller"},"Stash not as Controller"),(0,a.kt)("p",null,"If the stash and controller were different accounts, the staking proxy was used to bond more funds\nand change the controller. Thus the staking proxy was used to sign for those transactions that were\nused less often and usually signed by the stash."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"stash-not-as-controller",src:n(62776).Z,width:"1920",height:"800"})),(0,a.kt)("p",null,"From a practical perspective, there were two accounts, and we needed to remember two passwords. From\na security perspective, the party who wanted to control our staking actions was required to control\ntwo accounts."))}g.isMDXComponent=!0},55602:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/stash-as-controller-b9840d38c845fce713390da24c60e4a4.png"},2203:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/stash-controller-978875461a51b1f2689c22bdadfde1e4.png"},62776:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/stash-not-as-controller-8a6c27ea620379446da133a42f860029.png"}}]); \ No newline at end of file diff --git a/assets/js/113faa87.29317d51.js b/assets/js/113faa87.29317d51.js new file mode 100644 index 000000000000..5e65d04ece25 --- /dev/null +++ b/assets/js/113faa87.29317d51.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7738],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,s=e.originalType,l=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),u=c(r),m=a,f=u["".concat(l,".").concat(m)]||u[m]||p[m]||s;return r?n.createElement(f,i(i({ref:t},d),{},{components:r})):n.createElement(f,i({ref:t},d))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=r.length,i=new Array(s);i[0]=m;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o[u]="string"==typeof e?e:a,i[1]=o;for(var c=2;c{r.d(t,{Z:()=>y});var n=r(67294),a=r(86010),s=r(53438),i=r(39960),o=r(13919),l=r(95999);const c={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function d(e){var t=e.href,r=e.children;return n.createElement(i.Z,{href:t,className:(0,a.Z)("card padding--lg",c.cardContainer)},r)}function u(e){var t=e.href,r=e.icon,s=e.title,i=e.description;return n.createElement(d,{href:t},n.createElement("h2",{className:(0,a.Z)("text--truncate",c.cardTitle),title:s},r," ",s),i&&n.createElement("p",{className:(0,a.Z)("text--truncate",c.cardDescription),title:i},i))}function p(e){var t,r=e.item,a=(0,s.Wl)(r);return a?n.createElement(u,{href:a,icon:"\ud83d\uddc3\ufe0f",title:r.label,description:null!=(t=r.description)?t:(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:r.items.length})}):null}function m(e){var t,r,a=e.item,i=(0,o.Z)(a.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,s.xz)(null!=(t=a.docId)?t:void 0);return n.createElement(u,{href:a.href,icon:i,title:a.label,description:null!=(r=a.description)?r:null==l?void 0:l.description})}function f(e){var t=e.item;switch(t.type){case"link":return n.createElement(m,{item:t});case"category":return n.createElement(p,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}function b(e){var t=e.className,r=(0,s.jA)();return n.createElement(y,{items:r.items,className:t})}function y(e){var t=e.items,r=e.className;if(!t)return n.createElement(b,e);var i=(0,s.MN)(t);return n.createElement("section",{className:(0,a.Z)("row",r)},i.map((function(e,t){return n.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},n.createElement(f,{item:e}))})))}},30998:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>c,default:()=>b,frontMatter:()=>l,metadata:()=>d,toc:()=>p});var n=r(87462),a=r(63366),s=(r(67294),r(3905)),i=r(52991),o=["components"],l={id:"learn-guides-assets",title:"Polkadot-JS Guides about Asset Hub",sidebar_label:"Asset Hub Guides",description:"Polkadot-JS Guides about Asset Hub.",keywords:["asset hub","assets","statemine","statemint","polkadot-js"],slug:"../learn-guides-assets"},c=void 0,d={unversionedId:"learn/learn-guides-assets",id:"learn/learn-guides-assets",title:"Polkadot-JS Guides about Asset Hub",description:"Polkadot-JS Guides about Asset Hub.",source:"@site/../docs/learn/learn-guides-assets.md",sourceDirName:"learn",slug:"/learn-guides-assets",permalink:"/docs/learn-guides-assets",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-assets.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-assets",title:"Polkadot-JS Guides about Asset Hub",sidebar_label:"Asset Hub Guides",description:"Polkadot-JS Guides about Asset Hub.",keywords:["asset hub","assets","statemine","statemint","polkadot-js"],slug:"../learn-guides-assets"},sidebar:"docs",previous:{title:"Polkadot Vault Guides",permalink:"/docs/learn-guides-vault"},next:{title:"Create Asset Guides",permalink:"/docs/learn-guides-assets-create"}},u={},p=[],m={toc:p},f="wrapper";function b(e){var t=e.components,r=(0,a.Z)(e,o);return(0,s.kt)(f,(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("div",{className:"sticky",style:{zIndex:1}},(0,s.kt)("br",null),(0,s.kt)("p",null,(0,s.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,s.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,s.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,s.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,s.kt)(i.Z,{mdxType:"DocCardList"}))}b.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1646726c.e915ce73.js b/assets/js/1646726c.182f7992.js similarity index 99% rename from assets/js/1646726c.e915ce73.js rename to assets/js/1646726c.182f7992.js index e61ffb159400..dfd949c06d26 100644 --- a/assets/js/1646726c.e915ce73.js +++ b/assets/js/1646726c.182f7992.js @@ -1 +1 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[2169],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>p});var n=a(74165),o=a(15861),i=a(67294),r=a(87152),s=a(14741),l=a(67425);function d(e,t,a){return h.apply(this,arguments)}function h(){return(h=(0,o.Z)((0,n.Z)().mark((function e(t,a,o){var i,l,d,h,c;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:i=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return i="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return i="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return i="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return i="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==i){e.next=18;break}return e.abrupt("return");case 18:return d=new r.U(i),e.next=21,s.G.create({provider:d});case 21:h=e.sent,(c=a.split(".")).forEach((function(e){e in h&&(h=h[e])})),e.t1=c[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=h.toString(),e.abrupt("break",35);case 29:return e.next=31,h();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+c[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function c(e,t,a,n){switch(t){case"humanReadable":(0,l.HumanReadable)(e,a,n);break;case"precise":(0,l.Precise)(e,a,n);break;case"blocksToDays":(0,l.BlocksToDays)(e,n);break;case"erasToDays":(0,l.ErasToDays)(e,n,a);break;case"percentage":(0,l.Percentage)(e,n);break;case"permillToPercent":(0,l.PermillToPercent)(e,n);break;case"arrayLength":(0,l.ArrayLength)(e,n);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(e){var t=e.network,a=e.path,r=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,h=(0,i.useState)(""),p=h[0],u=h[1];return t=t.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?c(r.toString(),l,t,u):u(r.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var i=function(){var e=(0,o.Z)((0,n.Z)().mark((function e(){var o;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,d(t,a,u);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?c(o,l,t,u):u(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{i()}catch(s){console.log(s)}}}),[]),p}},67425:e=>{var t="polkadot",a="kusama",n="statemine",o="statemint",i={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,r,s){var l=void 0;if(r===t||r===o)l=3;else{if(r!==a&&r!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),s((e=Number.isInteger(e/i[r].precision)?e/i[r].precision+" "+i[r].symbol:(e/i[r].precision).toFixed(l)+" "+i[r].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/i[t].precision+" "+i[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,i,r){var s=void 0;if(r===t||r===o)s=1;else{if(r!==a&&r!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}i((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},78381:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>m,frontMatter:()=>l,metadata:()=>h,toc:()=>p});var n=a(87462),o=a(63366),i=(a(67294),a(3905)),r=a(47940),s=["components"],l={id:"learn-staking",title:"Introduction to Staking",sidebar_label:"Introduction to Staking",description:"Overview of Staking and NPoS on Polkadot.",keywords:["staking","stake","nominate","nominating","NPoS","faq"],slug:"../learn-staking"},d=void 0,h={unversionedId:"learn/learn-staking",id:"learn/learn-staking",title:"Introduction to Staking",description:"Overview of Staking and NPoS on Polkadot.",source:"@site/../docs/learn/learn-staking.md",sourceDirName:"learn",slug:"/learn-staking",permalink:"/docs/learn-staking",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-staking.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710424605,formattedLastUpdatedAt:"Mar 14, 2024",frontMatter:{id:"learn-staking",title:"Introduction to Staking",sidebar_label:"Introduction to Staking",description:"Overview of Staking and NPoS on Polkadot.",keywords:["staking","stake","nominate","nominating","NPoS","faq"],slug:"../learn-staking"},sidebar:"docs",previous:{title:"Staking",permalink:"/docs/learn-staking-index"},next:{title:"Nomination Pools",permalink:"/docs/learn-nomination-pools"}},c={},p=[{value:"Proof-of-Stake (PoS)",id:"proof-of-stake-pos",level:2},{value:"Nominated Proof-of-Stake (NPoS)",id:"nominated-proof-of-stake-npos",level:2},{value:"Nominating Validators",id:"nominating-validators",level:3},{value:"Eras and Sessions",id:"eras-and-sessions",level:3},{value:"Staking Rewards",id:"staking-rewards",level:3},{value:"Skin in the game when Staking",id:"skin-in-the-game-when-staking",level:3},{value:"Being a Nominator",id:"being-a-nominator",level:2},{value:"Tasks and Responsibilities of a Nominator",id:"tasks-and-responsibilities-of-a-nominator",level:3},{value:"Selection of Validators",id:"selection-of-validators",level:3},{value:"Validator Selection Criteria",id:"validator-selection-criteria",level:4},{value:"Network Providers",id:"network-providers",level:4},{value:"Keeping Track of Nominated Validators",id:"keeping-track-of-nominated-validators",level:4},{value:"Stash Account and Staking Proxy",id:"stash-account-and-staking-proxy",level:3},{value:"Claiming Staking Rewards",id:"claiming-staking-rewards",level:3},{value:"Slashing",id:"slashing",level:3},{value:"Chilling",id:"chilling",level:3},{value:"Fast Unstake",id:"fast-unstake",level:3},{value:"Why and Why not to Stake?",id:"why-and-why-not-to-stake",level:2},{value:"Pros of Staking",id:"pros-of-staking",level:3},{value:"Cons of Staking",id:"cons-of-staking",level:3},{value:"Unbonding Period Length",id:"unbonding-period-length",level:4},{value:"How many Validators?",id:"how-many-validators",level:2},{value:"Why am I not receiving rewards?",id:"why-am-i-not-receiving-rewards",level:2},{value:"Staking FAQ",id:"staking-faq",level:2},{value:"Resources",id:"resources",level:2}],u={toc:p},k="wrapper";function m(e){var t=e.components,l=(0,o.Z)(e,s);return(0,i.kt)(k,(0,n.Z)({},u,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{title:"New to Staking?",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"Explore Polkadot with a secure and user-friendly wallets listed on the\n",(0,i.kt)("a",{parentName:"p",href:"https://www.polkadot.network/ecosystem/wallets/"},"Polkadot website")," and start your staking journey\nor explore more information about staking on\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/staking/"},"Polkadot's Staking Page"),". Discover the new\n",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},"Staking Dashboard")," that makes staking much easier and\ncheck this\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182104"},"extensive article list")," to\nhelp you get started. The dashboard supports ",(0,i.kt)("a",{parentName:"p",href:"/docs/ledger"},"Ledger")," devices natively and\ndoes not require an extension or wallet as an interface.")),(0,i.kt)("admonition",{title:"Stake through Nomination Pools",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The minimum amount required to become an active nominator and earn rewards may change from era to\nera.\nIt is currently ",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minimumActiveStake",defaultValue:502e10,filter:"humanReadable",mdxType:"RPC"})),".\n","\nIf you have less DOT than the minimum active\nnomination and still want to participate in staking, you can join the nomination pools. You can now\nstake on Polkadot natively with just\n",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.minJoinBond",filter:"humanReadable",defaultValue:1e10,mdxType:"RPC"})),"\n","\nin the nomination pools and earn staking rewards. For additional information, check out\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/blog/nomination-pools-are-live-stake-natively-with-just-1-dot/"},"this blog post"),".\nCheck the wiki doc on ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pools")," for more information.")),(0,i.kt)("p",null,"Here you will learn about what staking is, why it is important and how it works on\nPolkadot."),(0,i.kt)("h2",{id:"proof-of-stake-pos"},"Proof-of-Stake (PoS)"),(0,i.kt)("p",null,"Blockchain networks use ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus/#why-do-we-need-consensus"},"consensus")," mechanisms to\nfinalize blocks on the chain. Consensus is the process of agreeing on something, in this case, the\nprogression of the blockchain or how blocks are added to the chain. Consensus consists of two\nactions:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Block production"),", i.e. the way multiple blocks candidates are produced, and"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Block finality"),", i.e. the way only one block out of many candidates is selected and added to\nthe canonical chain (see ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-consensus/#probabilistic-vs-provable-finality"},"this")," article\nfor more information about finality).")),(0,i.kt)("p",null,"Proof-of-Work (PoW) and Proof-of-Stake (PoS) are well-known mechanisms used to reach consensus in a\nsecure and trustless way on public blockchains, where there are many participants who do not know\neach other (and probably never will). In PoW, network security relies on the fact that the miners\nwho are responsible for adding blocks to the chain must compete to solve difficult mathematic\npuzzles to add blocks - a solution that has been criticized for the wastage of energy. For doing\nthis work, miners are typically rewarded with tokens."),(0,i.kt)("p",null,"In PoS networks like Polkadot the security of\nthe network depends on the amount of capital locked on the chain: the more the capital locked, the\nlower the chance of an attack on the network, as the attacker needs to incur a heavy loss to\norchestrate a successful attack (more on this later on). The process of locking tokens on the chain\nis called ",(0,i.kt)("strong",{parentName:"p"},"staking"),"."),(0,i.kt)("p",null,"Similar to the miners in PoW networks, PoS networks have ",(0,i.kt)("strong",{parentName:"p"},"validators"),", but they do not have to\ncompete with each other to solve mathematical puzzles. They are instead pre-selected to produce the\nblocks based on the stake backing them. Token holders can lock funds on the chain and for doing so,\nthey are getting ",(0,i.kt)("strong",{parentName:"p"},"staking rewards"),". There is thus an economic incentive for token holders to\nbecome active participants who contribute to the economic security and stability of the network. PoS\nnetworks in general are therefore more inclusive than PoW networks, as participants do not need to\nhave either technical knowledge about blockchain technology or experience in running mining\nequipment."),(0,i.kt)("p",null,'PoS ensures that everybody participating in the staking process has "skin in the game" and thus can\nbe held accountable. In case of misbehavior, participants in the staking process can be punished or\n',(0,i.kt)("strong",{parentName:"p"},"slashed"),", and depending on the gravity of the situation, their stake can be partly or fully\nconfiscated by the network. It is not in a staker's economic interest to orchestrate an attack and\nrisk losing tokens. Any rational actor staking on the network would want to get rewarded, and the\nPoS network rewards good behavior and punishes bad behavior."),(0,i.kt)("h2",{id:"nominated-proof-of-stake-npos"},"Nominated Proof-of-Stake (NPoS)"),(0,i.kt)("p",null,"Polkadot implements\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus/#nominated-proof-of-stake"},"Nominated Proof-of-Stake (NPoS)"),", a relatively novel\nand sophisticated mechanism to select the validators who are allowed to participate in its\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus"},"consensus")," protocol. NPoS encourages\nDOT holders to participate as ",(0,i.kt)("strong",{parentName:"p"},"nominators"),"."),(0,i.kt)("p",null,"Any potential validators can indicate their intention to be a validator candidate. Their candidacies\nare made public to all nominators, and a nominator, in turn, submits a list of up to\n16 candidates that it supports, and the network\nwill automatically distribute the stake among validators in an even manner so that the economic\nsecurity is maximized. In the next era, a certain number of validators having the most\nDOT backing get elected and become active. For\nmore information about the election algorithm go to ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"this")," page on the wiki or\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/protocols/NPoS/Paper"},"this")," research article. As a\nnominator, a minimum of\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minNominatorBond",defaultValue:25e11,filter:"humanReadable",mdxType:"RPC"}),"\n","\nis required to submit an intention to nominate, which can be thought of as registering to be a\nnominator. Note that in NPoS the stake of both nominators and validators can be slashed. For an\nin-depth review of NPoS see\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/protocols/NPoS/Overview"},"this")," research article."),(0,i.kt)("admonition",{title:"Minimum Nomination to Receive Staking Rewards",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"Although the minimum nomination intent is\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minNominatorBond",defaultValue:25e11,filter:"humanReadable",mdxType:"RPC"}),",\n","\nit does not guarantee staking rewards. The nominated amount has to be greater than\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nominator#minimum-active-nomination-to-receive-staking-rewards"},"minimum active nomination"),",\nwhich is a dynamic value that can be much higher than\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minNominatorBond",defaultValue:25e11,filter:"humanReadable",mdxType:"RPC"}),".\n","\nThis dynamic value depends on the amount of DOT\nbeing staked, in addition to the selected nominations.")),(0,i.kt)("h3",{id:"nominating-validators"},"Nominating Validators"),(0,i.kt)("p",null,"Nominating on Polkadot requires 2 actions:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Locking tokens on-chain."),(0,i.kt)("li",{parentName:"ul"},"Selecting a set of validators, to whom these locked tokens will automatically be allocated to.")),(0,i.kt)("p",null,"How many tokens you lock up is completely up to you - as are the validators you wish to select. The\naction of locking tokens is also known as ",(0,i.kt)("strong",{parentName:"p"},"bonding"),". You can also refer to your locked tokens as\nyour bonded tokens, or staked tokens. Likewise, selecting validators is also known as backing or\nnominating validators. These terms are used interchangeably by the community. From now on locked\ntokens will be referred to as bonded tokens."),(0,i.kt)("p",null,"Once the previous 2 steps are completed and you are nominating, your bonded tokens could be\nallocated to one or more of your selected validators, and this happens every time the active\nvalidator set changes. This validator set is updated every era on\nPolkadot."),(0,i.kt)("p",null,"Unlike other staking systems, Polkadot\nautomatically chooses which of your selected validators will be backed by your bonded tokens.\nSelecting a group of validators increases your chances of consistently backing at least one who is\nactive. This results in your bonded tokens being allocated to validators more often, which means\nmore network security and more rewards. This is in strong contrast to other staking systems that\nonly allow you to back one validator; if that validator is not active, you as a staker will also not\nbe. Polkadot's nomination model solves this."),(0,i.kt)("p",null,"Polkadot uses tools ranging from election\ntheory to game theory to discrete optimization, to develop an efficient validator selection process\nthat offers fair representation and security, thus avoiding uneven power and influence among\nvalidators. The election algorithms used by\nPolkadot are based on the Proportional\nJustified Representation (PJR) methods like ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"Phragmen"),". For more information\nabout PJR methods visit ",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/protocols/NPoS/Overview"},"this"),"\nresearch article."),(0,i.kt)("h3",{id:"eras-and-sessions"},"Eras and Sessions"),(0,i.kt)("p",null,"The stake from nominators is used to increase the number of tokens held by such candidates,\nincreasing their chance of being selected by the election algorithm for block production during a\nspecific ",(0,i.kt)("strong",{parentName:"p"},"era"),". An era is a period of 24 hours\nduring which an ",(0,i.kt)("strong",{parentName:"p"},"active set")," of validators is producing blocks and performing other actions on the\nchain. This means that not all validators are in the active set and such set changes between eras.\nEach era is divided into 6 epochs or ",(0,i.kt)("strong",{parentName:"p"},"sessions")," during which validators are assigned as block\nproducers to specific time frames or ",(0,i.kt)("strong",{parentName:"p"},"slots"),". This means that validators know the slots when they\nwill be required to produce a block within a specific session, but they do not know all the slots\nwithin a specific era. Having sessions adds a layer of security because it decreases the chance of\nhaving multiple validators assigned to a slot colluding to harm the network."),(0,i.kt)("h3",{id:"staking-rewards"},"Staking Rewards"),(0,i.kt)("p",null,"Validators who produce a block are rewarded with tokens, and they can share rewards with their\nnominators. Both validators and nominators can stake their tokens on chain and receive staking\nrewards at the end of each era. The staking system pays out rewards equally to all validators\nregardless of stake. Thus, having more stake in a validator does not influence the amount of block\nrewards it receives. This avoids the centralization of power to a few validators. There is a\nprobabilistic component in the calculation of rewards, so they may not be exactly equal for all\nvalidators. In fact, during each era validators can earn ",(0,i.kt)("strong",{parentName:"p"},"era points")," by doing different tasks on\nchain. The more the points, the higher the reward for a specific era. This promotes validators'\nactivity on chain. To know more about era points, and how and on which basis they are distributed\nvisit the ",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-validator-payout"},"dedicated page"),". Distribution of the\nrewards is pro-rata to all stakers after the validator's commission is deducted."),(0,i.kt)("h3",{id:"skin-in-the-game-when-staking"},"Skin in the game when Staking"),(0,i.kt)("p",null,"The security of PoS networks depends on the amount of staked tokens. To successfully attack the\nnetwork, a malicious actor would need to accrue a large number of tokens or would need different\nparticipants to collude and act maliciously. If there is an attack in the case of NPoS, both the\nvalidator(s) and nominators will be slashed resulting in their stake being partially or fully\nconfiscated by the network and then deposited to the treasury. There is little interest for a\nrational network participant to act in a harmful way because NPoS ensures that all participants can\nbe held accountable for their bad actions. In NPoS, validators are paid equal rewards regardless of\nthe amount of stake backing them, thus avoiding large payouts to few large validators which might\nlead to centralization."),(0,i.kt)("h2",{id:"being-a-nominator"},"Being a Nominator"),(0,i.kt)("h3",{id:"tasks-and-responsibilities-of-a-nominator"},"Tasks and Responsibilities of a Nominator"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Validators.")," Since validator slots are limited, most of those who wish to stake their\nDOT and contribute to the economic security of\nthe network will be nominators, thus here we focus on the role of nominators. However, it is worth\nmentioning that validators do most of the heavy lifting: they run the validator nodes and manage\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/security/keys/session"},"session keys"),", produce new block\ncandidates in ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus/#block-production-babe"},"BABE"),", vote and come to consensus in\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus/#finality-gadget-grandpa"},"GRANDPA"),", validate the state transition function of\nparachains, and possibly some other responsibilities regarding data availability and\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-xcm"},"XCM"),". For more information, you can take a look at the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-validator"},"validator docs")," to understand what you need to do as a validator. If you want\nto become a validator you can consult\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-validate-polkadot"},"this")," guide."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Nominators.")," Nominators have far fewer responsibilities than validators. These include selecting\nvalidators and monitoring their performance, keeping an eye on changing commission rates (a\nvalidator can change commission at any time), and general health monitoring of their validators'\naccounts. Thus, while not being completely set-it-and-forget-it, a nominator's experience is\nrelatively hands-off compared to that of a validator, and even more with\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pools"),". For more information, you can take a look at the\nnominator ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nominator"},"guide")," to understanding your responsibilities as a nominator."),(0,i.kt)("p",null,"If you want to become a nominator, see ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nominator"},"this")," guide. If you are a\nbeginner and would like to securely stake your tokens using the Polkadot-JS UI, refer to\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000168057-how-do-i-stake-nominate-on-polkadot-"},"this"),"\nsupport article.\n"),(0,i.kt)("admonition",{title:"Polkadot Staking Dashboard",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The ",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/dashboard/#/overview"},"Staking Dashboard")," provides a more\nuser-friendly alternative to staking. See the instructions in\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182133-how-to-use-the-staking-dashboard-staking-your-dot"},"this"),"\nsupport article to learn how to stake with the dashboard.")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Pools."),' Pools are "built" on top of NPoS to provide a very low barrier to entry to staking,\nwithout sacrificing Polkadot\'s strict security model.'),(0,i.kt)("h3",{id:"selection-of-validators"},"Selection of Validators"),(0,i.kt)("p",null,"The task of choosing validators is not simple, as it should take into account nominator reward and\nrisk preferences. Ideally one aims to maximize the reward-to-risk ratio by maximizing rewards and\nminimizing risks, with sometimes having to compromise between the two, as minimizing risks might\ndecrease rewards as well. Nominators should pay attention, especially to six criteria when\nnominating validators (not in order of importance):"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"recent history of the era points earned across eras"),(0,i.kt)("li",{parentName:"ul"},"validator's self stake (shows skin in the game)"),(0,i.kt)("li",{parentName:"ul"},"total stake backing the validator (which is the sum of self stake and the stake coming from\nnominators)"),(0,i.kt)("li",{parentName:"ul"},"commission fees (i.e. how much validators charge nominators)"),(0,i.kt)("li",{parentName:"ul"},"verified identity"),(0,i.kt)("li",{parentName:"ul"},"previous slashes")),(0,i.kt)("p",null,"The diagram below shows how the selection of those criteria affects the reward-to-risk ratio."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"rewards and risks diagram",src:a(89303).Z,width:"1920",height:"800"})),(0,i.kt)("h4",{id:"validator-selection-criteria"},"Validator Selection Criteria"),(0,i.kt)("p",null,"To maximize rewards and minimize risk, one could select those validators that:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"have era points above average (because they will get more rewards for being active),"),(0,i.kt)("li",{parentName:"ul"},"have the total stake backing the validator below the average active validator stake (because they\nwill pay out more rewards per staked DOT),"),(0,i.kt)("li",{parentName:"ul"},"have high own stake (because if slashed they have something to lose),"),(0,i.kt)("li",{parentName:"ul"},"have low commission fees but not 0% (because it makes sense that for doing the heavy lifting,\nvalidators ask for a small commission),"),(0,i.kt)("li",{parentName:"ul"},"have on-chain registered identity (because it adds a layer of trust and possibly provides access\nto their website and contact details),"),(0,i.kt)("li",{parentName:"ul"},"and have not been slashed (meaning that their on-chain behavior is genuine).")),(0,i.kt)("h4",{id:"network-providers"},"Network Providers"),(0,i.kt)("p",null,"For successful operation, a Validator node should always be ensured to meet the required\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-validate-polkadot#reference-hardware"},"software, hardware, and network bandwidth specifications"),".\nUnderstandably, most of the validator nodes run on cloud service providers that guarantee high\nhardware specifications and high levels of availability and connectivity. Keep in mind that a\nvalidator in the active set is supposed to be fully online and available for producing blocks. If\nthe active validator node goes offline due to network interruptions or a power outage, that\nvalidator might be subject to\n",(0,i.kt)("a",{parentName:"p",href:"./learn-staking-advanced#unresponsiveness"},"slashing due to unresponsiveness"),". As\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus#block-production-babe"},"Polkadot's block production mechanism")," is reasonably\nresilient to a small proportion of validators going offline, no slashing is imposed until 10% of the\nvalidators in the active set go offline. Hence, if multiple nodes are running on a single cloud\nservice provider and go offline simultaneously due to an outage or due to a change in their terms\nand conditions policy regarding the support of Proof-of-Stake (PoS) operations, the offline\nvalidators and all the nominators backing them can be slashed up 7% of their stake on Polkadot.\nHence, it is recommended that you check if you are nominating the validator nodes that are running\non cloud service providers, and if they do, check if they allow for Proof-of-Stake operations."),(0,i.kt)("admonition",{title:"Checking Validators using Network Providers",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"You can connect your stash account to the ",(0,i.kt)("a",{parentName:"p",href:"https://polkawatch.app/"},"Polkawatch app"),". The app will\nshow your rewards earned in the past 60 eras divided by network provider and country. You will be\nable to see networks used by each validator and verify if your validators are using providers who\nsupport PoS. This is also a great tool to explore how decentralized your nominations are and act\naccordingly.")),(0,i.kt)("h4",{id:"keeping-track-of-nominated-validators"},"Keeping Track of Nominated Validators"),(0,i.kt)("admonition",{title:"Nominators must periodically check their validators",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"Nominating is ",(0,i.kt)("em",{parentName:"p"},"not"),' a "set and forget" operation. The whole NPoS system is dynamic and nominators\nshould periodically monitor the performance and reputation of their validators. Failing to do so\ncould result in applied slashes and/or rewards not being paid out, possibly for a prolonged period.')),(0,i.kt)("p",null,"Although the theory can be used as a general guideline, in practice it is more complicated and\nfollowing the theory might not necessarily lead to the desired result. Validators might have the\ntotal stake backing them below average, low commission and above average era points in one era and\nthen have a different profile in the next one. Selection based on the criteria like on-chain\nidentity, slash history and low commission make the staking rewards deterministic. But some criteria\nvary more than others, with era points being the most variable and thus one of the key probabilistic\ncomponents of staking rewards. Part of this probability is directly related to the fact that a\nvalidator can produce blocks for a parachain (i.e. para-validators) or the relay chain, with\npara-validators earning more era points per unit time (see\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-validator-payout#era-points"},"this")," page for more information). The\nrole can switch between sessions, and you can look at\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking"},"the staking tab on the Polkadot-JS UI")," to know which\nvalidator is producing blocks for the relay chain or parachains."),(0,i.kt)("p",null,"It is not recommended to change nominations because of the low era points of a validator in a single\nera. Variability in rewards due to the era points should level out over time. If a validator\nconsistently gets era points below average, it makes sense to nominate a better-performing validator\nfor the health of the network and increased staking rewards. See\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000150130-how-do-i-know-which-validators-to-choose-"},"this"),"\nsupport article to understand in detail how to select the set of validators to nominate."),(0,i.kt)("h3",{id:"stash-account-and-staking-proxy"},"Stash Account and Staking Proxy"),(0,i.kt)("p",null,"Two different accounts can be used to securely manage your funds while staking."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Stash:")," This account holds funds bonded for staking, but delegates all staking functions to a\nstaking proxy account. You may actively participate in staking with a stash private key kept in a\ncold wallet like Ledger, meaning it stays offline all the time. Having a staking proxy will allow\nyou to sign all staking-related transactions with the proxy instead of using your Ledger device.\nThis will allow you:"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"to avoid carrying around your Ledger device just to sign staking-related transactions, and"),(0,i.kt)("li",{parentName:"ul"},"to and to keep the transaction history of your stash clean"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Staking Proxy:")," This account acts on behalf of the stash account, signalling decisions about\nnominating and validating. It can set preferences like commission (for validators) and the staking\nrewards payout account. The earned rewards can be bonded (locked) immediately for bonding on your\nstash account, which would effectively compound the rewards you receive over time. You could also\nchoose to have them deposited to a different account as a free (transferable) balance. If you are\na validator, it can also be used to set your ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-cryptography"},"session keys"),". Staking\nproxies only need sufficient funds to pay for the transaction fees."))),(0,i.kt)("admonition",{type:"warning"},(0,i.kt)("p",{parentName:"admonition"},'Never leave a high balance on a proxy account which are usually "hot" as their private key is stored\non the device (PC, phone) and it is always exposed to the internet for potential hacks and scams. It\nis good practice to deposit rewards on the stash account or to send them to another account on a\ncold wallet.')),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"staking",src:a(4080).Z,width:"1920",height:"800"})),(0,i.kt)("p",null,"This hierarchy of separate keys for stash and staking accounts was designed to add a layer of\nprotection to nominators and validator operators. The more often one exposes and uses a private key,\nthe higher its vulnerability for hacks or scams. So, if one uses a key for multiple roles on a\nblockchain network, it is likely that the account can get compromised. Note that the damage linked\nto stolen private keys is different depending on the type of account derivation. In the case of soft\nderivation, all derived accounts are compromised. More information about account derivation can be\nfound ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-accounts/#derivation-paths"},"here"),"."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"For Ledger users staking directly on Ledger Live, currently, there is no option to use separate\nstash and staking proxy accounts."),(0,i.kt)("p",{parentName:"admonition"},"Ledger devices are now supported in ",(0,i.kt)("a",{parentName:"p",href:"https://www.subwallet.app/download.html"},"SubWallet")," and\n",(0,i.kt)("a",{parentName:"p",href:"https://talisman.xyz/"},"Talisman")," extension. Users can import their Ledger accounts in the extension\nand use them as a stash in staking. You can find more information about SubWallet, Talisman and\nother wallets that officially secured funding from the treasury\n",(0,i.kt)("a",{parentName:"p",href:"/docs/wallets-and-extensions"},"here"),".")),(0,i.kt)("h3",{id:"claiming-staking-rewards"},"Claiming Staking Rewards"),(0,i.kt)("p",null,""),(0,i.kt)("p",null,"Rewards are calculated per era (approximately six hours on Kusama and twenty-four hours on\nPolkadot). These rewards are calculated based on era points, which have a probabilistic component.\nIn other words, there may be slight differences in your rewards from era to era, and even amongst\nvalidators in the active set at the same time. These variations should cancel out over a long enough\ntimeline. See the page on ",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-validator-payout"},"Validator Payout Guide"),"."),(0,i.kt)("p",null,"The distribution of staking rewards to the nominators is not automatic and needs to be triggered by\nsomeone. Typically the validators take care of this, but anyone can permissionlessly trigger rewards\npayout for all the nominators whose stake has backed a specific validator in the active set of that\nera. Staking rewards are kept available for 84 eras. The following calculation can be used to\napproximate this length in days on Polkadot:"),(0,i.kt)("p",null,"",(0,i.kt)("inlineCode",{parentName:"p"},"84 eras")," \xd7 ",(0,i.kt)("inlineCode",{parentName:"p"},"24 hours in a single era")," \xf7 ",(0,i.kt)("inlineCode",{parentName:"p"},"24 hours in a day")," = ",(0,i.kt)("inlineCode",{parentName:"p"},"84 days"),"\n","","","",""),(0,i.kt)("p",null,"For more information on why this is so, see the page on ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced"},"simple payouts"),"."),(0,i.kt)("admonition",{title:"Payouts",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Payouts are unclaimed rewards waiting to be paid out to both validators and nominators. If you go to\nthe Staking payouts page on ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking"},"Polkadot-JS"),", you will see a\nlist of all validators that you have nominated in the past 84 eras and for which you have not yet\nreceived a payout. The payout page is visible only to stakers."),(0,i.kt)("p",{parentName:"admonition"},"Each validator as well as their nominators have the option to trigger the payout for all unclaimed\neras. Note that this will pay everyone who was nominating that validator during those eras.\nTherefore, you may not see anything in this tab, yet still have received a payout if somebody\n(generally, but not necessarily, another nominator or the validator operator) has triggered the\npayout for that validator for that era.")),(0,i.kt)("admonition",{title:"Time limit to claim staking rewards",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"If nobody claims your staking rewards within 84 eras, then you will not be able to claim them and\nthey will be lost. Additionally, if the validator unbonds all their own stake, any pending payouts\nwill also be lost. Since unbonding takes\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"\n","\ndays, nominators should check if they have pending payouts at least this often.")),(0,i.kt)("p",null,"Rewards can be directed to the same account used to sign the payout or to a completely unrelated\naccount. It is also possible to top-up / withdraw some bonded tokens without having to un-stake all\nstaked tokens."),(0,i.kt)("p",null,"If you wish to know if you received a payout, you will have to check via a block explorer. See\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000168954-how-can-i-see-my-staking-rewards-"},"the relevant Support page"),"\nfor details. For specific details about validator payouts, please see\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-validator-payout"},"this guide"),"."),(0,i.kt)("h3",{id:"slashing"},"Slashing"),(0,i.kt)("p",null,"Slashing will happen if a validator misbehaves (e.g. goes offline, attacks the network, or runs\nmodified software) in the network. They and their nominators will get slashed by losing a percentage\nof their bonded/staked DOT."),(0,i.kt)("p",null,"Any slashed DOT will be added to the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn/learn-treasury"},"Treasury"),". The rationale for this\n(rather than burning or distributing them as rewards) is that slashes may then be reverted by the\nCouncil by simply paying out from the Treasury. This would be useful in situations such as faulty\nslashes. In the case of legitimate slashing, it moves tokens away from malicious validators to those\nbuilding the ecosystem through the normal Treasury process."),(0,i.kt)("p",null,"Validators with a larger total stake backing them will get slashed more harshly than less popular\nones, so we encourage nominators to shift their nominations to less popular validators to reduce\ntheir possible losses."),(0,i.kt)("p",null,"It is important to realize that slashing only occurs for active validations for a given nominator,\nand slashes are not mitigated by having other inactive or waiting nominations. They are also not\nmitigated by the validator operator running separate validators; each validator is considered its\nown entity for purposes of slashing, just as they are for staking rewards."),(0,i.kt)("p",null,"In rare instances, a nominator may be actively nominating several validators in a single era. In\nthis case, the slash is proportionate to the amount staked to that specific validator. With very\nlarge bonds, such as parachain liquid staking accounts, a nominator has multiple active nominations\nper era (Acala's LDOT nominator typically has 7-12 active nominations per era). Note that you cannot\ncontrol the percentage of stake you have allocated to each validator or choose who your active\nvalidator will be (except in the trivial case of nominating a single validator). Staking allocations\nare controlled by the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"Phragm\xe9n algorithm"),"."),(0,i.kt)("p",null,'Once a validator gets slashed, it goes into the state as an "unapplied slash". You can check this\nvia\n',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.polkadot.io#/staking/slashes"},"Polkadot-JS UI"),".\nThe UI shows it per validator and then all the affected nominators along with the amounts. While\nunapplied, a governance proposal can be made to reverse it during this period\n(",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"","\ndays). After the grace period, the slashes are applied."),(0,i.kt)("p",null,"The following levels of offense are\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/security/slashing/amounts"},"defined"),". However, these\nparticular levels are not implemented or referred to in the code or in the system; they are meant as\nguidelines for different levels of severity for offenses. To understand how slash amounts are\ncalculated, see the equations in the section below."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Level 1: isolated ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking-advanced/#unresponsiveness"},"unresponsiveness"),", i.e. being\noffline for an entire session. Generally no slashing, only ",(0,i.kt)("a",{parentName:"li",href:"#chilling"},"chilling"),"."),(0,i.kt)("li",{parentName:"ul"},"Level 2: concurrent unresponsiveness or isolated\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking-advanced/#equivocation"},"equivocation"),", slashes a very small amount of the\nstake and chills."),(0,i.kt)("li",{parentName:"ul"},"Level 3: misconducts unlikely to be accidental, but which do not harm the network's security to\nany large extent. Examples include concurrent equivocation or isolated cases of unjustified voting\nin ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-consensus"},"GRANDPA"),". Slashes a moderately small amount of the stake and chills."),(0,i.kt)("li",{parentName:"ul"},"Level 4: misconduct that poses serious security or monetary risk to the system, or mass collusion.\nSlashes all or most of the stake behind the validator and chills.")),(0,i.kt)("p",null,"If you want to know more details about slashing, please look at our\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/security/slashing/amounts"},"research page"),"."),(0,i.kt)("h3",{id:"chilling"},"Chilling"),(0,i.kt)("p",null,"Chilling is the act of stepping back from any nominating or validating. It can be done by a\nvalidator or nominator at any time, taking effect in the next era. It can also specifically mean\nremoving a validator from the active validator set by another validator, disqualifying them from the\nset of electable candidates in the next NPoS cycle."),(0,i.kt)("p",null,"Chilling may be voluntary and validator-initiated, e.g. if there is a planned outage in the\nvalidator's surroundings or hosting provider, and the validator wants to exit to protect themselves\nagainst slashing. When voluntary, chilling will keep the validator active in the current session,\nbut will move them to the inactive set in the next. The validator will not lose their nominators."),(0,i.kt)("p",null,"When used as part of a punishment (initiated externally), being chilled carries an implied penalty\nof being un-nominated. It also disables the validator for the remainder of the current era and\nremoves the offending validator from the next election."),(0,i.kt)("p",null,"Polkadot allows some validators to be\ndisabled, but if the number of disabled validators gets too large,\nPolkadot will trigger a new validator election\nto get a full set. Disabled validators will need to resubmit their intention to validate and\nre-garner support from nominators."),(0,i.kt)("p",null,'For more on chilling, see the "',(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-chill"},"How to Chill"),'" page on\nthis wiki.'),(0,i.kt)("h3",{id:"fast-unstake"},"Fast Unstake"),(0,i.kt)("admonition",{title:"Fast Unstaking feature is live!",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"If you accidentally bonded your DOT or your\nbonded DOT never backed any active validator, you\ncan now unbond them immediately.")),(0,i.kt)("p",null,"If your bonded balance did not back any validators in the last\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"","\ndays, you are eligible to perform fast unstaking. The\n",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},"staking dashboard")," will automatically check if you\nqualify. For more information, visit the\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169433-can-i-transfer-dot-without-unbonding-and-waiting-28-days-"},'"Fast Unstake" section in this support article'),"."),(0,i.kt)("h2",{id:"why-and-why-not-to-stake"},"Why and Why not to Stake?"),(0,i.kt)("h3",{id:"pros-of-staking"},"Pros of Staking"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Earn rewards for contributing to the network's security through staking."),(0,i.kt)("li",{parentName:"ul"},"Low barrier of entry through ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-nomination-pools"},"Nomination Pools"),"."),(0,i.kt)("li",{parentName:"ul"},"Can choose up-to 16 validators which can help\nto decentralize the network through the sophisticated\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-consensus/#nominated-proof-of-stake"},"NPoS system")),(0,i.kt)("li",{parentName:"ul"},"10% inflation/year of the tokens is primarily intended for staking rewards.")),(0,i.kt)("p",null,"When the system staking rate matches with the ideal staking rate, the entire inflation of the\nnetwork is given away as the staking rewards.\nUp until now, the network has been following an inflation model that excludes the metric of active parachains.\nThe ideal staking rate is a dynamic value - as the number of active parachains influences the\navailable liquidity that is available to secure the network."),(0,i.kt)("p",null,"Any divergence from the ideal staking rate will result in the distribution of a proportion of the\nnewly minted tokens through inflation to go to the treasury. Keep in mind that when the system's\nstaking rate is lower than the ideal staking rate, the annual nominal return rate will be higher,\nencouraging more users to use their tokens for staking. On the contrary, when the system staking\nrate is higher than the ideal staking rate, the annual nominal return will be less, encouraging some\nusers to withdraw. For in-depth understanding, check the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced#inflation"},"inflation")," section on the Wiki."),(0,i.kt)("h3",{id:"cons-of-staking"},"Cons of Staking"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Tokens will be locked for about\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"","\ndays on Polkadot. No rewards will be earned\nduring the unbonding period."),(0,i.kt)("li",{parentName:"ul"},"Possible punishment in case of the active validator found to be misbehaving (see\n",(0,i.kt)("a",{parentName:"li",href:"#slashing"},"slashing"),")."),(0,i.kt)("li",{parentName:"ul"},"Lack of liquidity i.e. You would not be able to use the tokens for participating in crowdloans or\ntransfer them to different account etc.")),(0,i.kt)("h4",{id:"unbonding-period-length"},"Unbonding Period Length"),(0,i.kt)("p",null,"The unbonding period provides a safety net for slashing offenses identified in\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/security/slashing/npos#slashing-in-past-eras"},"past eras"),",\nwhich can hold the respective validators and their nominators accountable. The\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"","-day\nunbonding period is crucial in mitigating ex post facto slashing, particularly in guarding against\nlong-range attacks. When a client encounters a chain finalized by\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus#finality-gadget-grandpa"},"GRANDPA")," that originates more than\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"","\ndays in the past, it lacks the security of slashing protection."),(0,i.kt)("p",null,"Essentially, this period establishes a cadence for synchronizing with the chain or acquiring a\ncheckpoint within a timeframe that engenders trust. It's worth noting that while the choice of a\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"","-day\nperiod is somewhat arbitrary, it unquestionably provides a higher level of security compared to a\nshorter period."),(0,i.kt)("h2",{id:"how-many-validators"},"How many Validators?"),(0,i.kt)("p",null,"Polkadot currently has\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.validatorCount",defaultValue:297,mdxType:"RPC"}),"\n","\nvalidators. The top bound on the number of validators has not been determined yet, but should only\nbe limited by the bandwidth strain of the network due to peer-to-peer message passing."),(0,i.kt)("p",null,"The estimate of the number of validators that Polkadot will have at maturity is around 1000.\nKusama is already operating at this threshold."),(0,i.kt)("h2",{id:"why-am-i-not-receiving-rewards"},"Why am I not receiving rewards?"),(0,i.kt)("p",null,"Nominating on Polkadot is not a set-and-forget\naction. Nominators need to monitor their nominations and ensure they are eligible to receive staking\nrewards. Otherwise, they would be risking their funds to secure the chain with no reward. If you are\nbonding significantly more than the Minimum Active Bond and yet not receiving rewards, your\nnominations are all waiting, or your active validator has 100% commission. However, if you bond\nfunds close to the Minimum Active Bond, there could be several possibilities for not receiving\nstaking rewards. The table below can be used to troubleshoot why you might not be receiving staking\nrewards using Polkadot-JS UI."),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Nomination Status"),(0,i.kt)("th",{parentName:"tr",align:"center"},"What's happening?"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Causes"),(0,i.kt)("th",{parentName:"tr",align:"center"},"What to do?"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"Nominated validators are all in waiting status."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Your stake has not been assigned to any of the nominated validators. You cannot earn rewards, nor be slashed in that era."),(0,i.kt)("td",{parentName:"tr",align:"center"},'Waiting validators are not in the active set in the current era and the stake backing them is not used to secure the network. In simple words, NPoS "does not see them".'),(0,i.kt)("td",{parentName:"tr",align:"center"},"Change your nominations. Try to select validators (with reasonable commission) that have high chances to end up in the active set.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"You have some inactive, and some waiting nominations."),(0,i.kt)("td",{parentName:"tr",align:"center"},'Validators shown as "Inactive" in your staking dashboard are still in the active set and are producing blocks in the current era, but your stake has not been assigned to any of them. You will not earn rewards if your stake is not backing an active validator. In this case, you cannot be slashed either.'),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("strong",{parentName:"td"},"Scenario 1:")," You have bonded less than the Minimum Active Bond. ",(0,i.kt)("strong",{parentName:"td"},"Scenario 2:")," You have more than the Minimum Active Bond, but your account is at the tail end of the ",(0,i.kt)("a",{parentName:"td",href:"/docs/learn-staking-advanced#bags-list"},"bags list")," and within your bag there are accounts with less stake than you, in front of you."),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("strong",{parentName:"td"},"Scenario 1:")," Try bonding more funds. ",(0,i.kt)("strong",{parentName:"td"},"Scenario 2:")," Try to put your account in front of the accounts with less stake than you. Instructions available ",(0,i.kt)("a",{parentName:"td",href:"https://support.polkadot.network/support/solutions/articles/65000181018-i-have-more-than-the-minimum-bonded-but-i-m-not-getting-rewards"},"here"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"You have one active validator."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Active validators are producing blocks in the current era, and your stake has been assigned to them. Even if you are not earning rewards, you can be slashed."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Your validator is oversubscribed, meaning that it has more than 512 nominators (ranked by stake), and your stake is less than that of those nominators."),(0,i.kt)("td",{parentName:"tr",align:"center"},"You can try to select validators that are not oversubscribed but in the long term you might want to bond more funds (even more than the Minimum Active Bond) to increase the chance of earning rewards also with oversubscribed validators.")))),(0,i.kt)("admonition",{title:"Join a Nomination Pool",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"By joining a ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pool")," that is active and earning rewards, you\ncan start earning staking rewards with as low as 1 DOT. The nomination pools typically have a\ndedicated pool operator who ensures that the pool's stake is always backing an active validator and\nis receiving rewards.")),(0,i.kt)("admonition",{title:"Bags List & Minimum Active Bond",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"You can find information about why you might not receive staking rewards on\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000170805-why-am-i-not-getting-staking-rewards-"},"this support page"),"\nand ",(0,i.kt)("a",{parentName:"p",href:"https://youtu.be/hIIZRJLrBZA"},"this video tutorial"),".")),(0,i.kt)("h2",{id:"staking-faq"},"Staking FAQ"),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"See\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181959-staking-faq-s"},"this support page"),"\nfor the FAQs about staking.")),(0,i.kt)("h2",{id:"resources"},"Resources"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://medium.com/web3foundation/how-nominated-proof-of-stake-will-work-in-polkadot-377d70c6bd43"},"How Nominated Proof of Stake will work in Polkadot")," -\nBlog post by Web3 Foundation researcher Alfonso Cevallos covering NPoS in Polkadot."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/maintain-guides-secure-validator"},"Validator setup")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://decentradot.com/polkadot-validator-selector/"},"Polkadot validator selector tool")," - A tool\nthat helps nominators find reliable validators that meet quality-control criteria, including\ncommission rates, verified identity, etc.")),(0,i.kt)("hr",null),(0,i.kt)("admonition",{title:"Polkadot-JS Guides",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"If you are an advanced user, see the\n",(0,i.kt)("a",{parentName:"p",href:"./learn-guides-staking-index"},"Polkadot-JS guides about staking"),".")))}m.isMDXComponent=!0},89303:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/reward-risk-fee9f991186d4097ca3d3f0a713f4ad4.png"},4080:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/stash-and-staking-proxy-ea4d09387a4b56d1349ee896427d9f1d.png"},46601:()=>{}}]); \ No newline at end of file +(self.webpackChunk=self.webpackChunk||[]).push([[2169],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>p});var n=a(74165),o=a(15861),i=a(67294),r=a(87152),s=a(14741),l=a(67425);function d(e,t,a){return h.apply(this,arguments)}function h(){return(h=(0,o.Z)((0,n.Z)().mark((function e(t,a,o){var i,l,d,h,c;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:i=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return i="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return i="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return i="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return i="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==i){e.next=18;break}return e.abrupt("return");case 18:return d=new r.U(i),e.next=21,s.G.create({provider:d});case 21:h=e.sent,(c=a.split(".")).forEach((function(e){e in h&&(h=h[e])})),e.t1=c[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=h.toString(),e.abrupt("break",35);case 29:return e.next=31,h();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+c[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function c(e,t,a,n){switch(t){case"humanReadable":(0,l.HumanReadable)(e,a,n);break;case"precise":(0,l.Precise)(e,a,n);break;case"blocksToDays":(0,l.BlocksToDays)(e,n);break;case"erasToDays":(0,l.ErasToDays)(e,n,a);break;case"percentage":(0,l.Percentage)(e,n);break;case"permillToPercent":(0,l.PermillToPercent)(e,n);break;case"arrayLength":(0,l.ArrayLength)(e,n);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(e){var t=e.network,a=e.path,r=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,h=(0,i.useState)(""),p=h[0],u=h[1];return t=t.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?c(r.toString(),l,t,u):u(r.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var i=function(){var e=(0,o.Z)((0,n.Z)().mark((function e(){var o;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,d(t,a,u);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?c(o,l,t,u):u(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{i()}catch(s){console.log(s)}}}),[]),p}},67425:e=>{var t="polkadot",a="kusama",n="statemine",o="statemint",i={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,r,s){var l=void 0;if(r===t||r===o)l=3;else{if(r!==a&&r!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),s((e=Number.isInteger(e/i[r].precision)?e/i[r].precision+" "+i[r].symbol:(e/i[r].precision).toFixed(l)+" "+i[r].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/i[t].precision+" "+i[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,i,r){var s=void 0;if(r===t||r===o)s=1;else{if(r!==a&&r!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}i((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},78381:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>m,frontMatter:()=>l,metadata:()=>h,toc:()=>p});var n=a(87462),o=a(63366),i=(a(67294),a(3905)),r=a(47940),s=["components"],l={id:"learn-staking",title:"Introduction to Staking",sidebar_label:"Introduction to Staking",description:"Overview of Staking and NPoS on Polkadot.",keywords:["staking","stake","nominate","nominating","NPoS","faq"],slug:"../learn-staking"},d=void 0,h={unversionedId:"learn/learn-staking",id:"learn/learn-staking",title:"Introduction to Staking",description:"Overview of Staking and NPoS on Polkadot.",source:"@site/../docs/learn/learn-staking.md",sourceDirName:"learn",slug:"/learn-staking",permalink:"/docs/learn-staking",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-staking.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-staking",title:"Introduction to Staking",sidebar_label:"Introduction to Staking",description:"Overview of Staking and NPoS on Polkadot.",keywords:["staking","stake","nominate","nominating","NPoS","faq"],slug:"../learn-staking"},sidebar:"docs",previous:{title:"Staking",permalink:"/docs/learn-staking-index"},next:{title:"Nomination Pools",permalink:"/docs/learn-nomination-pools"}},c={},p=[{value:"Proof-of-Stake (PoS)",id:"proof-of-stake-pos",level:2},{value:"Nominated Proof-of-Stake (NPoS)",id:"nominated-proof-of-stake-npos",level:2},{value:"Nominating Validators",id:"nominating-validators",level:3},{value:"Eras and Sessions",id:"eras-and-sessions",level:3},{value:"Staking Rewards",id:"staking-rewards",level:3},{value:"Skin in the game when Staking",id:"skin-in-the-game-when-staking",level:3},{value:"Being a Nominator",id:"being-a-nominator",level:2},{value:"Tasks and Responsibilities of a Nominator",id:"tasks-and-responsibilities-of-a-nominator",level:3},{value:"Selection of Validators",id:"selection-of-validators",level:3},{value:"Validator Selection Criteria",id:"validator-selection-criteria",level:4},{value:"Network Providers",id:"network-providers",level:4},{value:"Keeping Track of Nominated Validators",id:"keeping-track-of-nominated-validators",level:4},{value:"Stash Account and Staking Proxy",id:"stash-account-and-staking-proxy",level:3},{value:"Claiming Staking Rewards",id:"claiming-staking-rewards",level:3},{value:"Slashing",id:"slashing",level:3},{value:"Chilling",id:"chilling",level:3},{value:"Fast Unstake",id:"fast-unstake",level:3},{value:"Why and Why not to Stake?",id:"why-and-why-not-to-stake",level:2},{value:"Pros of Staking",id:"pros-of-staking",level:3},{value:"Cons of Staking",id:"cons-of-staking",level:3},{value:"Unbonding Period Length",id:"unbonding-period-length",level:4},{value:"How many Validators?",id:"how-many-validators",level:2},{value:"Why am I not receiving rewards?",id:"why-am-i-not-receiving-rewards",level:2},{value:"Staking FAQ",id:"staking-faq",level:2},{value:"Resources",id:"resources",level:2}],u={toc:p},k="wrapper";function m(e){var t=e.components,l=(0,o.Z)(e,s);return(0,i.kt)(k,(0,n.Z)({},u,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{title:"New to Staking?",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"Explore Polkadot with a secure and user-friendly wallets listed on the\n",(0,i.kt)("a",{parentName:"p",href:"https://www.polkadot.network/ecosystem/wallets/"},"Polkadot website")," and start your staking journey\nor explore more information about staking on\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/staking/"},"Polkadot's Staking Page"),". Discover the new\n",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},"Staking Dashboard")," that makes staking much easier and\ncheck this\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182104"},"extensive article list")," to\nhelp you get started. The dashboard supports ",(0,i.kt)("a",{parentName:"p",href:"/docs/ledger"},"Ledger")," devices natively and\ndoes not require an extension or wallet as an interface.")),(0,i.kt)("admonition",{title:"Stake through Nomination Pools",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The minimum amount required to become an active nominator and earn rewards may change from era to\nera.\nIt is currently ",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minimumActiveStake",defaultValue:502e10,filter:"humanReadable",mdxType:"RPC"})),".\n","\nIf you have less DOT than the minimum active\nnomination and still want to participate in staking, you can join the nomination pools. You can now\nstake on Polkadot natively with just\n",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.minJoinBond",filter:"humanReadable",defaultValue:1e10,mdxType:"RPC"})),"\n","\nin the nomination pools and earn staking rewards. For additional information, check out\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/blog/nomination-pools-are-live-stake-natively-with-just-1-dot/"},"this blog post"),".\nCheck the wiki doc on ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pools")," for more information.")),(0,i.kt)("p",null,"Here you will learn about what staking is, why it is important and how it works on\nPolkadot."),(0,i.kt)("h2",{id:"proof-of-stake-pos"},"Proof-of-Stake (PoS)"),(0,i.kt)("p",null,"Blockchain networks use ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus/#why-do-we-need-consensus"},"consensus")," mechanisms to\nfinalize blocks on the chain. Consensus is the process of agreeing on something, in this case, the\nprogression of the blockchain or how blocks are added to the chain. Consensus consists of two\nactions:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Block production"),", i.e. the way multiple blocks candidates are produced, and"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Block finality"),", i.e. the way only one block out of many candidates is selected and added to\nthe canonical chain (see ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-consensus/#probabilistic-vs-provable-finality"},"this")," article\nfor more information about finality).")),(0,i.kt)("p",null,"Proof-of-Work (PoW) and Proof-of-Stake (PoS) are well-known mechanisms used to reach consensus in a\nsecure and trustless way on public blockchains, where there are many participants who do not know\neach other (and probably never will). In PoW, network security relies on the fact that the miners\nwho are responsible for adding blocks to the chain must compete to solve difficult mathematic\npuzzles to add blocks - a solution that has been criticized for the wastage of energy. For doing\nthis work, miners are typically rewarded with tokens."),(0,i.kt)("p",null,"In PoS networks like Polkadot the security of\nthe network depends on the amount of capital locked on the chain: the more the capital locked, the\nlower the chance of an attack on the network, as the attacker needs to incur a heavy loss to\norchestrate a successful attack (more on this later on). The process of locking tokens on the chain\nis called ",(0,i.kt)("strong",{parentName:"p"},"staking"),"."),(0,i.kt)("p",null,"Similar to the miners in PoW networks, PoS networks have ",(0,i.kt)("strong",{parentName:"p"},"validators"),", but they do not have to\ncompete with each other to solve mathematical puzzles. They are instead pre-selected to produce the\nblocks based on the stake backing them. Token holders can lock funds on the chain and for doing so,\nthey are getting ",(0,i.kt)("strong",{parentName:"p"},"staking rewards"),". There is thus an economic incentive for token holders to\nbecome active participants who contribute to the economic security and stability of the network. PoS\nnetworks in general are therefore more inclusive than PoW networks, as participants do not need to\nhave either technical knowledge about blockchain technology or experience in running mining\nequipment."),(0,i.kt)("p",null,'PoS ensures that everybody participating in the staking process has "skin in the game" and thus can\nbe held accountable. In case of misbehavior, participants in the staking process can be punished or\n',(0,i.kt)("strong",{parentName:"p"},"slashed"),", and depending on the gravity of the situation, their stake can be partly or fully\nconfiscated by the network. It is not in a staker's economic interest to orchestrate an attack and\nrisk losing tokens. Any rational actor staking on the network would want to get rewarded, and the\nPoS network rewards good behavior and punishes bad behavior."),(0,i.kt)("h2",{id:"nominated-proof-of-stake-npos"},"Nominated Proof-of-Stake (NPoS)"),(0,i.kt)("p",null,"Polkadot implements\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus/#nominated-proof-of-stake"},"Nominated Proof-of-Stake (NPoS)"),", a relatively novel\nand sophisticated mechanism to select the validators who are allowed to participate in its\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus"},"consensus")," protocol. NPoS encourages\nDOT holders to participate as ",(0,i.kt)("strong",{parentName:"p"},"nominators"),"."),(0,i.kt)("p",null,"Any potential validators can indicate their intention to be a validator candidate. Their candidacies\nare made public to all nominators, and a nominator, in turn, submits a list of up to\n16 candidates that it supports, and the network\nwill automatically distribute the stake among validators in an even manner so that the economic\nsecurity is maximized. In the next era, a certain number of validators having the most\nDOT backing get elected and become active. For\nmore information about the election algorithm go to ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"this")," page on the wiki or\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/protocols/NPoS/Paper"},"this")," research article. As a\nnominator, a minimum of\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minNominatorBond",defaultValue:25e11,filter:"humanReadable",mdxType:"RPC"}),"\n","\nis required to submit an intention to nominate, which can be thought of as registering to be a\nnominator. Note that in NPoS the stake of both nominators and validators can be slashed. For an\nin-depth review of NPoS see\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/protocols/NPoS/Overview"},"this")," research article."),(0,i.kt)("admonition",{title:"Minimum Nomination to Receive Staking Rewards",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"Although the minimum nomination intent is\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minNominatorBond",defaultValue:25e11,filter:"humanReadable",mdxType:"RPC"}),",\n","\nit does not guarantee staking rewards. The nominated amount has to be greater than\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nominator#minimum-active-nomination-to-receive-staking-rewards"},"minimum active nomination"),",\nwhich is a dynamic value that can be much higher than\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minNominatorBond",defaultValue:25e11,filter:"humanReadable",mdxType:"RPC"}),".\n","\nThis dynamic value depends on the amount of DOT\nbeing staked, in addition to the selected nominations.")),(0,i.kt)("h3",{id:"nominating-validators"},"Nominating Validators"),(0,i.kt)("p",null,"Nominating on Polkadot requires 2 actions:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Locking tokens on-chain."),(0,i.kt)("li",{parentName:"ul"},"Selecting a set of validators, to whom these locked tokens will automatically be allocated to.")),(0,i.kt)("p",null,"How many tokens you lock up is completely up to you - as are the validators you wish to select. The\naction of locking tokens is also known as ",(0,i.kt)("strong",{parentName:"p"},"bonding"),". You can also refer to your locked tokens as\nyour bonded tokens, or staked tokens. Likewise, selecting validators is also known as backing or\nnominating validators. These terms are used interchangeably by the community. From now on locked\ntokens will be referred to as bonded tokens."),(0,i.kt)("p",null,"Once the previous 2 steps are completed and you are nominating, your bonded tokens could be\nallocated to one or more of your selected validators, and this happens every time the active\nvalidator set changes. This validator set is updated every era on\nPolkadot."),(0,i.kt)("p",null,"Unlike other staking systems, Polkadot\nautomatically chooses which of your selected validators will be backed by your bonded tokens.\nSelecting a group of validators increases your chances of consistently backing at least one who is\nactive. This results in your bonded tokens being allocated to validators more often, which means\nmore network security and more rewards. This is in strong contrast to other staking systems that\nonly allow you to back one validator; if that validator is not active, you as a staker will also not\nbe. Polkadot's nomination model solves this."),(0,i.kt)("p",null,"Polkadot uses tools ranging from election\ntheory to game theory to discrete optimization, to develop an efficient validator selection process\nthat offers fair representation and security, thus avoiding uneven power and influence among\nvalidators. The election algorithms used by\nPolkadot are based on the Proportional\nJustified Representation (PJR) methods like ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"Phragmen"),". For more information\nabout PJR methods visit ",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/protocols/NPoS/Overview"},"this"),"\nresearch article."),(0,i.kt)("h3",{id:"eras-and-sessions"},"Eras and Sessions"),(0,i.kt)("p",null,"The stake from nominators is used to increase the number of tokens held by such candidates,\nincreasing their chance of being selected by the election algorithm for block production during a\nspecific ",(0,i.kt)("strong",{parentName:"p"},"era"),". An era is a period of 24 hours\nduring which an ",(0,i.kt)("strong",{parentName:"p"},"active set")," of validators is producing blocks and performing other actions on the\nchain. This means that not all validators are in the active set and such set changes between eras.\nEach era is divided into 6 epochs or ",(0,i.kt)("strong",{parentName:"p"},"sessions")," during which validators are assigned as block\nproducers to specific time frames or ",(0,i.kt)("strong",{parentName:"p"},"slots"),". This means that validators know the slots when they\nwill be required to produce a block within a specific session, but they do not know all the slots\nwithin a specific era. Having sessions adds a layer of security because it decreases the chance of\nhaving multiple validators assigned to a slot colluding to harm the network."),(0,i.kt)("h3",{id:"staking-rewards"},"Staking Rewards"),(0,i.kt)("p",null,"Validators who produce a block are rewarded with tokens, and they can share rewards with their\nnominators. Both validators and nominators can stake their tokens on chain and receive staking\nrewards at the end of each era. The staking system pays out rewards equally to all validators\nregardless of stake. Thus, having more stake in a validator does not influence the amount of block\nrewards it receives. This avoids the centralization of power to a few validators. There is a\nprobabilistic component in the calculation of rewards, so they may not be exactly equal for all\nvalidators. In fact, during each era validators can earn ",(0,i.kt)("strong",{parentName:"p"},"era points")," by doing different tasks on\nchain. The more the points, the higher the reward for a specific era. This promotes validators'\nactivity on chain. To know more about era points, and how and on which basis they are distributed\nvisit the ",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-validator-payout"},"dedicated page"),". Distribution of the\nrewards is pro-rata to all stakers after the validator's commission is deducted."),(0,i.kt)("h3",{id:"skin-in-the-game-when-staking"},"Skin in the game when Staking"),(0,i.kt)("p",null,"The security of PoS networks depends on the amount of staked tokens. To successfully attack the\nnetwork, a malicious actor would need to accrue a large number of tokens or would need different\nparticipants to collude and act maliciously. If there is an attack in the case of NPoS, both the\nvalidator(s) and nominators will be slashed resulting in their stake being partially or fully\nconfiscated by the network and then deposited to the treasury. There is little interest for a\nrational network participant to act in a harmful way because NPoS ensures that all participants can\nbe held accountable for their bad actions. In NPoS, validators are paid equal rewards regardless of\nthe amount of stake backing them, thus avoiding large payouts to few large validators which might\nlead to centralization."),(0,i.kt)("h2",{id:"being-a-nominator"},"Being a Nominator"),(0,i.kt)("h3",{id:"tasks-and-responsibilities-of-a-nominator"},"Tasks and Responsibilities of a Nominator"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Validators.")," Since validator slots are limited, most of those who wish to stake their\nDOT and contribute to the economic security of\nthe network will be nominators, thus here we focus on the role of nominators. However, it is worth\nmentioning that validators do most of the heavy lifting: they run the validator nodes and manage\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/security/keys/session"},"session keys"),", produce new block\ncandidates in ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus/#block-production-babe"},"BABE"),", vote and come to consensus in\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus/#finality-gadget-grandpa"},"GRANDPA"),", validate the state transition function of\nparachains, and possibly some other responsibilities regarding data availability and\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-xcm"},"XCM"),". For more information, you can take a look at the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-validator"},"validator docs")," to understand what you need to do as a validator. If you want\nto become a validator you can consult\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-validate-polkadot"},"this")," guide."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Nominators.")," Nominators have far fewer responsibilities than validators. These include selecting\nvalidators and monitoring their performance, keeping an eye on changing commission rates (a\nvalidator can change commission at any time), and general health monitoring of their validators'\naccounts. Thus, while not being completely set-it-and-forget-it, a nominator's experience is\nrelatively hands-off compared to that of a validator, and even more with\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pools"),". For more information, you can take a look at the\nnominator ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nominator"},"guide")," to understanding your responsibilities as a nominator."),(0,i.kt)("p",null,"If you want to become a nominator, see ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nominator"},"this")," guide. If you are a\nbeginner and would like to securely stake your tokens using the Polkadot-JS UI, refer to\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000168057-how-do-i-stake-nominate-on-polkadot-"},"this"),"\nsupport article.\n"),(0,i.kt)("admonition",{title:"Polkadot Staking Dashboard",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The ",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/dashboard/#/overview"},"Staking Dashboard")," provides a more\nuser-friendly alternative to staking. See the instructions in\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182133-how-to-use-the-staking-dashboard-staking-your-dot"},"this"),"\nsupport article to learn how to stake with the dashboard.")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Pools."),' Pools are "built" on top of NPoS to provide a very low barrier to entry to staking,\nwithout sacrificing Polkadot\'s strict security model.'),(0,i.kt)("h3",{id:"selection-of-validators"},"Selection of Validators"),(0,i.kt)("p",null,"The task of choosing validators is not simple, as it should take into account nominator reward and\nrisk preferences. Ideally one aims to maximize the reward-to-risk ratio by maximizing rewards and\nminimizing risks, with sometimes having to compromise between the two, as minimizing risks might\ndecrease rewards as well. Nominators should pay attention, especially to six criteria when\nnominating validators (not in order of importance):"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"recent history of the era points earned across eras"),(0,i.kt)("li",{parentName:"ul"},"validator's self stake (shows skin in the game)"),(0,i.kt)("li",{parentName:"ul"},"total stake backing the validator (which is the sum of self stake and the stake coming from\nnominators)"),(0,i.kt)("li",{parentName:"ul"},"commission fees (i.e. how much validators charge nominators)"),(0,i.kt)("li",{parentName:"ul"},"verified identity"),(0,i.kt)("li",{parentName:"ul"},"previous slashes")),(0,i.kt)("p",null,"The diagram below shows how the selection of those criteria affects the reward-to-risk ratio."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"rewards and risks diagram",src:a(89303).Z,width:"1920",height:"800"})),(0,i.kt)("h4",{id:"validator-selection-criteria"},"Validator Selection Criteria"),(0,i.kt)("p",null,"To maximize rewards and minimize risk, one could select those validators that:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"have era points above average (because they will get more rewards for being active),"),(0,i.kt)("li",{parentName:"ul"},"have the total stake backing the validator below the average active validator stake (because they\nwill pay out more rewards per staked DOT),"),(0,i.kt)("li",{parentName:"ul"},"have high own stake (because if slashed they have something to lose),"),(0,i.kt)("li",{parentName:"ul"},"have low commission fees but not 0% (because it makes sense that for doing the heavy lifting,\nvalidators ask for a small commission),"),(0,i.kt)("li",{parentName:"ul"},"have on-chain registered identity (because it adds a layer of trust and possibly provides access\nto their website and contact details),"),(0,i.kt)("li",{parentName:"ul"},"and have not been slashed (meaning that their on-chain behavior is genuine).")),(0,i.kt)("h4",{id:"network-providers"},"Network Providers"),(0,i.kt)("p",null,"For successful operation, a Validator node should always be ensured to meet the required\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-validate-polkadot#reference-hardware"},"software, hardware, and network bandwidth specifications"),".\nUnderstandably, most of the validator nodes run on cloud service providers that guarantee high\nhardware specifications and high levels of availability and connectivity. Keep in mind that a\nvalidator in the active set is supposed to be fully online and available for producing blocks. If\nthe active validator node goes offline due to network interruptions or a power outage, that\nvalidator might be subject to\n",(0,i.kt)("a",{parentName:"p",href:"./learn-staking-advanced#unresponsiveness"},"slashing due to unresponsiveness"),". As\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus#block-production-babe"},"Polkadot's block production mechanism")," is reasonably\nresilient to a small proportion of validators going offline, no slashing is imposed until 10% of the\nvalidators in the active set go offline. Hence, if multiple nodes are running on a single cloud\nservice provider and go offline simultaneously due to an outage or due to a change in their terms\nand conditions policy regarding the support of Proof-of-Stake (PoS) operations, the offline\nvalidators and all the nominators backing them can be slashed up 7% of their stake on Polkadot.\nHence, it is recommended that you check if you are nominating the validator nodes that are running\non cloud service providers, and if they do, check if they allow for Proof-of-Stake operations."),(0,i.kt)("admonition",{title:"Checking Validators using Network Providers",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"You can connect your stash account to the ",(0,i.kt)("a",{parentName:"p",href:"https://polkawatch.app/"},"Polkawatch app"),". The app will\nshow your rewards earned in the past 60 eras divided by network provider and country. You will be\nable to see networks used by each validator and verify if your validators are using providers who\nsupport PoS. This is also a great tool to explore how decentralized your nominations are and act\naccordingly.")),(0,i.kt)("h4",{id:"keeping-track-of-nominated-validators"},"Keeping Track of Nominated Validators"),(0,i.kt)("admonition",{title:"Nominators must periodically check their validators",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"Nominating is ",(0,i.kt)("em",{parentName:"p"},"not"),' a "set and forget" operation. The whole NPoS system is dynamic and nominators\nshould periodically monitor the performance and reputation of their validators. Failing to do so\ncould result in applied slashes and/or rewards not being paid out, possibly for a prolonged period.')),(0,i.kt)("p",null,"Although the theory can be used as a general guideline, in practice it is more complicated and\nfollowing the theory might not necessarily lead to the desired result. Validators might have the\ntotal stake backing them below average, low commission and above average era points in one era and\nthen have a different profile in the next one. Selection based on the criteria like on-chain\nidentity, slash history and low commission make the staking rewards deterministic. But some criteria\nvary more than others, with era points being the most variable and thus one of the key probabilistic\ncomponents of staking rewards. Part of this probability is directly related to the fact that a\nvalidator can produce blocks for a parachain (i.e. para-validators) or the relay chain, with\npara-validators earning more era points per unit time (see\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-validator-payout#era-points"},"this")," page for more information). The\nrole can switch between sessions, and you can look at\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking"},"the staking tab on the Polkadot-JS UI")," to know which\nvalidator is producing blocks for the relay chain or parachains."),(0,i.kt)("p",null,"It is not recommended to change nominations because of the low era points of a validator in a single\nera. Variability in rewards due to the era points should level out over time. If a validator\nconsistently gets era points below average, it makes sense to nominate a better-performing validator\nfor the health of the network and increased staking rewards. See\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000150130-how-do-i-know-which-validators-to-choose-"},"this"),"\nsupport article to understand in detail how to select the set of validators to nominate."),(0,i.kt)("h3",{id:"stash-account-and-staking-proxy"},"Stash Account and Staking Proxy"),(0,i.kt)("p",null,"Two different accounts can be used to securely manage your funds while staking."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Stash:")," This account holds funds bonded for staking, but delegates all staking functions to a\nstaking proxy account. You may actively participate in staking with a stash private key kept in a\ncold wallet like Ledger, meaning it stays offline all the time. Having a staking proxy will allow\nyou to sign all staking-related transactions with the proxy instead of using your Ledger device.\nThis will allow you:"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"to avoid carrying around your Ledger device just to sign staking-related transactions, and"),(0,i.kt)("li",{parentName:"ul"},"to and to keep the transaction history of your stash clean"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Staking Proxy:")," This account acts on behalf of the stash account, signalling decisions about\nnominating and validating. It can set preferences like commission (for validators) and the staking\nrewards payout account. The earned rewards can be bonded (locked) immediately for bonding on your\nstash account, which would effectively compound the rewards you receive over time. You could also\nchoose to have them deposited to a different account as a free (transferable) balance. If you are\na validator, it can also be used to set your ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-cryptography"},"session keys"),". Staking\nproxies only need sufficient funds to pay for the transaction fees."))),(0,i.kt)("admonition",{type:"warning"},(0,i.kt)("p",{parentName:"admonition"},'Never leave a high balance on a proxy account which are usually "hot" as their private key is stored\non the device (PC, phone) and it is always exposed to the internet for potential hacks and scams. It\nis good practice to deposit rewards on the stash account or to send them to another account on a\ncold wallet.')),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"staking",src:a(4080).Z,width:"1920",height:"800"})),(0,i.kt)("p",null,"This hierarchy of separate keys for stash and staking accounts was designed to add a layer of\nprotection to nominators and validator operators. The more often one exposes and uses a private key,\nthe higher its vulnerability for hacks or scams. So, if one uses a key for multiple roles on a\nblockchain network, it is likely that the account can get compromised. Note that the damage linked\nto stolen private keys is different depending on the type of account derivation. In the case of soft\nderivation, all derived accounts are compromised. More information about account derivation can be\nfound ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-accounts/#derivation-paths"},"here"),"."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"For Ledger users staking directly on Ledger Live, currently, there is no option to use separate\nstash and staking proxy accounts."),(0,i.kt)("p",{parentName:"admonition"},"Ledger devices are now supported in ",(0,i.kt)("a",{parentName:"p",href:"https://www.subwallet.app/download.html"},"SubWallet")," and\n",(0,i.kt)("a",{parentName:"p",href:"https://talisman.xyz/"},"Talisman")," extension. Users can import their Ledger accounts in the extension\nand use them as a stash in staking. You can find more information about SubWallet, Talisman and\nother wallets that officially secured funding from the treasury\n",(0,i.kt)("a",{parentName:"p",href:"/docs/wallets-and-extensions"},"here"),".")),(0,i.kt)("h3",{id:"claiming-staking-rewards"},"Claiming Staking Rewards"),(0,i.kt)("p",null,""),(0,i.kt)("p",null,"Rewards are calculated per era (approximately six hours on Kusama and twenty-four hours on\nPolkadot). These rewards are calculated based on era points, which have a probabilistic component.\nIn other words, there may be slight differences in your rewards from era to era, and even amongst\nvalidators in the active set at the same time. These variations should cancel out over a long enough\ntimeline. See the page on ",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-validator-payout"},"Validator Payout Guide"),"."),(0,i.kt)("p",null,"The distribution of staking rewards to the nominators is not automatic and needs to be triggered by\nsomeone. Typically the validators take care of this, but anyone can permissionlessly trigger rewards\npayout for all the nominators whose stake has backed a specific validator in the active set of that\nera. Staking rewards are kept available for 84 eras. The following calculation can be used to\napproximate this length in days on Polkadot:"),(0,i.kt)("p",null,"",(0,i.kt)("inlineCode",{parentName:"p"},"84 eras")," \xd7 ",(0,i.kt)("inlineCode",{parentName:"p"},"24 hours in a single era")," \xf7 ",(0,i.kt)("inlineCode",{parentName:"p"},"24 hours in a day")," = ",(0,i.kt)("inlineCode",{parentName:"p"},"84 days"),"\n","","","",""),(0,i.kt)("p",null,"For more information on why this is so, see the page on ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced"},"simple payouts"),"."),(0,i.kt)("admonition",{title:"Payouts",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Payouts are unclaimed rewards waiting to be paid out to both validators and nominators. If you go to\nthe Staking payouts page on ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking"},"Polkadot-JS"),", you will see a\nlist of all validators that you have nominated in the past 84 eras and for which you have not yet\nreceived a payout. The payout page is visible only to stakers."),(0,i.kt)("p",{parentName:"admonition"},"Each validator as well as their nominators have the option to trigger the payout for all unclaimed\neras. Note that this will pay everyone who was nominating that validator during those eras.\nTherefore, you may not see anything in this tab, yet still have received a payout if somebody\n(generally, but not necessarily, another nominator or the validator operator) has triggered the\npayout for that validator for that era.")),(0,i.kt)("admonition",{title:"Time limit to claim staking rewards",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"If nobody claims your staking rewards within 84 eras, then you will not be able to claim them and\nthey will be lost. Additionally, if the validator unbonds all their own stake, any pending payouts\nwill also be lost. Since unbonding takes\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"\n","\ndays, nominators should check if they have pending payouts at least this often.")),(0,i.kt)("p",null,"Rewards can be directed to the same account used to sign the payout or to a completely unrelated\naccount. It is also possible to top-up / withdraw some bonded tokens without having to un-stake all\nstaked tokens."),(0,i.kt)("p",null,"If you wish to know if you received a payout, you will have to check via a block explorer. See\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000168954-how-can-i-see-my-staking-rewards-"},"the relevant Support page"),"\nfor details. For specific details about validator payouts, please see\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-validator-payout"},"this guide"),"."),(0,i.kt)("h3",{id:"slashing"},"Slashing"),(0,i.kt)("p",null,"Slashing will happen if a validator misbehaves (e.g. goes offline, attacks the network, or runs\nmodified software) in the network. They and their nominators will get slashed by losing a percentage\nof their bonded/staked DOT."),(0,i.kt)("p",null,"Any slashed DOT will be added to the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn/learn-treasury"},"Treasury"),". The rationale for this\n(rather than burning or distributing them as rewards) is that slashes may then be reverted by the\nCouncil by simply paying out from the Treasury. This would be useful in situations such as faulty\nslashes. In the case of legitimate slashing, it moves tokens away from malicious validators to those\nbuilding the ecosystem through the normal Treasury process."),(0,i.kt)("p",null,"Validators with a larger total stake backing them will get slashed more harshly than less popular\nones, so we encourage nominators to shift their nominations to less popular validators to reduce\ntheir possible losses."),(0,i.kt)("p",null,"It is important to realize that slashing only occurs for active validations for a given nominator,\nand slashes are not mitigated by having other inactive or waiting nominations. They are also not\nmitigated by the validator operator running separate validators; each validator is considered its\nown entity for purposes of slashing, just as they are for staking rewards."),(0,i.kt)("p",null,"In rare instances, a nominator may be actively nominating several validators in a single era. In\nthis case, the slash is proportionate to the amount staked to that specific validator. With very\nlarge bonds, such as parachain liquid staking accounts, a nominator has multiple active nominations\nper era (Acala's LDOT nominator typically has 7-12 active nominations per era). Note that you cannot\ncontrol the percentage of stake you have allocated to each validator or choose who your active\nvalidator will be (except in the trivial case of nominating a single validator). Staking allocations\nare controlled by the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"Phragm\xe9n algorithm"),"."),(0,i.kt)("p",null,'Once a validator gets slashed, it goes into the state as an "unapplied slash". You can check this\nvia\n',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.polkadot.io#/staking/slashes"},"Polkadot-JS UI"),".\nThe UI shows it per validator and then all the affected nominators along with the amounts. While\nunapplied, a governance proposal can be made to reverse it during this period\n(",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"","\ndays). After the grace period, the slashes are applied."),(0,i.kt)("p",null,"The following levels of offense are\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/security/slashing/amounts"},"defined"),". However, these\nparticular levels are not implemented or referred to in the code or in the system; they are meant as\nguidelines for different levels of severity for offenses. To understand how slash amounts are\ncalculated, see the equations in the section below."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Level 1: isolated ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking-advanced/#unresponsiveness"},"unresponsiveness"),", i.e. being\noffline for an entire session. Generally no slashing, only ",(0,i.kt)("a",{parentName:"li",href:"#chilling"},"chilling"),"."),(0,i.kt)("li",{parentName:"ul"},"Level 2: concurrent unresponsiveness or isolated\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking-advanced/#equivocation"},"equivocation"),", slashes a very small amount of the\nstake and chills."),(0,i.kt)("li",{parentName:"ul"},"Level 3: misconducts unlikely to be accidental, but which do not harm the network's security to\nany large extent. Examples include concurrent equivocation or isolated cases of unjustified voting\nin ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-consensus"},"GRANDPA"),". Slashes a moderately small amount of the stake and chills."),(0,i.kt)("li",{parentName:"ul"},"Level 4: misconduct that poses serious security or monetary risk to the system, or mass collusion.\nSlashes all or most of the stake behind the validator and chills.")),(0,i.kt)("p",null,"If you want to know more details about slashing, please look at our\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/security/slashing/amounts"},"research page"),"."),(0,i.kt)("h3",{id:"chilling"},"Chilling"),(0,i.kt)("p",null,"Chilling is the act of stepping back from any nominating or validating. It can be done by a\nvalidator or nominator at any time, taking effect in the next era. It can also specifically mean\nremoving a validator from the active validator set by another validator, disqualifying them from the\nset of electable candidates in the next NPoS cycle."),(0,i.kt)("p",null,"Chilling may be voluntary and validator-initiated, e.g. if there is a planned outage in the\nvalidator's surroundings or hosting provider, and the validator wants to exit to protect themselves\nagainst slashing. When voluntary, chilling will keep the validator active in the current session,\nbut will move them to the inactive set in the next. The validator will not lose their nominators."),(0,i.kt)("p",null,"When used as part of a punishment (initiated externally), being chilled carries an implied penalty\nof being un-nominated. It also disables the validator for the remainder of the current era and\nremoves the offending validator from the next election."),(0,i.kt)("p",null,"Polkadot allows some validators to be\ndisabled, but if the number of disabled validators gets too large,\nPolkadot will trigger a new validator election\nto get a full set. Disabled validators will need to resubmit their intention to validate and\nre-garner support from nominators."),(0,i.kt)("p",null,'For more on chilling, see the "',(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-chill"},"How to Chill"),'" page on\nthis wiki.'),(0,i.kt)("h3",{id:"fast-unstake"},"Fast Unstake"),(0,i.kt)("admonition",{title:"Fast Unstaking feature is live!",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"If you accidentally bonded your DOT or your\nbonded DOT never backed any active validator, you\ncan now unbond them immediately.")),(0,i.kt)("p",null,"If your bonded balance did not back any validators in the last\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"","\ndays, you are eligible to perform fast unstaking. The\n",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},"staking dashboard")," will automatically check if you\nqualify. For more information, visit the\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169433-can-i-transfer-dot-without-unbonding-and-waiting-28-days-"},'"Fast Unstake" section in this support article'),"."),(0,i.kt)("h2",{id:"why-and-why-not-to-stake"},"Why and Why not to Stake?"),(0,i.kt)("h3",{id:"pros-of-staking"},"Pros of Staking"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Earn rewards for contributing to the network's security through staking."),(0,i.kt)("li",{parentName:"ul"},"Low barrier of entry through ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-nomination-pools"},"Nomination Pools"),"."),(0,i.kt)("li",{parentName:"ul"},"Can choose up-to 16 validators which can help\nto decentralize the network through the sophisticated\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-consensus/#nominated-proof-of-stake"},"NPoS system")),(0,i.kt)("li",{parentName:"ul"},"10% inflation/year of the tokens is primarily intended for staking rewards.")),(0,i.kt)("p",null,"When the system staking rate matches with the ideal staking rate, the entire inflation of the\nnetwork is given away as the staking rewards.\nUp until now, the network has been following an inflation model that excludes the metric of active parachains.\nThe ideal staking rate is a dynamic value - as the number of active parachains influences the\navailable liquidity that is available to secure the network."),(0,i.kt)("p",null,"Any divergence from the ideal staking rate will result in the distribution of a proportion of the\nnewly minted tokens through inflation to go to the treasury. Keep in mind that when the system's\nstaking rate is lower than the ideal staking rate, the annual nominal return rate will be higher,\nencouraging more users to use their tokens for staking. On the contrary, when the system staking\nrate is higher than the ideal staking rate, the annual nominal return will be less, encouraging some\nusers to withdraw. For in-depth understanding, check the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced#inflation"},"inflation")," section on the Wiki."),(0,i.kt)("h3",{id:"cons-of-staking"},"Cons of Staking"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Tokens will be locked for about\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"","\ndays on Polkadot. No rewards will be earned\nduring the unbonding period."),(0,i.kt)("li",{parentName:"ul"},"Possible punishment in case of the active validator found to be misbehaving (see\n",(0,i.kt)("a",{parentName:"li",href:"#slashing"},"slashing"),")."),(0,i.kt)("li",{parentName:"ul"},"Lack of liquidity i.e. You would not be able to use the tokens for participating in crowdloans or\ntransfer them to different account etc.")),(0,i.kt)("h4",{id:"unbonding-period-length"},"Unbonding Period Length"),(0,i.kt)("p",null,"The unbonding period provides a safety net for slashing offenses identified in\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/security/slashing/npos#slashing-in-past-eras"},"past eras"),",\nwhich can hold the respective validators and their nominators accountable. The\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"","-day\nunbonding period is crucial in mitigating ex post facto slashing, particularly in guarding against\nlong-range attacks. When a client encounters a chain finalized by\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus#finality-gadget-grandpa"},"GRANDPA")," that originates more than\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"","\ndays in the past, it lacks the security of slashing protection."),(0,i.kt)("p",null,"Essentially, this period establishes a cadence for synchronizing with the chain or acquiring a\ncheckpoint within a timeframe that engenders trust. It's worth noting that while the choice of a\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"","-day\nperiod is somewhat arbitrary, it unquestionably provides a higher level of security compared to a\nshorter period."),(0,i.kt)("h2",{id:"how-many-validators"},"How many Validators?"),(0,i.kt)("p",null,"Polkadot currently has\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.validatorCount",defaultValue:297,mdxType:"RPC"}),"\n","\nvalidators. The top bound on the number of validators has not been determined yet, but should only\nbe limited by the bandwidth strain of the network due to peer-to-peer message passing."),(0,i.kt)("p",null,"The estimate of the number of validators that Polkadot will have at maturity is around 1000.\nKusama is already operating at this threshold."),(0,i.kt)("h2",{id:"why-am-i-not-receiving-rewards"},"Why am I not receiving rewards?"),(0,i.kt)("p",null,"Nominating on Polkadot is not a set-and-forget\naction. Nominators need to monitor their nominations and ensure they are eligible to receive staking\nrewards. Otherwise, they would be risking their funds to secure the chain with no reward. If you are\nbonding significantly more than the Minimum Active Bond and yet not receiving rewards, your\nnominations are all waiting, or your active validator has 100% commission. However, if you bond\nfunds close to the Minimum Active Bond, there could be several possibilities for not receiving\nstaking rewards. The table below can be used to troubleshoot why you might not be receiving staking\nrewards using Polkadot-JS UI."),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Nomination Status"),(0,i.kt)("th",{parentName:"tr",align:"center"},"What's happening?"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Causes"),(0,i.kt)("th",{parentName:"tr",align:"center"},"What to do?"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"Nominated validators are all in waiting status."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Your stake has not been assigned to any of the nominated validators. You cannot earn rewards, nor be slashed in that era."),(0,i.kt)("td",{parentName:"tr",align:"center"},'Waiting validators are not in the active set in the current era and the stake backing them is not used to secure the network. In simple words, NPoS "does not see them".'),(0,i.kt)("td",{parentName:"tr",align:"center"},"Change your nominations. Try to select validators (with reasonable commission) that have high chances to end up in the active set.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"You have some inactive, and some waiting nominations."),(0,i.kt)("td",{parentName:"tr",align:"center"},'Validators shown as "Inactive" in your staking dashboard are still in the active set and are producing blocks in the current era, but your stake has not been assigned to any of them. You will not earn rewards if your stake is not backing an active validator. In this case, you cannot be slashed either.'),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("strong",{parentName:"td"},"Scenario 1:")," You have bonded less than the Minimum Active Bond. ",(0,i.kt)("strong",{parentName:"td"},"Scenario 2:")," You have more than the Minimum Active Bond, but your account is at the tail end of the ",(0,i.kt)("a",{parentName:"td",href:"/docs/learn-staking-advanced#bags-list"},"bags list")," and within your bag there are accounts with less stake than you, in front of you."),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("strong",{parentName:"td"},"Scenario 1:")," Try bonding more funds. ",(0,i.kt)("strong",{parentName:"td"},"Scenario 2:")," Try to put your account in front of the accounts with less stake than you. Instructions available ",(0,i.kt)("a",{parentName:"td",href:"https://support.polkadot.network/support/solutions/articles/65000181018-i-have-more-than-the-minimum-bonded-but-i-m-not-getting-rewards"},"here"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"You have one active validator."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Active validators are producing blocks in the current era, and your stake has been assigned to them. Even if you are not earning rewards, you can be slashed."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Your validator is oversubscribed, meaning that it has more than 512 nominators (ranked by stake), and your stake is less than that of those nominators."),(0,i.kt)("td",{parentName:"tr",align:"center"},"You can try to select validators that are not oversubscribed but in the long term you might want to bond more funds (even more than the Minimum Active Bond) to increase the chance of earning rewards also with oversubscribed validators.")))),(0,i.kt)("admonition",{title:"Join a Nomination Pool",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"By joining a ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pool")," that is active and earning rewards, you\ncan start earning staking rewards with as low as 1 DOT. The nomination pools typically have a\ndedicated pool operator who ensures that the pool's stake is always backing an active validator and\nis receiving rewards.")),(0,i.kt)("admonition",{title:"Bags List & Minimum Active Bond",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"You can find information about why you might not receive staking rewards on\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000170805-why-am-i-not-getting-staking-rewards-"},"this support page"),"\nand ",(0,i.kt)("a",{parentName:"p",href:"https://youtu.be/hIIZRJLrBZA"},"this video tutorial"),".")),(0,i.kt)("h2",{id:"staking-faq"},"Staking FAQ"),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"See\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181959-staking-faq-s"},"this support page"),"\nfor the FAQs about staking.")),(0,i.kt)("h2",{id:"resources"},"Resources"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://medium.com/web3foundation/how-nominated-proof-of-stake-will-work-in-polkadot-377d70c6bd43"},"How Nominated Proof of Stake will work in Polkadot")," -\nBlog post by Web3 Foundation researcher Alfonso Cevallos covering NPoS in Polkadot."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/maintain-guides-secure-validator"},"Validator setup")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://decentradot.com/polkadot-validator-selector/"},"Polkadot validator selector tool")," - A tool\nthat helps nominators find reliable validators that meet quality-control criteria, including\ncommission rates, verified identity, etc.")),(0,i.kt)("hr",null),(0,i.kt)("admonition",{title:"Polkadot-JS Guides",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"If you are an advanced user, see the ",(0,i.kt)("a",{parentName:"p",href:"./learn-guides-staking"},"Polkadot-JS guides about staking"),".")))}m.isMDXComponent=!0},89303:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/reward-risk-fee9f991186d4097ca3d3f0a713f4ad4.png"},4080:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/stash-and-staking-proxy-ea4d09387a4b56d1349ee896427d9f1d.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/25f2bd2a.1e0cb699.js b/assets/js/25f2bd2a.6182a0a2.js similarity index 90% rename from assets/js/25f2bd2a.1e0cb699.js rename to assets/js/25f2bd2a.6182a0a2.js index 42c897085b8d..eb9a8a548234 100644 --- a/assets/js/25f2bd2a.1e0cb699.js +++ b/assets/js/25f2bd2a.6182a0a2.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1213],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var o=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function r(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=o.createContext({}),d=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},p=function(e){var t=d(e.components);return o.createElement(l.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=d(n),h=a,m=u["".concat(l,".").concat(h)]||u[h]||c[h]||i;return n?o.createElement(m,r(r({ref:t},p),{},{components:n})):o.createElement(m,r({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,r=new Array(i);r[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:a,r[1]=s;for(var d=2;d{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>m,frontMatter:()=>s,metadata:()=>d,toc:()=>u});var o=n(87462),a=n(63366),i=(n(67294),n(3905)),r=["components"],s={id:"maintain-guides-how-to-stop-validating",title:"How to Stop Validating",sidebar_label:"How to Stop Validating",description:"Steps on how to stop validating.",keywords:["validating","how to stop validating","validate","chill"],slug:"../maintain-guides-how-to-stop-validating"},l=void 0,d={unversionedId:"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.",source:"@site/../docs/maintain/maintain-guides-how-to-stop-validating.md",sourceDirName:"maintain",slug:"/maintain-guides-how-to-stop-validating",permalink:"/docs/maintain-guides-how-to-stop-validating",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/maintain/maintain-guides-how-to-stop-validating.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710760005,formattedLastUpdatedAt:"Mar 18, 2024",frontMatter:{id:"maintain-guides-how-to-stop-validating",title:"How to Stop Validating",sidebar_label:"How to Stop Validating",description:"Steps on how to stop validating.",keywords:["validating","how to stop validating","validate","chill"],slug:"../maintain-guides-how-to-stop-validating"},sidebar:"docs",previous:{title:"How to Chill",permalink:"/docs/maintain-guides-how-to-chill"},next:{title:"Validator Community Overview",permalink:"/docs/maintain-guides-validator-community"}},p={},u=[{value:"Chill Validator",id:"chill-validator",level:2},{value:"Purge validator session keys",id:"purge-validator-session-keys",level:2},{value:"Unbond your tokens",id:"unbond-your-tokens",level:2}],c={toc:u},h="wrapper";function m(e){var t=e.components,n=(0,a.Z)(e,r);return(0,i.kt)(h,(0,o.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"If you wish to remain a validator or nominator (e.g. you're only stopping for planned downtime or\nserver maintenance), submitting the ",(0,i.kt)("inlineCode",{parentName:"p"},"chill")," extrinsic in the ",(0,i.kt)("inlineCode",{parentName:"p"},"staking")," pallet should suffice. It is\nonly if you wish to unbond funds or reap an account that you should continue with the following."),(0,i.kt)("p",null,"To ensure a smooth stop to validation, make sure you should do the following actions:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Chill your validator"),(0,i.kt)("li",{parentName:"ul"},"Purge validator session keys"),(0,i.kt)("li",{parentName:"ul"},"Unbond your tokens")),(0,i.kt)("p",null,"These can all be done with ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps"},"PolkadotJS Apps")," interface or with\nextrinsics."),(0,i.kt)("h2",{id:"chill-validator"},"Chill Validator"),(0,i.kt)("p",null,"To chill your validator or nominator, call the ",(0,i.kt)("inlineCode",{parentName:"p"},"staking.chill()")," extrinsic. See the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-chill"},"How to Chill")," page for more information. You can also\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced"},"claim your rewards")," at this time."),(0,i.kt)("h2",{id:"purge-validator-session-keys"},"Purge validator session keys"),(0,i.kt)("p",null,"Purging the validator's session keys removes the key reference. This can be done through the\n",(0,i.kt)("inlineCode",{parentName:"p"},"session.purgeKeys()")," extrinsic. The key reference exists on the account that originally called the\n",(0,i.kt)("inlineCode",{parentName:"p"},"session.set_keys()")," extrinsic, which could be the stash or the staking proxy (at the time the keys\nwere set)."),(0,i.kt)("admonition",{title:"Purge keys using the same account that set the keys",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"Make sure to call the session.purge_keys() extrinsic from the same account that set the keys in the\nfirst place in order for the correct reference to be removed. Calling the ",(0,i.kt)("inlineCode",{parentName:"p"},"session.purge_keys()"),"\nfrom the wrong account, although it may succeed, will result in a reference on the other account\nthat ",(0,i.kt)("strong",{parentName:"p"},"cannot")," be removed, and as a result that account cannot be reaped.")),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("strong",{parentName:"p"},"If you skip this step, you will not be able to reap your stash account"),", and you will also need\nto rebond, purge the session keys, unbond, and wait the unbonding period again before being able to\ntransfer your tokens."),(0,i.kt)("p",{parentName:"admonition"},"See ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-guides-staking#bond-your-tokens"},"Unbonding and Rebonding")," for more details.")),(0,i.kt)("h2",{id:"unbond-your-tokens"},"Unbond your tokens"),(0,i.kt)("p",null,"Unbonding your tokens can be done through the ",(0,i.kt)("inlineCode",{parentName:"p"},"Network > Staking > Account actions"),' page in\nPolkadotJS Apps by clicking the corresponding stash account dropdown and selecting "Unbond funds".\nThis can also be done through the ',(0,i.kt)("inlineCode",{parentName:"p"},"staking.unbond()")," extrinsic with the staking proxy account."))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1213],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var o=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function r(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=o.createContext({}),d=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},p=function(e){var t=d(e.components);return o.createElement(l.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=d(n),h=a,m=u["".concat(l,".").concat(h)]||u[h]||c[h]||i;return n?o.createElement(m,r(r({ref:t},p),{},{components:n})):o.createElement(m,r({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,r=new Array(i);r[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:a,r[1]=s;for(var d=2;d{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>m,frontMatter:()=>s,metadata:()=>d,toc:()=>u});var o=n(87462),a=n(63366),i=(n(67294),n(3905)),r=["components"],s={id:"maintain-guides-how-to-stop-validating",title:"How to Stop Validating",sidebar_label:"How to Stop Validating",description:"Steps on how to stop validating.",keywords:["validating","how to stop validating","validate","chill"],slug:"../maintain-guides-how-to-stop-validating"},l=void 0,d={unversionedId:"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.",source:"@site/../docs/maintain/maintain-guides-how-to-stop-validating.md",sourceDirName:"maintain",slug:"/maintain-guides-how-to-stop-validating",permalink:"/docs/maintain-guides-how-to-stop-validating",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/maintain/maintain-guides-how-to-stop-validating.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"maintain-guides-how-to-stop-validating",title:"How to Stop Validating",sidebar_label:"How to Stop Validating",description:"Steps on how to stop validating.",keywords:["validating","how to stop validating","validate","chill"],slug:"../maintain-guides-how-to-stop-validating"},sidebar:"docs",previous:{title:"How to Chill",permalink:"/docs/maintain-guides-how-to-chill"},next:{title:"Validator Community Overview",permalink:"/docs/maintain-guides-validator-community"}},p={},u=[{value:"Chill Validator",id:"chill-validator",level:2},{value:"Purge validator session keys",id:"purge-validator-session-keys",level:2},{value:"Unbond your tokens",id:"unbond-your-tokens",level:2}],c={toc:u},h="wrapper";function m(e){var t=e.components,n=(0,a.Z)(e,r);return(0,i.kt)(h,(0,o.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"If you wish to remain a validator or nominator (e.g. you're only stopping for planned downtime or\nserver maintenance), submitting the ",(0,i.kt)("inlineCode",{parentName:"p"},"chill")," extrinsic in the ",(0,i.kt)("inlineCode",{parentName:"p"},"staking")," pallet should suffice. It is\nonly if you wish to unbond funds or reap an account that you should continue with the following."),(0,i.kt)("p",null,"To ensure a smooth stop to validation, make sure you should do the following actions:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Chill your validator"),(0,i.kt)("li",{parentName:"ul"},"Purge validator session keys"),(0,i.kt)("li",{parentName:"ul"},"Unbond your tokens")),(0,i.kt)("p",null,"These can all be done with ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps"},"PolkadotJS Apps")," interface or with\nextrinsics."),(0,i.kt)("h2",{id:"chill-validator"},"Chill Validator"),(0,i.kt)("p",null,"To chill your validator or nominator, call the ",(0,i.kt)("inlineCode",{parentName:"p"},"staking.chill()")," extrinsic. See the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-chill"},"How to Chill")," page for more information. You can also\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced"},"claim your rewards")," at this time."),(0,i.kt)("h2",{id:"purge-validator-session-keys"},"Purge validator session keys"),(0,i.kt)("p",null,"Purging the validator's session keys removes the key reference. This can be done through the\n",(0,i.kt)("inlineCode",{parentName:"p"},"session.purgeKeys()")," extrinsic. The key reference exists on the account that originally called the\n",(0,i.kt)("inlineCode",{parentName:"p"},"session.set_keys()")," extrinsic, which could be the stash or the staking proxy (at the time the keys\nwere set)."),(0,i.kt)("admonition",{title:"Purge keys using the same account that set the keys",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"Make sure to call the session.purge_keys() extrinsic from the same account that set the keys in the\nfirst place in order for the correct reference to be removed. Calling the ",(0,i.kt)("inlineCode",{parentName:"p"},"session.purge_keys()"),"\nfrom the wrong account, although it may succeed, will result in a reference on the other account\nthat ",(0,i.kt)("strong",{parentName:"p"},"cannot")," be removed, and as a result that account cannot be reaped.")),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("strong",{parentName:"p"},"If you skip this step, you will not be able to reap your stash account"),", and you will also need\nto rebond, purge the session keys, unbond, and wait the unbonding period again before being able to\ntransfer your tokens."),(0,i.kt)("p",{parentName:"admonition"},"See ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-guides-nominator#bond-your-tokens"},"Unbonding and Rebonding")," for more details.")),(0,i.kt)("h2",{id:"unbond-your-tokens"},"Unbond your tokens"),(0,i.kt)("p",null,"Unbonding your tokens can be done through the ",(0,i.kt)("inlineCode",{parentName:"p"},"Network > Staking > Account actions"),' page in\nPolkadotJS Apps by clicking the corresponding stash account dropdown and selecting "Unbond funds".\nThis can also be done through the ',(0,i.kt)("inlineCode",{parentName:"p"},"staking.unbond()")," extrinsic with the staking proxy account."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2be0d940.2b1d134e.js b/assets/js/2be0d940.2b1d134e.js deleted file mode 100644 index a71943cad937..000000000000 --- a/assets/js/2be0d940.2b1d134e.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[2914],{47940:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var i=n(74165),a=n(15861),o=n(67294),s=n(87152),r=n(14741),d=n(67425);function l(t,e,n){return u.apply(this,arguments)}function u(){return(u=(0,a.Z)((0,i.Z)().mark((function t(e,n,a){var o,d,l,u,p;return(0,i.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:o=void 0,d=void 0,t.t0=e,t.next="polkadot"===t.t0?5:"kusama"===t.t0?7:"statemine"===t.t0?9:"statemint"===t.t0?11:13;break;case 5:return o="wss://rpc.polkadot.io",t.abrupt("break",14);case 7:return o="wss://kusama-rpc.polkadot.io/",t.abrupt("break",14);case 9:return o="wss://statemine-rpc.polkadot.io/",t.abrupt("break",14);case 11:return o="wss://statemint-rpc.polkadot.io/",t.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==o){t.next=18;break}return t.abrupt("return");case 18:return l=new s.U(o),t.next=21,r.G.create({provider:l});case 21:u=t.sent,(p=n.split(".")).forEach((function(t){t in u&&(u=u[t])})),t.t1=p[0],t.next="consts"===t.t1?27:"query"===t.t1?29:34;break;case 27:return d=u.toString(),t.abrupt("break",35);case 29:return t.next=31,u();case 31:return d=(d=t.sent).toString(),t.abrupt("break",35);case 34:console.log("Unknown path prefix ("+p[0]+") in "+n);case 35:return t.abrupt("return",d);case 36:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function p(t,e,n,i){switch(e){case"humanReadable":(0,d.HumanReadable)(t,n,i);break;case"precise":(0,d.Precise)(t,n,i);break;case"blocksToDays":(0,d.BlocksToDays)(t,i);break;case"erasToDays":(0,d.ErasToDays)(t,i,n);break;case"percentage":(0,d.Percentage)(t,i);break;case"permillToPercent":(0,d.PermillToPercent)(t,i);break;case"arrayLength":(0,d.ArrayLength)(t,i);break;default:return void console.log("Ignoring unknown filter type")}}const c=function(t){var e=t.network,n=t.path,s=t.defaultValue,r=t.filter,d=void 0===r?void 0:r,u=(0,o.useState)(""),c=u[0],h=u[1];return e=e.toLowerCase(),(0,o.useEffect)((function(){void 0!==d?p(s.toString(),d,e,h):h(s.toString());var t=void 0;switch(e){case"polkadot":t="wss://rpc.polkadot.io";break;case"kusama":t="wss://kusama-rpc.polkadot.io/";break;case"statemine":t="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":t="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+e)}if(void 0===t)console.log("Failed to connect to a valid websocket, applying default");else{var o=function(){var t=(0,a.Z)((0,i.Z)().mark((function t(){var a;return(0,i.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,l(e,n,h);case 2:if(void 0!==(a=t.sent)){t.next=7;break}return t.abrupt("return");case 7:void 0!==d?p(a,d,e,h):h(a);case 8:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}();try{o()}catch(r){console.log(r)}}}),[]),c}},67425:t=>{var e="polkadot",n="kusama",i="statemine",a="statemint",o={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};t.exports={HumanReadable:function(t,s,r){var d=void 0;if(s===e||s===a)d=3;else{if(s!==n&&s!==i)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");d=6}t=parseFloat(t),r((t=Number.isInteger(t/o[s].precision)?t/o[s].precision+" "+o[s].symbol:(t/o[s].precision).toFixed(d)+" "+o[s].symbol).toString())},Precise:function(t,e,n){n(t=(t=parseFloat(t))/o[e].precision+" "+o[e].symbol)},BlocksToDays:function(t,e){e((t=6*t/86400).toString())},ErasToDays:function(t,o,s){var r=void 0;if(s===e||s===a)r=1;else{if(s!==n&&s!==i)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");r=4}o((t/=r).toString())},Percentage:function(t,e){e((t/=1e7).toString())},PermillToPercent:function(t,e){e((t/=1e4).toString())},ArrayLength:function(t,e){e((t=t.split(",").length).toString())}}},77078:(t,e,n)=>{"use strict";n.r(e),n.d(e,{assets:()=>p,contentTitle:()=>l,default:()=>g,frontMatter:()=>d,metadata:()=>u,toc:()=>c});var i=n(87462),a=n(63366),o=(n(67294),n(3905)),s=n(47940),r=["components"],d={id:"learn-guides-identity",title:"Polkadot-JS Guides about Identity",sidebar_label:"Identity Guides",description:"Polkadot-JS Guides about Identity.",keywords:["registrar","identity","sub-identity","polkadot-js"],slug:"../learn-guides-identity"},l=void 0,u={unversionedId:"learn/learn-guides-identity",id:"learn/learn-guides-identity",title:"Polkadot-JS Guides about Identity",description:"Polkadot-JS Guides about Identity.",source:"@site/../docs/learn/learn-guides-identity.md",sourceDirName:"learn",slug:"/learn-guides-identity",permalink:"/docs/learn-guides-identity",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-identity.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710309813,formattedLastUpdatedAt:"Mar 13, 2024",frontMatter:{id:"learn-guides-identity",title:"Polkadot-JS Guides about Identity",sidebar_label:"Identity Guides",description:"Polkadot-JS Guides about Identity.",keywords:["registrar","identity","sub-identity","polkadot-js"],slug:"../learn-guides-identity"},sidebar:"docs",previous:{title:"Bounty Guides",permalink:"/docs/learn-guides-bounties"},next:{title:"Ledger Guides",permalink:"/docs/learn-guides-ledger"}},p={},c=[{value:"Setting an Identity",id:"setting-an-identity",level:2},{value:"Format Caveat",id:"format-caveat",level:3},{value:"Request Judgement",id:"request-judgement",level:2},{value:"Clearing and Killing an Identity",id:"clearing-and-killing-an-identity",level:2},{value:"Setting Sub-Identities",id:"setting-sub-identities",level:2},{value:"Setting Sub-Identity (Sub-ID) for your Ledger Account",id:"setting-sub-identity-sub-id-for-your-ledger-account",level:3},{value:"Registrars",id:"registrars",level:2},{value:"Becoming a Registrar",id:"becoming-a-registrar",level:3}],h={toc:c},m="wrapper";function g(t){var e=t.components,d=(0,a.Z)(t,r);return(0,o.kt)(m,(0,i.Z)({},h,d,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This is an advanced guide that is relevant for entities that would like to become registrars or\nwould like to set sub-identities to an existing account with an identity. See\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-identity"},"this page")," to learn about how to set an identity and have it verified."),(0,o.kt)("h2",{id:"setting-an-identity"},"Setting an Identity"),(0,o.kt)("p",null,"Users can set an identity by registering through default fields such as legal name, display name,\nwebsite, Twitter handle, Riot handle, etc. along with some extra, custom fields for which they would\nlike attestations (see ",(0,o.kt)("a",{parentName:"p",href:"#judgements"},"Judgements"),")."),(0,o.kt)("admonition",{title:"Instructions for setting and clearing Identities",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"The procedure to set and clear identities is explained in detail in this support article -\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181981-how-to-set-and-clear-an-identity"},"How to set and clear an Identity"))),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"The Ledger app on ",(0,o.kt)("strong",{parentName:"p"},"Nano S")," doesn't support the extrinsic for setting identity. As a workaround,\ncreate a primary identity with an on-chain account and then using that primary identity, assign a\n",(0,o.kt)("a",{parentName:"p",href:"#sub-accounts"},"sub-identity")," to the Ledger stash.")),(0,o.kt)("h3",{id:"format-caveat"},"Format Caveat"),(0,o.kt)("p",null,"Please note the following caveat: because the fields support different formats, from raw bytes to\nvarious hashes, a UI has no way of telling how to encode a given field it encounters. The\nPolkadot-JS UI currently encodes the raw bytes it encounters as UTF8 strings, which makes these\nvalues readable on-screen. However, given that there are no restrictions on the values that can be\nplaced into these fields, a different UI may interpret them as, for example, IPFS hashes or encoded\nbitmaps. This means any field stored as raw bytes will become unreadable by that specific UI. As\nfield standards crystallize, things will become easier to use but for now, every custom\nimplementation of displaying user information will likely have to make a conscious decision on the\napproach to take, or support multiple formats and then attempt multiple encodings until the output\nmakes sense."),(0,o.kt)("h2",{id:"request-judgement"},"Request Judgement"),(0,o.kt)("admonition",{title:"Instructions for requesting and cancelling Identity judgments",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"The procedure to request and cancel identity judgments is explained in detail in this\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181990-how-to-request-and-cancel-identity-judgement"},"support article"))),(0,o.kt)("p",null,"To be judged after submitting your identity information, go to the\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Extrinsics tab in the Polkadot-JS UI")," and select the\n",(0,o.kt)("inlineCode",{parentName:"p"},"identity")," pallet, then ",(0,o.kt)("inlineCode",{parentName:"p"},"requestJudgement"),". For the ",(0,o.kt)("inlineCode",{parentName:"p"},"reg_index")," put the index of the registrar you\nwant to be judged by, and for the ",(0,o.kt)("inlineCode",{parentName:"p"},"max_fee")," put the maximum you're willing to pay for these\nconfirmations."),(0,o.kt)("p",null,"If you don't know which registrar to pick, first check the available registrars by going to\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/chainstate"},"Chain State tab in the Polkadot-JS UI")," and selecting\n",(0,o.kt)("inlineCode",{parentName:"p"},"identity.registrars()")," to get the full list."),(0,o.kt)("p",null,"To find out how to contact the registrar after the application for judgement or to learn who they\nare, you can check their identity by adding them to your Address Book. Their identity will be\nautomatically loaded."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Chevdor is registrar #1",src:n(65494).Z,width:"579",height:"217"})),(0,o.kt)("admonition",{title:"Requesting judgement through Web3 Foundation Registrar",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"If you requested judgement for your on-chain identity through the Web3 Foundation Registrar (i.e.\nRegistrar #0) you will need to complete a few additional tasks. For more information visit\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000179747-how-to-use-the-w3f-registrar-page"},"this support article"),".")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"The set identity calls go on-chain. Hence, the contact information is available publicly, for both\nlegitimate entities, like registrars or validators, but also scammers who might impersonate them.\nThe strings in the identity fields are good candidates for homograph attacks, as someone could list\na fraudulent website (web3.f0undation instead of web3.foundation for example) and still get verified\nby the registrar (if the checks are automated)!"),(0,o.kt)("p",{parentName:"admonition"},"In a decentralized network, one should be cautious making transactions with accounts solely based on\ntheir identity. If an account on-chain claims to be of Web3 Foundation, it is wise to verify its\nauthenticity by checking directly with Web3 Foundation or examining the established history of that\naccount on-chain.")),(0,o.kt)("h2",{id:"clearing-and-killing-an-identity"},"Clearing and Killing an Identity"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},'Visit the section "Clear an Identity" on\n',(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181981"},"this support article")," for\nguidelines about clearing identities.")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Clearing:")," Users can clear their identity information and have their deposit returned. Clearing\nan identity also clears all sub accounts and returns their deposits."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Killing:")," The Council can kill an identity that it deems erroneous. This results in a slash of\nthe deposit."),(0,o.kt)("h2",{id:"setting-sub-identities"},"Setting Sub-Identities"),(0,o.kt)("p",null,"To set up sub-identities with Polkadot-JS see the\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181991-how-to-set-identities-for-sub-accounts"},"how to set sub-identities"),"\nsupport article and this ",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=0Yh1JYg3ZKU"},"video tutorial"),"."),(0,o.kt)("h3",{id:"setting-sub-identity-sub-id-for-your-ledger-account"},"Setting Sub-Identity (Sub-ID) for your Ledger Account"),(0,o.kt)("p",null,"Setting an Identity is not possible on Ledger app yet, but as a workaround, you can\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-identity#setting-an-identity"},"set the identity for an on-chain account ")," and then\nuse it to set a sub-identity to your Ledger account."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Go to ",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"https://polkadot.js.org/apps/#/accounts"),". Click on the three vertical dots correponding to\nthe account to which you already set identity. You should see an option to set onchain\nsub-identities. Click on it."),(0,o.kt)("p",{parentName:"li"},(0,o.kt)("img",{alt:"Add sub-identity in PolkadotJS",src:n(6865).Z,width:"520",height:"338"}))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"In the pop-up window, select your Ledger account from the dropdown and enter text in sub name\nfield. Then, click on set subs button.\n",(0,o.kt)("img",{alt:"Set sub-identity in PolkadotJS",src:n(34440).Z,width:"2155",height:"554"}))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Sign and submit the transaction from the parent account with the identity"))),(0,o.kt)("p",null,"You should now see the sub-identity displayed on-chain. You need to be aware that\n",(0,o.kt)(s.Z,{network:"kusama",path:"consts.identity.basicDeposit",defaultValue:33333e6,filter:"humanReadable",mdxType:"RPC"}),"\n","\nis reserved for setting identity and\n",(0,o.kt)(s.Z,{network:"kusama",path:"consts.identity.subAccountDeposit",defaultValue:6666e6,filter:"humanReadable",mdxType:"RPC"}),"\n","\nfor each sub-identity. This reserved account balance is freed once you\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-identity#clearing-and-killing-an-identity"},"clear the identities")," on the account."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Sub-identity example",src:n(31495).Z,width:"370",height:"554"})),(0,o.kt)("h2",{id:"registrars"},"Registrars"),(0,o.kt)("h3",{id:"becoming-a-registrar"},"Becoming a Registrar"),(0,o.kt)("p",null,"To become a registrar, submit a pre-image and proposal on\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-guides-polkadot-opengov"},"OpenGov"),", then wait for people to vote on it. For best\nresults, write a post about your identity and intentions beforehand, and once the proposal is in the\nqueue ask people to endorse it so that it gets ahead in the referendum queue."),(0,o.kt)("p",null,"Here's how to submit a proposal to become a registrar:"),(0,o.kt)("p",null,'Go to the Democracy tab, select "Submit preimage", and input the information for this motion -\nnotably which account you\'re nominating to be a registrar in the ',(0,o.kt)("inlineCode",{parentName:"p"},"identity.setRegistrar")," function."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Setting a registrar",src:n(59097).Z,width:"841",height:"417"})),(0,o.kt)("p",null,"Copy the preimage hash. In the above image, that's\n",(0,o.kt)("inlineCode",{parentName:"p"},"0x90a1b2f648fc4eaff4f236b9af9ead77c89ecac953225c5fafb069d27b7131b7"),". Submit the preimage by signing\na transaction."),(0,o.kt)("p",null,'Next, select "Submit Proposal" and enter the previously copied preimage hash. The ',(0,o.kt)("inlineCode",{parentName:"p"},"locked balance"),"\nfield needs to be at least\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.identity.basicDeposit",defaultValue:20258e7,filter:"humanReadable",mdxType:"RPC"}),".\n","\nYou can find out the minimum by querying the chain state under\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/chainstate"},"Chain State")," -> Constants -> democracy ->\nminimumDeposit."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Submitting a proposal",src:n(45208).Z,width:"852",height:"337"})),(0,o.kt)("p",null,"At this point, DOT holders can endorse the motion. With enough endorsements, the motion will become\na referendum, which is then voted on. If it passes, users will be able to request judgement from\nthis registrar."))}g.isMDXComponent=!0},59097:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=n.p+"assets/images/12-0b101bf170ff7602551199f625c54b7d.jpg"},45208:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=n.p+"assets/images/13-df6ee832e734da72fd9461f4446ea3b9.jpg"},65494:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=n.p+"assets/images/16-95dc969648d23cdfdd68bf04135818bb.jpg"},6865:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=n.p+"assets/images/sub-id-1-18df099d5c97fdff246815ad91922e32.png"},34440:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=n.p+"assets/images/sub-id-2-40b39041ca30296d805003d186f66763.png"},31495:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const i=n.p+"assets/images/sub-id-3-a650cce50e6bfef97c03ebd7b463419c.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/2be0d940.908d07d4.js b/assets/js/2be0d940.908d07d4.js new file mode 100644 index 000000000000..1b86f3200b6f --- /dev/null +++ b/assets/js/2be0d940.908d07d4.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[2914],{47940:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var a=n(74165),i=n(15861),o=n(67294),s=n(87152),r=n(14741),d=n(67425);function l(t,e,n){return u.apply(this,arguments)}function u(){return(u=(0,i.Z)((0,a.Z)().mark((function t(e,n,i){var o,d,l,u,p;return(0,a.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:o=void 0,d=void 0,t.t0=e,t.next="polkadot"===t.t0?5:"kusama"===t.t0?7:"statemine"===t.t0?9:"statemint"===t.t0?11:13;break;case 5:return o="wss://rpc.polkadot.io",t.abrupt("break",14);case 7:return o="wss://kusama-rpc.polkadot.io/",t.abrupt("break",14);case 9:return o="wss://statemine-rpc.polkadot.io/",t.abrupt("break",14);case 11:return o="wss://statemint-rpc.polkadot.io/",t.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==o){t.next=18;break}return t.abrupt("return");case 18:return l=new s.U(o),t.next=21,r.G.create({provider:l});case 21:u=t.sent,(p=n.split(".")).forEach((function(t){t in u&&(u=u[t])})),t.t1=p[0],t.next="consts"===t.t1?27:"query"===t.t1?29:34;break;case 27:return d=u.toString(),t.abrupt("break",35);case 29:return t.next=31,u();case 31:return d=(d=t.sent).toString(),t.abrupt("break",35);case 34:console.log("Unknown path prefix ("+p[0]+") in "+n);case 35:return t.abrupt("return",d);case 36:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function p(t,e,n,a){switch(e){case"humanReadable":(0,d.HumanReadable)(t,n,a);break;case"precise":(0,d.Precise)(t,n,a);break;case"blocksToDays":(0,d.BlocksToDays)(t,a);break;case"erasToDays":(0,d.ErasToDays)(t,a,n);break;case"percentage":(0,d.Percentage)(t,a);break;case"permillToPercent":(0,d.PermillToPercent)(t,a);break;case"arrayLength":(0,d.ArrayLength)(t,a);break;default:return void console.log("Ignoring unknown filter type")}}const c=function(t){var e=t.network,n=t.path,s=t.defaultValue,r=t.filter,d=void 0===r?void 0:r,u=(0,o.useState)(""),c=u[0],h=u[1];return e=e.toLowerCase(),(0,o.useEffect)((function(){void 0!==d?p(s.toString(),d,e,h):h(s.toString());var t=void 0;switch(e){case"polkadot":t="wss://rpc.polkadot.io";break;case"kusama":t="wss://kusama-rpc.polkadot.io/";break;case"statemine":t="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":t="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+e)}if(void 0===t)console.log("Failed to connect to a valid websocket, applying default");else{var o=function(){var t=(0,i.Z)((0,a.Z)().mark((function t(){var i;return(0,a.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,l(e,n,h);case 2:if(void 0!==(i=t.sent)){t.next=7;break}return t.abrupt("return");case 7:void 0!==d?p(i,d,e,h):h(i);case 8:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}();try{o()}catch(r){console.log(r)}}}),[]),c}},67425:t=>{var e="polkadot",n="kusama",a="statemine",i="statemint",o={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};t.exports={HumanReadable:function(t,s,r){var d=void 0;if(s===e||s===i)d=3;else{if(s!==n&&s!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");d=6}t=parseFloat(t),r((t=Number.isInteger(t/o[s].precision)?t/o[s].precision+" "+o[s].symbol:(t/o[s].precision).toFixed(d)+" "+o[s].symbol).toString())},Precise:function(t,e,n){n(t=(t=parseFloat(t))/o[e].precision+" "+o[e].symbol)},BlocksToDays:function(t,e){e((t=6*t/86400).toString())},ErasToDays:function(t,o,s){var r=void 0;if(s===e||s===i)r=1;else{if(s!==n&&s!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");r=4}o((t/=r).toString())},Percentage:function(t,e){e((t/=1e7).toString())},PermillToPercent:function(t,e){e((t/=1e4).toString())},ArrayLength:function(t,e){e((t=t.split(",").length).toString())}}},77078:(t,e,n)=>{"use strict";n.r(e),n.d(e,{assets:()=>p,contentTitle:()=>l,default:()=>g,frontMatter:()=>d,metadata:()=>u,toc:()=>c});var a=n(87462),i=n(63366),o=(n(67294),n(3905)),s=n(47940),r=["components"],d={id:"learn-guides-identity",title:"Polkadot-JS Guides about Identity",sidebar_label:"Identity Guides",description:"Polkadot-JS Guides about Identity.",keywords:["registrar","identity","sub-identity","polkadot-js"],slug:"../learn-guides-identity"},l=void 0,u={unversionedId:"learn/learn-guides-identity",id:"learn/learn-guides-identity",title:"Polkadot-JS Guides about Identity",description:"Polkadot-JS Guides about Identity.",source:"@site/../docs/learn/learn-guides-identity.md",sourceDirName:"learn",slug:"/learn-guides-identity",permalink:"/docs/learn-guides-identity",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-identity.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-identity",title:"Polkadot-JS Guides about Identity",sidebar_label:"Identity Guides",description:"Polkadot-JS Guides about Identity.",keywords:["registrar","identity","sub-identity","polkadot-js"],slug:"../learn-guides-identity"},sidebar:"docs",previous:{title:"Bounty Guides",permalink:"/docs/learn-guides-bounties"},next:{title:"Ledger Guides",permalink:"/docs/learn-guides-ledger"}},p={},c=[{value:"Setting an Identity",id:"setting-an-identity",level:2},{value:"Format Caveat",id:"format-caveat",level:3},{value:"Request Judgement",id:"request-judgement",level:2},{value:"Clearing and Killing an Identity",id:"clearing-and-killing-an-identity",level:2},{value:"Setting Sub-Identities",id:"setting-sub-identities",level:2},{value:"Setting Sub-Identity (Sub-ID) for your Ledger Account",id:"setting-sub-identity-sub-id-for-your-ledger-account",level:3},{value:"Registrars",id:"registrars",level:2},{value:"Becoming a Registrar",id:"becoming-a-registrar",level:3}],h={toc:c},m="wrapper";function g(t){var e=t.components,d=(0,i.Z)(t,r);return(0,o.kt)(m,(0,a.Z)({},h,d,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("div",{className:"sticky",style:{zIndex:1}},(0,o.kt)("br",null),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,o.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,o.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,o.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,o.kt)("p",null,"This is an advanced guide that is relevant for entities that would like to become registrars or\nwould like to set sub-identities to an existing account with an identity. See\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-identity"},"this page")," to learn about how to set an identity and have it verified."),(0,o.kt)("h2",{id:"setting-an-identity"},"Setting an Identity"),(0,o.kt)("p",null,"Users can set an identity by registering through default fields such as legal name, display name,\nwebsite, Twitter handle, Riot handle, etc. along with some extra, custom fields for which they would\nlike attestations (see ",(0,o.kt)("a",{parentName:"p",href:"#judgements"},"Judgements"),")."),(0,o.kt)("admonition",{title:"Instructions for setting and clearing Identities",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"The procedure to set and clear identities is explained in detail in this support article -\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181981-how-to-set-and-clear-an-identity"},"How to set and clear an Identity"))),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"The Ledger app on ",(0,o.kt)("strong",{parentName:"p"},"Nano S")," doesn't support the extrinsic for setting identity. As a workaround,\ncreate a primary identity with an on-chain account and then using that primary identity, assign a\n",(0,o.kt)("a",{parentName:"p",href:"#sub-accounts"},"sub-identity")," to the Ledger stash.")),(0,o.kt)("h3",{id:"format-caveat"},"Format Caveat"),(0,o.kt)("p",null,"Please note the following caveat: because the fields support different formats, from raw bytes to\nvarious hashes, a UI has no way of telling how to encode a given field it encounters. The\nPolkadot-JS UI currently encodes the raw bytes it encounters as UTF8 strings, which makes these\nvalues readable on-screen. However, given that there are no restrictions on the values that can be\nplaced into these fields, a different UI may interpret them as, for example, IPFS hashes or encoded\nbitmaps. This means any field stored as raw bytes will become unreadable by that specific UI. As\nfield standards crystallize, things will become easier to use but for now, every custom\nimplementation of displaying user information will likely have to make a conscious decision on the\napproach to take, or support multiple formats and then attempt multiple encodings until the output\nmakes sense."),(0,o.kt)("h2",{id:"request-judgement"},"Request Judgement"),(0,o.kt)("admonition",{title:"Instructions for requesting and cancelling Identity judgments",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"The procedure to request and cancel identity judgments is explained in detail in this\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181990-how-to-request-and-cancel-identity-judgement"},"support article"))),(0,o.kt)("p",null,"To be judged after submitting your identity information, go to the\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Extrinsics tab in the Polkadot-JS UI")," and select the\n",(0,o.kt)("inlineCode",{parentName:"p"},"identity")," pallet, then ",(0,o.kt)("inlineCode",{parentName:"p"},"requestJudgement"),". For the ",(0,o.kt)("inlineCode",{parentName:"p"},"reg_index")," put the index of the registrar you\nwant to be judged by, and for the ",(0,o.kt)("inlineCode",{parentName:"p"},"max_fee")," put the maximum you're willing to pay for these\nconfirmations."),(0,o.kt)("p",null,"If you don't know which registrar to pick, first check the available registrars by going to\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/chainstate"},"Chain State tab in the Polkadot-JS UI")," and selecting\n",(0,o.kt)("inlineCode",{parentName:"p"},"identity.registrars()")," to get the full list."),(0,o.kt)("p",null,"To find out how to contact the registrar after the application for judgement or to learn who they\nare, you can check their identity by adding them to your Address Book. Their identity will be\nautomatically loaded."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Chevdor is registrar #1",src:n(65494).Z,width:"579",height:"217"})),(0,o.kt)("admonition",{title:"Requesting judgement through Web3 Foundation Registrar",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"If you requested judgement for your on-chain identity through the Web3 Foundation Registrar (i.e.\nRegistrar #0) you will need to complete a few additional tasks. For more information visit\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000179747-how-to-use-the-w3f-registrar-page"},"this support article"),".")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"The set identity calls go on-chain. Hence, the contact information is available publicly, for both\nlegitimate entities, like registrars or validators, but also scammers who might impersonate them.\nThe strings in the identity fields are good candidates for homograph attacks, as someone could list\na fraudulent website (web3.f0undation instead of web3.foundation for example) and still get verified\nby the registrar (if the checks are automated)!"),(0,o.kt)("p",{parentName:"admonition"},"In a decentralized network, one should be cautious making transactions with accounts solely based on\ntheir identity. If an account on-chain claims to be of Web3 Foundation, it is wise to verify its\nauthenticity by checking directly with Web3 Foundation or examining the established history of that\naccount on-chain.")),(0,o.kt)("h2",{id:"clearing-and-killing-an-identity"},"Clearing and Killing an Identity"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},'Visit the section "Clear an Identity" on\n',(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181981"},"this support article")," for\nguidelines about clearing identities.")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Clearing:")," Users can clear their identity information and have their deposit returned. Clearing\nan identity also clears all sub accounts and returns their deposits."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Killing:")," The Council can kill an identity that it deems erroneous. This results in a slash of\nthe deposit."),(0,o.kt)("h2",{id:"setting-sub-identities"},"Setting Sub-Identities"),(0,o.kt)("p",null,"To set up sub-identities with Polkadot-JS see the\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181991-how-to-set-identities-for-sub-accounts"},"how to set sub-identities"),"\nsupport article and this ",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=0Yh1JYg3ZKU"},"video tutorial"),"."),(0,o.kt)("h3",{id:"setting-sub-identity-sub-id-for-your-ledger-account"},"Setting Sub-Identity (Sub-ID) for your Ledger Account"),(0,o.kt)("p",null,"Setting an Identity is not possible on Ledger app yet, but as a workaround, you can\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-identity#setting-an-identity"},"set the identity for an on-chain account ")," and then\nuse it to set a sub-identity to your Ledger account."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Go to ",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"https://polkadot.js.org/apps/#/accounts"),". Click on the three vertical dots correponding to\nthe account to which you already set identity. You should see an option to set onchain\nsub-identities. Click on it."),(0,o.kt)("p",{parentName:"li"},(0,o.kt)("img",{alt:"Add sub-identity in PolkadotJS",src:n(6865).Z,width:"520",height:"338"}))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"In the pop-up window, select your Ledger account from the dropdown and enter text in sub name\nfield. Then, click on set subs button.\n",(0,o.kt)("img",{alt:"Set sub-identity in PolkadotJS",src:n(34440).Z,width:"2155",height:"554"}))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Sign and submit the transaction from the parent account with the identity"))),(0,o.kt)("p",null,"You should now see the sub-identity displayed on-chain. You need to be aware that\n",(0,o.kt)(s.Z,{network:"kusama",path:"consts.identity.basicDeposit",defaultValue:33333e6,filter:"humanReadable",mdxType:"RPC"}),"\n","\nis reserved for setting identity and\n",(0,o.kt)(s.Z,{network:"kusama",path:"consts.identity.subAccountDeposit",defaultValue:6666e6,filter:"humanReadable",mdxType:"RPC"}),"\n","\nfor each sub-identity. This reserved account balance is freed once you\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-identity#clearing-and-killing-an-identity"},"clear the identities")," on the account."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Sub-identity example",src:n(31495).Z,width:"370",height:"554"})),(0,o.kt)("h2",{id:"registrars"},"Registrars"),(0,o.kt)("h3",{id:"becoming-a-registrar"},"Becoming a Registrar"),(0,o.kt)("p",null,"To become a registrar, submit a pre-image and proposal on\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-guides-polkadot-opengov"},"OpenGov"),", then wait for people to vote on it. For best\nresults, write a post about your identity and intentions beforehand, and once the proposal is in the\nqueue ask people to endorse it so that it gets ahead in the referendum queue."),(0,o.kt)("p",null,"Here's how to submit a proposal to become a registrar:"),(0,o.kt)("p",null,'Go to the Democracy tab, select "Submit preimage", and input the information for this motion -\nnotably which account you\'re nominating to be a registrar in the ',(0,o.kt)("inlineCode",{parentName:"p"},"identity.setRegistrar")," function."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Setting a registrar",src:n(59097).Z,width:"841",height:"417"})),(0,o.kt)("p",null,"Copy the preimage hash. In the above image, that's\n",(0,o.kt)("inlineCode",{parentName:"p"},"0x90a1b2f648fc4eaff4f236b9af9ead77c89ecac953225c5fafb069d27b7131b7"),". Submit the preimage by signing\na transaction."),(0,o.kt)("p",null,'Next, select "Submit Proposal" and enter the previously copied preimage hash. The ',(0,o.kt)("inlineCode",{parentName:"p"},"locked balance"),"\nfield needs to be at least\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.identity.basicDeposit",defaultValue:20258e7,filter:"humanReadable",mdxType:"RPC"}),".\n","\nYou can find out the minimum by querying the chain state under\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/chainstate"},"Chain State")," -> Constants -> democracy ->\nminimumDeposit."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Submitting a proposal",src:n(45208).Z,width:"852",height:"337"})),(0,o.kt)("p",null,"At this point, DOT holders can endorse the motion. With enough endorsements, the motion will become\na referendum, which is then voted on. If it passes, users will be able to request judgement from\nthis registrar."))}g.isMDXComponent=!0},59097:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const a=n.p+"assets/images/12-0b101bf170ff7602551199f625c54b7d.jpg"},45208:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const a=n.p+"assets/images/13-df6ee832e734da72fd9461f4446ea3b9.jpg"},65494:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const a=n.p+"assets/images/16-95dc969648d23cdfdd68bf04135818bb.jpg"},6865:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const a=n.p+"assets/images/sub-id-1-18df099d5c97fdff246815ad91922e32.png"},34440:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const a=n.p+"assets/images/sub-id-2-40b39041ca30296d805003d186f66763.png"},31495:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const a=n.p+"assets/images/sub-id-3-a650cce50e6bfef97c03ebd7b463419c.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/3184af97.6d92ef3e.js b/assets/js/3184af97.6d92ef3e.js deleted file mode 100644 index 950a42e07d15..000000000000 --- a/assets/js/3184af97.6d92ef3e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1125],{3905:(e,o,t)=>{t.d(o,{Zo:()=>s,kt:()=>m});var n=t(67294);function r(e,o,t){return o in e?Object.defineProperty(e,o,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[o]=t,e}function i(e,o){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);o&&(n=n.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),t.push.apply(t,n)}return t}function a(e){for(var o=1;o=0||(r[t]=e[t]);return r}(e,o);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var c=n.createContext({}),u=function(e){var o=n.useContext(c),t=o;return e&&(t="function"==typeof e?e(o):a(a({},o),e)),t},s=function(e){var o=u(e.components);return n.createElement(c.Provider,{value:o},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var o=e.children;return n.createElement(n.Fragment,{},o)}},h=n.forwardRef((function(e,o){var t=e.components,r=e.mdxType,i=e.originalType,c=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),d=u(t),h=r,m=d["".concat(c,".").concat(h)]||d[h]||p[h]||i;return t?n.createElement(m,a(a({ref:o},s),{},{components:t})):n.createElement(m,a({ref:o},s))}));function m(e,o){var t=arguments,r=o&&o.mdxType;if("string"==typeof e||r){var i=t.length,a=new Array(i);a[0]=h;var l={};for(var c in o)hasOwnProperty.call(o,c)&&(l[c]=o[c]);l.originalType=e,l[d]="string"==typeof e?e:r,a[1]=l;for(var u=2;u{t.r(o),t.d(o,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>l,metadata:()=>u,toc:()=>d});var n=t(87462),r=t(63366),i=(t(67294),t(3905)),a=["components"],l={id:"maintain-guides-how-to-vote-councillor",title:"Voting for Councillors",sidebar_label:"Voting for Councillors",description:"Steps on how to vote for councillors.",keywords:["council","vote","councillors"],slug:"../maintain-guides-how-to-vote-councillor"},c=void 0,u={unversionedId:"maintain/archive/maintain-guides-how-to-vote-councillor",id:"maintain/archive/maintain-guides-how-to-vote-councillor",title:"Voting for Councillors",description:"Steps on how to vote for councillors.",source:"@site/../docs/maintain/archive/maintain-guides-how-to-vote-councillor.md",sourceDirName:"maintain/archive",slug:"/maintain/maintain-guides-how-to-vote-councillor",permalink:"/docs/maintain/maintain-guides-how-to-vote-councillor",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/maintain/archive/maintain-guides-how-to-vote-councillor.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710167319,formattedLastUpdatedAt:"Mar 11, 2024",frontMatter:{id:"maintain-guides-how-to-vote-councillor",title:"Voting for Councillors",sidebar_label:"Voting for Councillors",description:"Steps on how to vote for councillors.",keywords:["council","vote","councillors"],slug:"../maintain-guides-how-to-vote-councillor"},sidebar:"docs",previous:{title:"Join the Council",permalink:"/docs/maintain/maintain-guides-how-to-join-council"}},s={},d=[{value:"Voting for Councillors",id:"voting-for-councillors",level:2},{value:"Removing your Vote",id:"removing-your-vote",level:2}],p={toc:d},h="wrapper";function m(e){var o=e.components,l=(0,r.Z)(e,a);return(0,i.kt)(h,(0,n.Z)({},p,l,{components:o,mdxType:"MDXLayout"}),(0,i.kt)("div",{className:"sticky"},(0,i.kt)("br",null),(0,i.kt)("p",null,"The content on this page is archived. For up-to-date information about governance, see the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},"Polkadot OpenGov page"),".")),(0,i.kt)("p",null,"The council is an elected body of on-chain accounts that are intended to represent the passive\nstakeholders of Polkadot and/or Kusama. The council has two major tasks in governance: proposing\nreferenda and vetoing dangerous or malicious referenda. For more information on the council, see the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn/learn-governance#council"},"governance page"),". This guide will walk you through\nvoting for councillors in the elections."),(0,i.kt)("h2",{id:"voting-for-councillors"},"Voting for Councillors"),(0,i.kt)("p",null,"Voting for councillors requires you to reserve\n20.064 DOT as a base amount and an amount\nof 0.032 DOT per vote. You can then bond\nwhatever amount you wish to put behind your vote. See the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain/maintain-guides-democracy"},"democracy guide")," for more information."),(0,i.kt)("admonition",{title:"Voting and staking locks can overlap",type:"info"},(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},"A user can use staked funds to vote for Councillors (and/or use those funds in referenda)."),(0,i.kt)("li",{parentName:"ul"},"A user is only prohibited from transferring these funds to another account."))),(0,i.kt)("admonition",{type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"If your balance is vesting, you cannot use unvested tokens for this lock. You will have to wait\nuntil you have at least that many ",(0,i.kt)("strong",{parentName:"p"},"free")," tokens to vote.")),(0,i.kt)("p",null,"Like the validator elections, you can approve up to 16 different councillors and your vote will be\nequalized among the chosen group. Unlike validator elections, there is no unbonding period for your\nreserved tokens. Once you remove your vote, your tokens will be liquid again."),(0,i.kt)("admonition",{type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"It is your responsibility not to put your entire balance into the reserved value when you make a\nvote for councillors. It's best to keep ",(0,i.kt)("em",{parentName:"p"},"at least")," enough DOT/KSM to pay for transaction fees.")),(0,i.kt)("p",null,"Go to the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps"},"Polkadot-JS Apps Dashboard"),' and click on the "Council" tab.\nOn the right side of the window there are two blue buttons, click on the one that says "Vote."'),(0,i.kt)("p",null,'Since the council uses approval voting, when you vote you signal which of the candidates you approve\nof and your voted tokens will be equalized among the selected candidates. Select up to 16 council\ncandidates by moving the slider to "Aye" for each one that you want to be elected. When you\'ve made\nthe proper configuration submit your transaction.'),(0,i.kt)("p",null,"You should see your vote appear in the interface immediately after your transaction is included."),(0,i.kt)("h2",{id:"removing-your-vote"},"Removing your Vote"),(0,i.kt)("p",null,"In order to get your reserved tokens back, you will need to remove your vote. Only remove your vote\nwhen you're done participating in elections and you no longer want your reserved tokens to count for\nthe councillors that you approve."),(0,i.kt)("p",null,'Go to the "Governance" > "Council" tab on the\n',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps"},"Polkadot-JS Apps Dashboard"),"."),(0,i.kt)("p",null,'Under the "Council overview" tab, click on "Vote".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"polkadotjs_removeVoter",src:t(30301).Z,width:"1878",height:"361"})),(0,i.kt)("p",null,'Issue the "Unvote all" option.'),(0,i.kt)("p",null,"When the transaction is included in a block you should have your reserved tokens made liquid again\nand your vote will no longer be counting for any councillors in the elections starting in the next\nterm."))}m.isMDXComponent=!0},30301:(e,o,t)=>{t.d(o,{Z:()=>n});const n=t.p+"assets/images/polkadotjs_removeVoter-b66eb203df51ecdb1d926990120aa76b.png"}}]); \ No newline at end of file diff --git a/assets/js/3184af97.a375fcd6.js b/assets/js/3184af97.a375fcd6.js new file mode 100644 index 000000000000..61634ecb18e1 --- /dev/null +++ b/assets/js/3184af97.a375fcd6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1125],{3905:(e,o,t)=>{t.d(o,{Zo:()=>s,kt:()=>m});var n=t(67294);function r(e,o,t){return o in e?Object.defineProperty(e,o,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[o]=t,e}function i(e,o){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);o&&(n=n.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),t.push.apply(t,n)}return t}function a(e){for(var o=1;o=0||(r[t]=e[t]);return r}(e,o);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var c=n.createContext({}),u=function(e){var o=n.useContext(c),t=o;return e&&(t="function"==typeof e?e(o):a(a({},o),e)),t},s=function(e){var o=u(e.components);return n.createElement(c.Provider,{value:o},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var o=e.children;return n.createElement(n.Fragment,{},o)}},h=n.forwardRef((function(e,o){var t=e.components,r=e.mdxType,i=e.originalType,c=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),d=u(t),h=r,m=d["".concat(c,".").concat(h)]||d[h]||p[h]||i;return t?n.createElement(m,a(a({ref:o},s),{},{components:t})):n.createElement(m,a({ref:o},s))}));function m(e,o){var t=arguments,r=o&&o.mdxType;if("string"==typeof e||r){var i=t.length,a=new Array(i);a[0]=h;var l={};for(var c in o)hasOwnProperty.call(o,c)&&(l[c]=o[c]);l.originalType=e,l[d]="string"==typeof e?e:r,a[1]=l;for(var u=2;u{t.r(o),t.d(o,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>l,metadata:()=>u,toc:()=>d});var n=t(87462),r=t(63366),i=(t(67294),t(3905)),a=["components"],l={id:"maintain-guides-how-to-vote-councillor",title:"Voting for Councillors",sidebar_label:"Voting for Councillors",description:"Steps on how to vote for councillors.",keywords:["council","vote","councillors"],slug:"../maintain-guides-how-to-vote-councillor"},c=void 0,u={unversionedId:"maintain/archive/maintain-guides-how-to-vote-councillor",id:"maintain/archive/maintain-guides-how-to-vote-councillor",title:"Voting for Councillors",description:"Steps on how to vote for councillors.",source:"@site/../docs/maintain/archive/maintain-guides-how-to-vote-councillor.md",sourceDirName:"maintain/archive",slug:"/maintain/maintain-guides-how-to-vote-councillor",permalink:"/docs/maintain/maintain-guides-how-to-vote-councillor",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/maintain/archive/maintain-guides-how-to-vote-councillor.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"maintain-guides-how-to-vote-councillor",title:"Voting for Councillors",sidebar_label:"Voting for Councillors",description:"Steps on how to vote for councillors.",keywords:["council","vote","councillors"],slug:"../maintain-guides-how-to-vote-councillor"},sidebar:"docs",previous:{title:"Join the Council",permalink:"/docs/maintain/maintain-guides-how-to-join-council"}},s={},d=[{value:"Voting for Councillors",id:"voting-for-councillors",level:2},{value:"Removing your Vote",id:"removing-your-vote",level:2}],p={toc:d},h="wrapper";function m(e){var o=e.components,l=(0,r.Z)(e,a);return(0,i.kt)(h,(0,n.Z)({},p,l,{components:o,mdxType:"MDXLayout"}),(0,i.kt)("div",{className:"sticky",style:{zIndex:1}},(0,i.kt)("br",null),(0,i.kt)("p",null,"The content on this page is archived. For up-to-date information about governance, see the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},"Polkadot OpenGov page"),".")),(0,i.kt)("p",null,"The council is an elected body of on-chain accounts that are intended to represent the passive\nstakeholders of Polkadot and/or Kusama. The council has two major tasks in governance: proposing\nreferenda and vetoing dangerous or malicious referenda. For more information on the council, see the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn/learn-governance#council"},"governance page"),". This guide will walk you through\nvoting for councillors in the elections."),(0,i.kt)("h2",{id:"voting-for-councillors"},"Voting for Councillors"),(0,i.kt)("p",null,"Voting for councillors requires you to reserve\n20.064 DOT as a base amount and an amount\nof 0.032 DOT per vote. You can then bond\nwhatever amount you wish to put behind your vote. See the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain/maintain-guides-democracy"},"democracy guide")," for more information."),(0,i.kt)("admonition",{title:"Voting and staking locks can overlap",type:"info"},(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},"A user can use staked funds to vote for Councillors (and/or use those funds in referenda)."),(0,i.kt)("li",{parentName:"ul"},"A user is only prohibited from transferring these funds to another account."))),(0,i.kt)("admonition",{type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"If your balance is vesting, you cannot use unvested tokens for this lock. You will have to wait\nuntil you have at least that many ",(0,i.kt)("strong",{parentName:"p"},"free")," tokens to vote.")),(0,i.kt)("p",null,"Like the validator elections, you can approve up to 16 different councillors and your vote will be\nequalized among the chosen group. Unlike validator elections, there is no unbonding period for your\nreserved tokens. Once you remove your vote, your tokens will be liquid again."),(0,i.kt)("admonition",{type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"It is your responsibility not to put your entire balance into the reserved value when you make a\nvote for councillors. It's best to keep ",(0,i.kt)("em",{parentName:"p"},"at least")," enough DOT/KSM to pay for transaction fees.")),(0,i.kt)("p",null,"Go to the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps"},"Polkadot-JS Apps Dashboard"),' and click on the "Council" tab.\nOn the right side of the window there are two blue buttons, click on the one that says "Vote."'),(0,i.kt)("p",null,'Since the council uses approval voting, when you vote you signal which of the candidates you approve\nof and your voted tokens will be equalized among the selected candidates. Select up to 16 council\ncandidates by moving the slider to "Aye" for each one that you want to be elected. When you\'ve made\nthe proper configuration submit your transaction.'),(0,i.kt)("p",null,"You should see your vote appear in the interface immediately after your transaction is included."),(0,i.kt)("h2",{id:"removing-your-vote"},"Removing your Vote"),(0,i.kt)("p",null,"In order to get your reserved tokens back, you will need to remove your vote. Only remove your vote\nwhen you're done participating in elections and you no longer want your reserved tokens to count for\nthe councillors that you approve."),(0,i.kt)("p",null,'Go to the "Governance" > "Council" tab on the\n',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps"},"Polkadot-JS Apps Dashboard"),"."),(0,i.kt)("p",null,'Under the "Council overview" tab, click on "Vote".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"polkadotjs_removeVoter",src:t(30301).Z,width:"1878",height:"361"})),(0,i.kt)("p",null,'Issue the "Unvote all" option.'),(0,i.kt)("p",null,"When the transaction is included in a block you should have your reserved tokens made liquid again\nand your vote will no longer be counting for any councillors in the elections starting in the next\nterm."))}m.isMDXComponent=!0},30301:(e,o,t)=>{t.d(o,{Z:()=>n});const n=t.p+"assets/images/polkadotjs_removeVoter-b66eb203df51ecdb1d926990120aa76b.png"}}]); \ No newline at end of file diff --git a/assets/js/390ca211.02c09bd0.js b/assets/js/390ca211.02c09bd0.js deleted file mode 100644 index 8e5db2ef3f8a..000000000000 --- a/assets/js/390ca211.02c09bd0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9596],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),c=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=c(e.components);return a.createElement(s.Provider,{value:t},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),d=c(n),h=o,m=d["".concat(s,".").concat(h)]||d[h]||p[h]||r;return n?a.createElement(m,l(l({ref:t},u),{},{components:n})):a.createElement(m,l({ref:t},u))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,l=new Array(r);l[0]=h;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[d]="string"==typeof e?e:o,l[1]=i;for(var c=2;c{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var a=n(87462),o=n(63366),r=(n(67294),n(3905)),l=["components"],i={id:"learn-launch",title:"Polkadot Launch Phases",sidebar_label:"Polkadot Launch Phases",description:"Polkadot's Launch Process and its Individual Phases.",keyword:["launch","phases","polkadot","DOT","claim","token sale","redenomination"],slug:"../learn-launch"},s=void 0,c={unversionedId:"learn/archive/learn-launch",id:"learn/archive/learn-launch",title:"Polkadot Launch Phases",description:"Polkadot's Launch Process and its Individual Phases.",source:"@site/../docs/learn/archive/learn-launch.md",sourceDirName:"learn/archive",slug:"/learn/learn-launch",permalink:"/docs/learn/learn-launch",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/archive/learn-launch.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710167319,formattedLastUpdatedAt:"Mar 11, 2024",frontMatter:{id:"learn-launch",title:"Polkadot Launch Phases",sidebar_label:"Polkadot Launch Phases",description:"Polkadot's Launch Process and its Individual Phases.",keyword:["launch","phases","polkadot","DOT","claim","token sale","redenomination"],slug:"../learn-launch"},sidebar:"docs",previous:{title:"Gov1 Treasury",permalink:"/docs/learn/learn-treasury"},next:{title:"Redenomination of DOT",permalink:"/docs/learn/learn-redenomination"}},u={},d=[{value:"The PoA Launch",id:"the-poa-launch",level:2},{value:"Nominated Proof of Stake",id:"nominated-proof-of-stake",level:2},{value:"Governance",id:"governance",level:2},{value:"Removal of Sudo",id:"removal-of-sudo",level:2},{value:"Balance Transfers",id:"balance-transfers",level:2},{value:"Core Functionality",id:"core-functionality",level:2}],p={toc:d},h="wrapper";function m(e){var t=e.components,n=(0,o.Z)(e,l);return(0,r.kt)(h,(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"sticky"},(0,r.kt)("br",null),(0,r.kt)("p",null,"The content on this page is archived.")),(0,r.kt)("p",null,"The Polkadot network has a phased roll-out plan, with important milestones toward decentralization\nmarking each phase. Keep up-to-date with the Polkadot's phased roll-out plan at by viewing the\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.network/launch-roadmap/"},"roadmap")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Current Phase: Post-launch Upgrades")),(0,r.kt)("admonition",{title:"Claims",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"For the most update-to-date information on DOT claims (if you bought your DOTs before Polkadot went\nlive), check out the following claiming resources and tutorials:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000063553-why-do-i-need-to-claim-my-dot-tokens-and-is-there-a-deadline-"},"Why do I need to claim my DOT tokens, and is there a deadline?")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000063667-i-claimed-my-dot-before-polkadot-went-live-but-still-see-zero-balance-"},"I claimed my DOT before Polkadot went live, but still see zero balance!")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000138217-how-to-claim-your-dot-tutorial"},"How to claim your DOT - Tutorial")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000103605-how-do-i-know-my-claim-worked-"},"How do I know my claim worked?")))),(0,r.kt)("h2",{id:"the-poa-launch"},"The PoA Launch"),(0,r.kt)("p",null,"The Genesis block of the Polkadot network was launched on May 26, 2020, as a Proof of Authority\n(PoA) network. Governance was restricted to the single Sudo (super-user) key, which was held by Web3\nFoundation to issue the commands and upgrades necessary to complete the launch process. During this\ntime, validators started joining the network and signaling their intention to participate in\nconsensus."),(0,r.kt)("h2",{id:"nominated-proof-of-stake"},"Nominated Proof of Stake"),(0,r.kt)("p",null,"Once Web3 Foundation was confident in the stability of the network and there was a sufficient number\nof validator intentions, Web3 Foundation used ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/InekMjJpVdo"},"Sudo")," ","\u2014"," a\nsuperuser account with access to governance functions ","\u2014"," to initiate the first validator\nelection. Following this election, the network transitioned from PoA into its second phase,\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"Nominated Proof of Stake (NPoS)"),", on June 18, 2020."),(0,r.kt)("h2",{id:"governance"},"Governance"),(0,r.kt)("p",null,"After the chain had been running well with the validator set, the Sudo key issued a runtime upgrade\nthat enabled the suite of governance modules in Polkadot; namely, the modules to enable a\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn/learn-governance#council"},"Council"),", a\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn/learn-governance#technical-committee"},"Technical Committee"),", and\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn/learn-governance#public-referenda"},"public referenda"),"."),(0,r.kt)("h2",{id:"removal-of-sudo"},"Removal of Sudo"),(0,r.kt)("p",null,"The Sudo module was removed by a runtime upgrade on July 20, 2020, transitioning the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn/learn-governance"},"governance")," of the chain into the hands of the token (DOT) holders."),(0,r.kt)("p",null,"From this point, the network has been entirely in the hands of the token holders and is no longer\nunder control of any centralized authority."),(0,r.kt)("h2",{id:"balance-transfers"},"Balance Transfers"),(0,r.kt)("p",null,"To enable balance transfers, the community made a public proposal for a runtime upgrade that lifted\nthe restriction on balance transfers. Transfer functionality was subsequently enabled on Polkadot at\nblock number 1_205_128 on August 18, 2020, at 16:39 UTC."),(0,r.kt)("h2",{id:"core-functionality"},"Core Functionality"),(0,r.kt)("p",null,"After five years of research and development and a multi-stage launch that began in May 2020,\nPolkadot launch was completed on December 18, 2021, with all auction-winning parachains producing\nblocks on the network."),(0,r.kt)("p",null,"Check out these resources for further information:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://polkadot.network/blog/parachains-are-live-polkadot-launch-is-now-complete/"},"Polkadot Network blog"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/Polkadot/comments/s3yb3d/l_for_polkadot_launch_polkadot_a_to_z/"},"Polkadot A to Z: L for Polkadot Launch"),".")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/390ca211.074fdbce.js b/assets/js/390ca211.074fdbce.js new file mode 100644 index 000000000000..fcd0db51b31a --- /dev/null +++ b/assets/js/390ca211.074fdbce.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9596],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),c=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},d=function(e){var t=c(e.components);return a.createElement(s.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),u=c(n),h=o,m=u["".concat(s,".").concat(h)]||u[h]||p[h]||r;return n?a.createElement(m,l(l({ref:t},d),{},{components:n})):a.createElement(m,l({ref:t},d))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,l=new Array(r);l[0]=h;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[u]="string"==typeof e?e:o,l[1]=i;for(var c=2;c{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>c,toc:()=>u});var a=n(87462),o=n(63366),r=(n(67294),n(3905)),l=["components"],i={id:"learn-launch",title:"Polkadot Launch Phases",sidebar_label:"Polkadot Launch Phases",description:"Polkadot's Launch Process and its Individual Phases.",keyword:["launch","phases","polkadot","DOT","claim","token sale","redenomination"],slug:"../learn-launch"},s=void 0,c={unversionedId:"learn/archive/learn-launch",id:"learn/archive/learn-launch",title:"Polkadot Launch Phases",description:"Polkadot's Launch Process and its Individual Phases.",source:"@site/../docs/learn/archive/learn-launch.md",sourceDirName:"learn/archive",slug:"/learn/learn-launch",permalink:"/docs/learn/learn-launch",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/archive/learn-launch.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-launch",title:"Polkadot Launch Phases",sidebar_label:"Polkadot Launch Phases",description:"Polkadot's Launch Process and its Individual Phases.",keyword:["launch","phases","polkadot","DOT","claim","token sale","redenomination"],slug:"../learn-launch"},sidebar:"docs",previous:{title:"Gov1 Treasury",permalink:"/docs/learn/learn-treasury"},next:{title:"Redenomination of DOT",permalink:"/docs/learn/learn-redenomination"}},d={},u=[{value:"The PoA Launch",id:"the-poa-launch",level:2},{value:"Nominated Proof of Stake",id:"nominated-proof-of-stake",level:2},{value:"Governance",id:"governance",level:2},{value:"Removal of Sudo",id:"removal-of-sudo",level:2},{value:"Balance Transfers",id:"balance-transfers",level:2},{value:"Core Functionality",id:"core-functionality",level:2}],p={toc:u},h="wrapper";function m(e){var t=e.components,n=(0,o.Z)(e,l);return(0,r.kt)(h,(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"sticky",style:{zIndex:1}},(0,r.kt)("br",null),(0,r.kt)("p",null,"The content on this page is archived.")),(0,r.kt)("p",null,"The Polkadot network has a phased roll-out plan, with important milestones toward decentralization\nmarking each phase. Keep up-to-date with the Polkadot's phased roll-out plan at by viewing the\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.network/launch-roadmap/"},"roadmap")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Current Phase: Post-launch Upgrades")),(0,r.kt)("admonition",{title:"Claims",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"For the most update-to-date information on DOT claims (if you bought your DOTs before Polkadot went\nlive), check out the following claiming resources and tutorials:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000063553-why-do-i-need-to-claim-my-dot-tokens-and-is-there-a-deadline-"},"Why do I need to claim my DOT tokens, and is there a deadline?")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000063667-i-claimed-my-dot-before-polkadot-went-live-but-still-see-zero-balance-"},"I claimed my DOT before Polkadot went live, but still see zero balance!")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000138217-how-to-claim-your-dot-tutorial"},"How to claim your DOT - Tutorial")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000103605-how-do-i-know-my-claim-worked-"},"How do I know my claim worked?")))),(0,r.kt)("h2",{id:"the-poa-launch"},"The PoA Launch"),(0,r.kt)("p",null,"The Genesis block of the Polkadot network was launched on May 26, 2020, as a Proof of Authority\n(PoA) network. Governance was restricted to the single Sudo (super-user) key, which was held by Web3\nFoundation to issue the commands and upgrades necessary to complete the launch process. During this\ntime, validators started joining the network and signaling their intention to participate in\nconsensus."),(0,r.kt)("h2",{id:"nominated-proof-of-stake"},"Nominated Proof of Stake"),(0,r.kt)("p",null,"Once Web3 Foundation was confident in the stability of the network and there was a sufficient number\nof validator intentions, Web3 Foundation used ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/InekMjJpVdo"},"Sudo")," ","\u2014"," a\nsuperuser account with access to governance functions ","\u2014"," to initiate the first validator\nelection. Following this election, the network transitioned from PoA into its second phase,\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"Nominated Proof of Stake (NPoS)"),", on June 18, 2020."),(0,r.kt)("h2",{id:"governance"},"Governance"),(0,r.kt)("p",null,"After the chain had been running well with the validator set, the Sudo key issued a runtime upgrade\nthat enabled the suite of governance modules in Polkadot; namely, the modules to enable a\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn/learn-governance#council"},"Council"),", a\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn/learn-governance#technical-committee"},"Technical Committee"),", and\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn/learn-governance#public-referenda"},"public referenda"),"."),(0,r.kt)("h2",{id:"removal-of-sudo"},"Removal of Sudo"),(0,r.kt)("p",null,"The Sudo module was removed by a runtime upgrade on July 20, 2020, transitioning the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn/learn-governance"},"governance")," of the chain into the hands of the token (DOT) holders."),(0,r.kt)("p",null,"From this point, the network has been entirely in the hands of the token holders and is no longer\nunder control of any centralized authority."),(0,r.kt)("h2",{id:"balance-transfers"},"Balance Transfers"),(0,r.kt)("p",null,"To enable balance transfers, the community made a public proposal for a runtime upgrade that lifted\nthe restriction on balance transfers. Transfer functionality was subsequently enabled on Polkadot at\nblock number 1_205_128 on August 18, 2020, at 16:39 UTC."),(0,r.kt)("h2",{id:"core-functionality"},"Core Functionality"),(0,r.kt)("p",null,"After five years of research and development and a multi-stage launch that began in May 2020,\nPolkadot launch was completed on December 18, 2021, with all auction-winning parachains producing\nblocks on the network."),(0,r.kt)("p",null,"Check out these resources for further information:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://polkadot.network/blog/parachains-are-live-polkadot-launch-is-now-complete/"},"Polkadot Network blog"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/Polkadot/comments/s3yb3d/l_for_polkadot_launch_polkadot_a_to_z/"},"Polkadot A to Z: L for Polkadot Launch"),".")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/41b7b3e8.06ab6e7f.js b/assets/js/41b7b3e8.06ab6e7f.js new file mode 100644 index 000000000000..111fc2453bca --- /dev/null +++ b/assets/js/41b7b3e8.06ab6e7f.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[3513],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>p});var n=a(74165),i=a(15861),o=a(67294),s=a(87152),r=a(14741),l=a(67425);function d(e,t,a){return h.apply(this,arguments)}function h(){return(h=(0,i.Z)((0,n.Z)().mark((function e(t,a,i){var o,l,d,h,c;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:o=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return o="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return o="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return o="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return o="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==o){e.next=18;break}return e.abrupt("return");case 18:return d=new s.U(o),e.next=21,r.G.create({provider:d});case 21:h=e.sent,(c=a.split(".")).forEach((function(e){e in h&&(h=h[e])})),e.t1=c[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=h.toString(),e.abrupt("break",35);case 29:return e.next=31,h();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+c[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function c(e,t,a,n){switch(t){case"humanReadable":(0,l.HumanReadable)(e,a,n);break;case"precise":(0,l.Precise)(e,a,n);break;case"blocksToDays":(0,l.BlocksToDays)(e,n);break;case"erasToDays":(0,l.ErasToDays)(e,n,a);break;case"percentage":(0,l.Percentage)(e,n);break;case"permillToPercent":(0,l.PermillToPercent)(e,n);break;case"arrayLength":(0,l.ArrayLength)(e,n);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(e){var t=e.network,a=e.path,s=e.defaultValue,r=e.filter,l=void 0===r?void 0:r,h=(0,o.useState)(""),p=h[0],u=h[1];return t=t.toLowerCase(),(0,o.useEffect)((function(){void 0!==l?c(s.toString(),l,t,u):u(s.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var o=function(){var e=(0,i.Z)((0,n.Z)().mark((function e(){var i;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,d(t,a,u);case 2:if(void 0!==(i=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?c(i,l,t,u):u(i);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{o()}catch(r){console.log(r)}}}),[]),p}},67425:e=>{var t="polkadot",a="kusama",n="statemine",i="statemint",o={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,s,r){var l=void 0;if(s===t||s===i)l=3;else{if(s!==a&&s!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),r((e=Number.isInteger(e/o[s].precision)?e/o[s].precision+" "+o[s].symbol:(e/o[s].precision).toFixed(l)+" "+o[s].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/o[t].precision+" "+o[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,o,s){var r=void 0;if(s===t||s===i)r=1;else{if(s!==a&&s!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");r=4}o((e/=r).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},84358:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>k,frontMatter:()=>l,metadata:()=>h,toc:()=>p});var n=a(87462),i=a(63366),o=(a(67294),a(3905)),s=a(47940),r=["components"],l={id:"learn-staking-advanced",title:"Advanced Staking Concepts",sidebar_label:"Advanced Staking Concepts",description:"Advanced Concepts about Staking on Polkadot.",keywords:["staking","stake","nominate","nominating","NPoS","proxies","payouts","simple payouts","rewards","staking miner","phragm\xe9n"],slug:"../learn-staking-advanced"},d=void 0,h={unversionedId:"learn/learn-staking-advanced",id:"learn/learn-staking-advanced",title:"Advanced Staking Concepts",description:"Advanced Concepts about Staking on Polkadot.",source:"@site/../docs/learn/learn-staking-advanced.md",sourceDirName:"learn",slug:"/learn-staking-advanced",permalink:"/docs/learn-staking-advanced",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-staking-advanced.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-staking-advanced",title:"Advanced Staking Concepts",sidebar_label:"Advanced Staking Concepts",description:"Advanced Concepts about Staking on Polkadot.",keywords:["staking","stake","nominate","nominating","NPoS","proxies","payouts","simple payouts","rewards","staking miner","phragm\xe9n"],slug:"../learn-staking-advanced"},sidebar:"docs",previous:{title:"Accounts",permalink:"/docs/learn-account-advanced"},next:{title:"NFT Pallets",permalink:"/docs/learn-nft-pallets"}},c={},p=[{value:"Staking Proxies",id:"staking-proxies",level:2},{value:"Bags List",id:"bags-list",level:2},{value:"Rewards Distribution",id:"rewards-distribution",level:2},{value:"Oversubscription, Commission Fees & Slashes",id:"oversubscription-commission-fees--slashes",level:4},{value:"Slashing",id:"slashing",level:2},{value:"Unresponsiveness",id:"unresponsiveness",level:3},{value:"Equivocation",id:"equivocation",level:3},{value:"Slashing Across Eras",id:"slashing-across-eras",level:3},{value:"Simple Payouts",id:"simple-payouts",level:2},{value:"Claiming Rewards",id:"claiming-rewards",level:3},{value:"FAQ and Cautionary Notes",id:"faq-and-cautionary-notes",level:3},{value:"Staking Miner",id:"staking-miner",level:2},{value:"NPoS election optimization",id:"npos-election-optimization",level:3},{value:"Signed Phase of the election pallet",id:"signed-phase-of-the-election-pallet",level:3},{value:"Deposit and reward mechanics",id:"deposit-and-reward-mechanics",level:3},{value:"Deposit",id:"deposit",level:4},{value:"Reward",id:"reward",level:4},{value:"Further Resources",id:"further-resources",level:3}],u={toc:p},m="wrapper";function k(e){var t=e.components,l=(0,i.Z)(e,r);return(0,o.kt)(m,(0,n.Z)({},u,l,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("admonition",{title:"New to Staking?",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Start your staking journey or explore more information about staking on\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.network/staking/"},"Polkadot's Home Page"),". Discover the new\n",(0,o.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},"Staking Dashboard")," that makes staking much easier and\ncheck this\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182104"},"extensive article list")," to\nhelp you get started. You can now stake on\nPolkadot natively with just\n",(0,o.kt)(s.Z,{network:"polkadot",path:"query.nominationPools.minJoinBond",filter:"humanReadable",defaultValue:1e10,mdxType:"RPC"}),"\n","\nand earn staking rewards. For additional information, check out\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.network/blog/nomination-pools-are-live-stake-natively-with-just-1-dot/"},"this blog post"),".")),(0,o.kt)("p",null,"This page is meant to be an advanced guide to staking with\nPolkadot. For a more general introduction,\ncheckout the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"Introduction to Staking")," page."),(0,o.kt)("h2",{id:"staking-proxies"},"Staking Proxies"),(0,o.kt)("p",null,"Polkadot makes it possible to create accounts\nhaving special permissions also called ",(0,o.kt)("strong",{parentName:"p"},"proxy accounts"),". For more details about proxy accounts\nvisit the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-proxies"},"dedicated page")," on this wiki."),(0,o.kt)("p",null,"Proxy accounts are special accounts which can sign\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-transactions#pallets-and-extrinsics"},(0,o.kt)("strong",{parentName:"a"},"extrinsic calls"))," made to specific ",(0,o.kt)("strong",{parentName:"p"},"pallets"),"\non behalf of the proxied account. There is thus the possibility to create staking proxy accounts\nthat can be used to sign extrinsic calls specific to the staking, session and utility pallets."),(0,o.kt)("p",null,"Staking on Polkadot is not a set-and-forget\naction, as a nominator you will need to monitor the performance of your validators and make changes\nif needed. There will be this transactions such as nominating that will be needed to regularly\nsigned. Each time you sign with an account, in the case of hot accounts, you expose the private key\nof that account to the internet with consequent risk of attack. A hot stash will be exposed all the\ntime a transaction is signed. Even in the case of a cold stash created with a Ledger device, signing\nwith the stash will build a transaction history that might tell something about your habits and\npreferences, or even your location."),(0,o.kt)("p",null,"Ideally, accounts with high economic power like the stash must be and remain as isolated as\npossible. With a staking proxy, the stash account is fully isolated when signing for staking-related\ntransactions. The proxy private key will be used to sign staking-related transactions, the stash\nprivate key will stay isolated and the staking transaction history will be built by the proxy."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"stash-stakingProxy",src:a(56789).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"For a practical perspective we need to use only one account and remember one password to sign for\nall staking-related transactions. From a security perspective who controls the staking proxy\ncontrols our staking actions."),(0,o.kt)("p",null,"It is important to remember that actions that can be performed by the proxy accounts are limited,\nand in the case of staking proxy, extrinsic calls to the balances pallet cannot be signed. This\nmeans it is not possible to do balance transfers on the proxied account through a staking proxy."),(0,o.kt)("p",null,"Note that to change the staking proxy you will need to sign with the stash or an ",(0,o.kt)("em",{parentName:"p"},"any")," proxy."),(0,o.kt)("h2",{id:"bags-list"},"Bags List"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"On Polkadot and Kusama, the instance of the pallet\n",(0,o.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/pallet_bags_list/"},"Bags-List")," is named as\n'voterList'."),(0,o.kt)("p",{parentName:"admonition"},"For a demo about bags list see ",(0,o.kt)("a",{parentName:"p",href:"https://youtu.be/hIIZRJLrBZA"},"this video tutorial"),".")),(0,o.kt)("p",null,"In Polkadot's NPoS nomination intents are\nplaced in a semi-sorted list called ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/pull/9507"},"bags-list"),".\nThe\nBags-List substrate pallet is designed to be self-maintaining, with minimal effort from the\nblockchain, making it extremely scalable. The bags list has two primary components, bags and nodes\n(or nominators' accounts), with bags containing the nodes with bonded balance within a specific\nrange. In the figure below the 1st empty bag will contain nominators whose bonded balance is in the\nrange of 21 - 30 DOT, the 2nd bag 11 - 20 DOT, and the 3rd bag 0-10 DOT. The nomination intents are\nthe nominators' accounts with bonded tokens (in the example shown below, there are eight nomination\nintents) that will be put inside each of those three bags depending on their stake."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"bags list example 0",src:a(71842).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"The bags list is semi-sorted, meaning that sorting is only partially done. When the nomination\nintents are submitted to the network, they are automatically put into each bag based on the number\nof bonded tokens, but within each bag, those nodes are arranged based on the time they are inserted\nand not based on their stake (see figure below). When the nomination intent of 19 DOT is submitted,\nit gets placed at the last spot in the 2nd bag (shown in the yellow circle). The same scenario\napplies for the node with 8 DOT (green circle) in the 3rd bag. Placing the node above all nodes with\na lesser stake requires an additional step (more on this later)."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"bags list example 1",src:a(79098).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"The mentioned two nodes (19 DOT and 8 DOT) have the option to move up in their respective bags,\nwhich can put them in front of the nodes with less stake than them (see figure below). This action\nmust be done manually by submitting the ",(0,o.kt)("inlineCode",{parentName:"p"},"putInFrontOf")," extrinsic within the ",(0,o.kt)("inlineCode",{parentName:"p"},"voterList")," pallet\ninstance. Moreover, if the node with 19 DOT bonds an additional 2 DOT, that node will be put\nautomatically in the 1st bag (i.e. automatic ",(0,o.kt)("inlineCode",{parentName:"p"},"rebag"),') because the total number of bonded tokens will\nnow be within the range of the 1st bag. That node with now 21 DOT will be put at the tail end of the\n1st bag with the possibility to manually put itself in front of "older" nodes with less than 21 DOT\n(if there are any).'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"bags list example 2",src:a(86983).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"If one decides to send staking rewards to the stash account and automatically bond them (i.e.\ncompounding the staking rewards), the position within a bag does not change automatically. The same\nscenario applies to a slashing event, i.e., when a nominator gets slashed, their position within a\nbag does not change. This might result in a scenario where the node is in the wrong bag and needs to\nbe placed in the right bag. To address this issue, any account on-chain can submit the\npermissionless extrinsic ",(0,o.kt)("inlineCode",{parentName:"p"},"rebag")," within the ",(0,o.kt)("inlineCode",{parentName:"p"},"voterList")," pallet instance to update the positions of\nthe nodes that do not belong to their bag and place them in the correct one. To reiterate, actions\nlike bonding/unbonding tokens automatically rebag the nominator node, but events like staking\nrewards/slashing do not. See the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-nominator#bags-list"},"bags-list")," section for more\ninformation."),(0,o.kt)("p",null,"The bags-list is capable of including an unlimited number of nodes, subject to the chain's runtime\nstorage. In the current staking system configuration, the bags list keeps\n",(0,o.kt)(s.Z,{network:"polkadot",path:"query.staking.maxNominatorsCount",defaultValue:5e4,mdxType:"RPC"}),"\n","\nnomination intents, of which, at most\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.maxElectingVoters",defaultValue:22500,mdxType:"RPC"}),"\n","\ncome out as the electing nominators. See\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-nominator#staking-election-stages"},"Staking Election Stages")," section for more info."),(0,o.kt)("p",null,"This means that only a portion of the nomination intents is kept. Once the nomination period ends,\nthe NPoS election system takes all nomination intents and their associated votes as input, and it\noutputs a set of validators. The bags are iterated from the most staked to the least staked. If the\naccounts are not appropriately sorted, this could leave the last touched bag to only be partially\niterated. Thus, in some edge cases, the order of the members within a bag is important. Continuing\nwith the example used in the previous figures, there are 8 nomination intents of which only 7 will\nbe kept. If the bags list stays semi-sorted (i.e. no accounts call the ",(0,o.kt)("inlineCode",{parentName:"p"},"putInFrontOf")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"rebag"),"\nextrinsics), the nomination of the node with 8 DOT in the 3rd bag will not be considered while that\nof the preceding node with 5 DOT will be. Nomination of the node with 8 DOT will be kept only if it\nputs itself in front of the one with 5 DOT. Note how the nomination of the node with 19 DOT in the\n2nd bag will be considered regardless of changing its position inside the bag. The sorting\nfunctionality of nomination intents using bags is extremely important for the\n",(0,o.kt)("a",{parentName:"p",href:"https://gist.github.com/kianenigma/aa835946455b9a3f167821b9d05ba376"},"long-term improvements")," of the\nstaking/election system."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"bags list example 3",src:a(54258).Z,width:"1920",height:"800"})),(0,o.kt)("admonition",{title:"Minimum active nomination threshold to earn rewards is dynamic",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Submitting a nomination intent does not guarantee staking rewards. The stake of the top\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.maxElectingVoters",defaultValue:22500,mdxType:"RPC"}),"\n","\nnominators is applied to the validators in the active set. To avail of staking rewards, ensure that\nthe number of tokens bonded is higher than the minimum active bond. For more information, see the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-nominator"},"nominator guide"),".")),(0,o.kt)("p",null,'The "election solution" which is a connected graph between nominators and validators with the stake\nas edge weights, has to meet certain requirements, such as maximizing the amount of stake to\nnominate validators and distributing the stake backing validators as evenly as possible. The\nobjectives of this election mechanism are to maximize the security of the network, and achieve fair\nrepresentation of the nominators. If you want to know more about how NPoS works (e.g. election,\nrunning time complexity, etc.), please read\n',(0,o.kt)("a",{parentName:"p",href:"http://research.web3.foundation/en/latest/polkadot/NPoS.html"},"here"),"."),(0,o.kt)("h2",{id:"rewards-distribution"},"Rewards Distribution"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"The general rule for rewards across validators is that two validators get paid essentially the same\namount of tokens for equal work, i.e. they are not paid proportional to their total stakes. There is\na probabilistic component to staking rewards in the form of\n",(0,o.kt)("a",{parentName:"p",href:"/docs/maintain-guides-validator-payout##era-points"},"era points")," and\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-transaction-fees#fee-calculation"},"tips")," but these should average out over time.")),(0,o.kt)("p",null,"Validators are paid the same regardless of stake backing them. Validators with less stake will\ngenerally pay more to nominators per-token than the ones with more stake. This gives nominators an\neconomic incentive to gradually shift their preferences to lower-staked validators that gain a\nsufficient amount of reputation. A consequence of this is that the stake across validators will be\nas evenly distributed as possible which avoids concentration of power among a few validators. In the\nlong term, validators will have similar levels of stake, with the stake being higher for validators\nwith higher reputation. A nominator who is willing to risk more by backing a validator with a lower\nreputation will get paid more, provided there are no slashing events."),(0,o.kt)("p",null,"Before distributing rewards to nominators, validators can create a cut of the reward (a commission)\nthat is not shared with the nominators. This cut is a percentage of the block reward, not an\nabsolute value. After the commission gets deducted, the remaining portion is distributed pro-rata\nbased on their staked value and split between the validator and all of the nominators whose stake\nhas backed this validator."),(0,o.kt)("p",null,"For example, assume the block reward for a validator is 10 DOT. A validator may specify\n",(0,o.kt)("inlineCode",{parentName:"p"},"validator_commission = 50%"),", in which case the validator would receive 5 DOT. The remaining 5 DOT\nwould then be split between the validator and their nominators based on the proportion of stake each\nnominator had. Note that for this calculation, validator's self-stake acts just as if they were\nanother nominator."),(0,o.kt)("p",null,"Thus, a percentage of the reward goes thus to pay the validator's commission fees and the remainder\nis paid pro-rata (i.e. proportional to stake) to the nominators and validator. If a validator's\ncommission is set to 100%, no tokens will be paid out to any of the nominators. Notice in particular\nthat the validator is rewarded twice: once in commission fees for validating (if their commission\nrate is above 0%), and once for nominating itself with own stake."),(0,o.kt)("p",null,"The following example should clarify the above. For simplicity, we have the following assumptions:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"These validators do not have a stake of their own."),(0,o.kt)("li",{parentName:"ul"},"They each receive the same number of era points."),(0,o.kt)("li",{parentName:"ul"},"There are no tips for any transactions processed."),(0,o.kt)("li",{parentName:"ul"},"They do NOT charge any commission fees."),(0,o.kt)("li",{parentName:"ul"},"Total reward amount is 100 DOT tokens."),(0,o.kt)("li",{parentName:"ul"},"The current minimum amount of DOT to be a validator is 350 (note that this is ",(0,o.kt)("em",{parentName:"li"},"not")," the actual\nvalue, which fluctuates, but merely an assumption for purposes of this example; to understand how\nthe actual minimal stake is calculated, see\n",(0,o.kt)("a",{parentName:"li",href:"/docs/faq#what-is-the-minimum-stake-necessary-to-be-elected-as-an-active-validator"},"here"),").")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"th"},"Validator A")),(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"}))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Nominator (4)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Stake (600)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Fraction of the Total Stake"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Rewards")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Jin"),(0,o.kt)("td",{parentName:"tr",align:"center"},"100"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.167"),(0,o.kt)("td",{parentName:"tr",align:"center"},"16.7")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"td"},"Sam")),(0,o.kt)("td",{parentName:"tr",align:"center"},"50"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.083"),(0,o.kt)("td",{parentName:"tr",align:"center"},"8.3")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Anson"),(0,o.kt)("td",{parentName:"tr",align:"center"},"250"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.417"),(0,o.kt)("td",{parentName:"tr",align:"center"},"41.7")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Bobby"),(0,o.kt)("td",{parentName:"tr",align:"center"},"200"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.333"),(0,o.kt)("td",{parentName:"tr",align:"center"},"33.3")))),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"th"},"Validator B")),(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"}))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Nominator (4)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Stake (400)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Fraction of the Total Stake"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Rewards")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Alice"),(0,o.kt)("td",{parentName:"tr",align:"center"},"100"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.25"),(0,o.kt)("td",{parentName:"tr",align:"center"},"25")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Peter"),(0,o.kt)("td",{parentName:"tr",align:"center"},"100"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.25"),(0,o.kt)("td",{parentName:"tr",align:"center"},"25")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"John"),(0,o.kt)("td",{parentName:"tr",align:"center"},"150"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.375"),(0,o.kt)("td",{parentName:"tr",align:"center"},"37.5")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"td"},"Kitty")),(0,o.kt)("td",{parentName:"tr",align:"center"},"50"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.125"),(0,o.kt)("td",{parentName:"tr",align:"center"},"12.5")))),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Both validators A & B have 4 nominators with a total stake 600 and 400 respectively.")),(0,o.kt)("p",null,"Based on the above rewards distribution, nominators of validator B get more rewards per DOT than\nthose of validator A because A has more overall stake. Sam has staked 50 DOT with validator A, but\nhe only gets 8.3 in return, whereas Kitty gets 12.5 with the same amount of stake."),(0,o.kt)("p",null,"To estimate how many tokens you can get each month as a nominator or validator, you can use this\n",(0,o.kt)("a",{parentName:"p",href:"https://www.stakingrewards.com/earn/polkadot/calculate"},"tool")," as a reference and play around with\nit by changing some parameters (e.g. how many days you would like to stake with your DOT, provider\nfees, compound rewards, etc.) to have a better estimate. Even though it may not be entirely accurate\nsince staking participation is changing dynamically, it works well as an indicator."),(0,o.kt)("h4",{id:"oversubscription-commission-fees--slashes"},"Oversubscription, Commission Fees & Slashes"),(0,o.kt)("p",null,"There is an additional factor to consider in terms of rewards. While there is no limit to the number\nof nominators a validator may have, a validator does have a limit to how many nominators to which it\ncan pay rewards. In Polkadot this limit is\ncurrently\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),",\n","\nalthough this can be modified via runtime upgrade. A validator with more than\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n","\nnominators is ",(0,o.kt)("em",{parentName:"p"},"oversubscribed"),". When payouts occur, only the top\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n",'\nnominators as measured by the amount of stake allocated to that validator will receive rewards. All\nother nominators are essentially "wasting" their stake - they used their nomination to elect that\nvalidator to the active stake, but receive no rewards in exchange for doing so.'),(0,o.kt)("p",null,"Note that the network slashes a validator for a misbehavior (e.g. validator offline, equivocation,\netc.) the slashed amount is a fixed percentage (and not a fixed amount), which means that validators\nwith more stake get slashed more DOT. Again, this is done to provide nominators with an economic\nincentive to shift their preferences and back less popular validators whom they consider to be\ntrustworthy."),(0,o.kt)("p",null,"Also, note that each validator candidate is free to name their desired commission fee (as a\npercentage of rewards) to cover operational costs. Since validators are paid the same, validators\nwith lower commission fees pay more to nominators than validators with higher fees. Thus, each\nvalidator can choose between increasing their fees to earn more, or decreasing their fees to attract\nmore nominators and increase their chances of being elected. In the long term, we expect that all\nvalidators will need to be cost-efficient to remain competitive, and that validators with higher\nreputation will be able to charge slightly higher commission fees (which is fair)."),(0,o.kt)("h2",{id:"slashing"},"Slashing"),(0,o.kt)("h3",{id:"unresponsiveness"},"Unresponsiveness"),(0,o.kt)("p",null,'For every session, validators will send an "I\'m online" heartbeat to indicate they are live. If a\nvalidator produces no blocks during an epoch and fails to send the heartbeat, it will be reported as\nunresponsive. Slashing may occur depending on the repeated offenses and how many other validators\nwere unresponsive or offline during the epoch.'),(0,o.kt)("p",null,"Validators should have a well-architected network infrastructure to ensure the node runs to reduce\nthe risk of slashing or chilling. A high availability setup is desirable, preferably with backup\nnodes that kick in ",(0,o.kt)("strong",{parentName:"p"},"only once the original node is verifiably offline")," (to avoid double-signing\nand being slashed for equivocation - see below). A comprehensive guide on validator setup is\navailable ",(0,o.kt)("a",{parentName:"p",href:"/docs/maintain-guides-secure-validator"},"here"),"."),(0,o.kt)("p",null,"Here is the formula for calculating slashing due to unresponsiveness:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"Let x = offenders, n = total no. validators in the active set\n\nmin((3 * (x - (n / 10 + 1))) / n, 1) * 0.07\n")),(0,o.kt)("p",null,"The examples demonstrate how to calculate the slashing penalty for unresponsiveness."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"In all of the examples, assume that there are 100 validators in the active set.")),(0,o.kt)("p",null,"No slashing would enact if <= 10% of all validators are unresponsive."),(0,o.kt)("p",null,"For example, if exactly 10 validators were unresponsive, the expression 3 ",(0,o.kt)("em",{parentName:"p"}," (x - (n / 10 + 1))) / n\nwould be 3 ")," (10 - (100 / 10 + 1)) / 100 = 3 ","*"," (10 - (10 + 1)) / 100 = -0.03 which is rounded to 0."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"The minimum value between 0 and 1 is 0. 0 multiplied by 0.07 is 0.")),(0,o.kt)("p",null,"If 14 validators are unresponsive, then slashing would occur, as > 10% of validators are\nunresponsive."),(0,o.kt)("p",null,"The slashing penalty would be min((3 ",(0,o.kt)("em",{parentName:"p"}," (14 - (100 / 10 + 1))) / 100, 1) ")," 0.07 = min((3 ",(0,o.kt)("em",{parentName:"p"}," (14 -\n11))/100, 1) ")," 0.07 = min(0.09, 1) ","*"," 0.07 = 0.6%"),(0,o.kt)("p",null,"Similarly, if one-third of the validator set (around 33/100) are unresponsive, the slashing penalty\nwould be about 5%."),(0,o.kt)("p",null,"The maximum slashing that can occur due to unresponsiveness is 7%. After around 45% of the\nvalidators go offline, the expression 3 ",(0,o.kt)("em",{parentName:"p"}," (x - (n / 10 + 1))) / n will go beyond 1. Hence, min((3 "),"\n(x - (n / 10 + 1))) / n, 1) ","*"," 0.07 will be ceiled to 7%."),(0,o.kt)("h3",{id:"equivocation"},"Equivocation"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"GRANDPA Equivocation"),": A validator signs two or more votes in the same round on different chains."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"BABE Equivocation"),": A validator produces two or more blocks on the Relay Chain in the same time\nslot."),(0,o.kt)("p",null,"Both GRANDPA and BABE equivocation use the same formula for calculating the slashing penalty:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"Let x = offenders, n = total no. validators in the active set\n\nmin( (3 * x / n )^2, 1)\n")),(0,o.kt)("p",null,"As an example, assume that there are 100 validators in the active set, and one of them equivocates\nin a slot (for our purposes, it does not matter whether it was a BABE or GRANDPA equivocation). This\nis unlikely to be an attack on the network, but much more likely to be a misconfiguration of a\nvalidator. The penalty would be min(3 ","*"," 1 / 100)^2, 1) = 0.0009, or a 0.09% slash for that\nvalidator (i.e., the stake held by the validator and its nominators)."),(0,o.kt)("p",null,"Now assume that there is a group running several validators, and all of them have an issue in the\nsame slot. The penalty would be min((3 ","*"," 5 / 100)^2, 1) = 0.0225, or a 2.25% slash. If 20\nvalidators equivocate, this is a much more serious offense and possibly indicates a coordinated\nattack on the network, and so the slash will be much greater - min((3 ","*"," 20 / 100)^2, 1) = 0.36, or\na 36% slash on all of these validators and their nominators. All slashed validators will also be\nchilled."),(0,o.kt)("p",null,"From the example above, the risk of nominating or running many validators in the active set are\napparent. While rewards grow linearly (two validators will get you approximately twice as many\nstaking rewards as one), slashing grows exponentially. A single validator equivocating causes a\n0.09% slash, two validators equivocating does not cause a 0.09 ","*"," 2 = 0.18% slash, but rather a\n0.36% slash - 4x as much as the single validator."),(0,o.kt)("p",null,"Validators may run their nodes on multiple machines to make sure they can still perform validation\nwork in case one of their nodes goes down, but validator operators should be extremely careful in\nsetting these up. If they do not have good coordination to manage signing machines, equivocation is\npossible, and equivocation offenses are slashed at much higher rates than equivalent offline\noffenses."),(0,o.kt)("p",null,"If a validator is reported for any one of the offenses they will be removed from the validator set\n(",(0,o.kt)("a",{parentName:"p",href:"#chilling"},"chilled"),") and they will not be paid while they are out. They will be considered\ninactive immediately and will lose their nominators. They need to re-issue intent to validate and\nagain gather support from nominators."),(0,o.kt)("h3",{id:"slashing-across-eras"},"Slashing Across Eras"),(0,o.kt)("p",null,"There are 3 main difficulties to account for with slashing in NPoS:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"A nominator can nominate multiple validators and be slashed via any of them."),(0,o.kt)("li",{parentName:"ul"},"Until slashed, the stake is reused from era to era. Nominating with N coins for E eras in a row\ndoes not mean you have N","*","E coins to be slashed - you've only ever had N."),(0,o.kt)("li",{parentName:"ul"},"Slashable offenses can be found after the fact and out of order.")),(0,o.kt)("p",null,"To balance this, we only slash for the maximum slash a participant can receive in some time period,\nrather than the sum. This ensures protection from overslashing. Likewise, the period over which\nmaximum slashes are computed is finite and the validator is chilled with nominations withdrawn after\na slashing event, as stated in the previous section. This prevents rage-quit attacks in which, once\ncaught misbehaving, a participant deliberately misbehaves more because their slashing amount is\nalready maxed out."),(0,o.kt)("h2",{id:"simple-payouts"},"Simple Payouts"),(0,o.kt)("p",null,"Polkadot makes stakers claim their rewards for\npast eras by submitting a transaction. This naturally leads to spreading out reward distribution, as\npeople make transactions at disparate times, rather than updating the accounts of all stakers in a\nsingle block."),(0,o.kt)("p",null,"Even if everyone submitted a reward claim at the same time, the fact that they are individual\ntransactions would allow the block construction algorithm to process only a limited number per block\nand ensure that the network maintains a constant block time. If all rewards were sent out in one\nblock, this could cause serious issues with the stability of the network."),(0,o.kt)("p",null,"Simple payouts require one transaction per validator, per ",(0,o.kt)("a",{parentName:"p",href:"/docs/glossary##era"},"era"),", to\nclaim rewards. The reason Polkadot requires\nthis is to avoid an attack where someone has several thousand accounts nominating a single\nvalidator. The major cost in reward distribution is mutating the accounts in storage, and\nPolkadot cannot pay out several thousand\naccounts in a single transaction."),(0,o.kt)("h3",{id:"claiming-rewards"},"Claiming Rewards"),(0,o.kt)("p",null,"Polkadot stores the last 84 eras of reward\ninformation (e.g. maps of era number to validator points, staking rewards, nomination exposure,\netc.). Rewards will not be claimable more than 84 eras after they were earned. This means that all\nrewards must be claimed within a maximum of 84 eras, although under certain circumstances (described\nbelow) this may be as low as 28 eras."),(0,o.kt)("p",null,"If a validator kills their stash, any remaining rewards will no longer be claimable. Before doing\nthis, however, they would need to first stop validating and then unbond the funds in their stash,\nwhich takes 28 eras. If a validator were to immediately chill and start unbonding after rewards are\ncalculated, and nobody issued a payout for that era from that validator in the next 28 eras, the\nreward would no longer be claimable."),(0,o.kt)("admonition",{title:"Advanced How-to Guides",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"In order to be absolutely sure that staking rewards can be claimed, users should trigger a payout\nbefore 28 eras have passed. See\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-guides-nominator#claiming-rewards-with-the-polkadot-js-ui"},"this page")," for more\ninformation about how to claim rewards using the Polkadot-JS UI.")),(0,o.kt)("h3",{id:"faq-and-cautionary-notes"},"FAQ and Cautionary Notes"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Rewards expire after 84 eras. On Polkadot, that's about 84 days. On Kusama, it is approximately\n21 days. Validators should claim all pending rewards before killing their stash in the event the\nvalidator decides to ",(0,o.kt)("inlineCode",{parentName:"li"},"chill")," -> ",(0,o.kt)("inlineCode",{parentName:"li"},"unbonds all")," -> ",(0,o.kt)("inlineCode",{parentName:"li"},"withdraws unbonded"),". Nominators will not miss\nout on rewards if they claim the pending rewards for a validator within 28 days. Essentially, the\ndeadline to ensure you get staking rewards is 28 eras. If the validator verifies its intent and\ndoes not unbond and withdraw, the 84 era timeline holds."),(0,o.kt)("li",{parentName:"ol"},"Claiming rewards (or neglecting to claim rewards) does not affect nominations in any way.\nNominations will persist after claiming rewards or after the rewards expire."),(0,o.kt)("li",{parentName:"ol"},'Rewards are not minted until they are claimed. Therefore, if your reward destination is "stash,\nincreasing amount at stake", then your staked amount does not reflect your rewards until you\nclaim them. If you want to maximize compounding, then you will need to claim often or nominate\nvalidators which regularly claim for you.'),(0,o.kt)("li",{parentName:"ol"},"Staking operations at the end of an era are closed to allow the off-chain validator election to\ntake place. See ",(0,o.kt)("a",{parentName:"li",href:"/docs/learn-phragmen#off-chain-phragmen"},"Off-chain Phragm\xe9n")," for more information.")),(0,o.kt)("h2",{id:"staking-miner"},"Staking Miner"),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"The staking-miner code is experimental and it is still in the development phase. Use is at your own\ndiscretion, as there is a risk of losing some funds.")),(0,o.kt)("p",null,"At the end of each era on Polkadot and Kusama, using ",(0,o.kt)("a",{parentName:"p",href:"learn-phragmen"},"NPoS"),', a new set of validators\nmust be elected based on the nominator preferences. This is a computationally intensive process,\nhence the usage of the term "mining" for computing the solution. The validators use\n',(0,o.kt)("a",{parentName:"p",href:"https://docs.substrate.io/reference/how-to-guides/offchain-workers/"},"off-chain workers")," to compute\nthe result and submit a transaction to propose the set of winners. This can also be delegated to\nstand-alone programs, whose task is to mine the optimal solution. Staking miners compete with each\nother to produce election solutions which consist of a validator set, stake distribution across that\nset, and a score indicating how optimal the solution is. Staking miners run any given staking\nalgorithms (as of now, sequential Phragm\xe9n or PhragMMS, subject to change if improved algorithms are\nintroduced) to produce results, which are then sent as a transaction to the relay chain via a normal\nsigned extrinsic. The transaction requires a bond and a transaction fee. The best solution is\nrewarded, which the least covers the transaction fee, and the bond is returned to the account.\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced#deposit-and-reward-mechanics"},"The bond and the fee")," are lost if the\nsolution is invalid."),(0,o.kt)("p",null,"Staking miner uses a pallet called ",(0,o.kt)("inlineCode",{parentName:"p"},"pallet_election_provider_multi_phase")," and can only produce\nsolutions during the\n",(0,o.kt)("a",{parentName:"p",href:"https://crates.parity.io/pallet_election_provider_multi_phase/index.html#signed-phase"},(0,o.kt)("inlineCode",{parentName:"a"},"SignedPhase")),"\nof the pallet's life cycle. Once the ",(0,o.kt)("inlineCode",{parentName:"p"},"SignedPhase")," is over and the\n",(0,o.kt)("a",{parentName:"p",href:"https://crates.parity.io/pallet_election_provider_multi_phase/index.html#unsigned-phase"},(0,o.kt)("inlineCode",{parentName:"a"},"UnsignedPhase")),"\nstarts, only the off-chain workers can provide election results."),(0,o.kt)("p",null,"Running the staking miner requires passing the seed of a funded account in order to pay the fees for\nthe transactions that will be sent. The same account's balance is used to reserve deposits as well.\nThe best solution in each round is rewarded. All correct solutions will get their deposit back and\nthe ones that submit invalid solutions will lose their deposit."),(0,o.kt)("h3",{id:"npos-election-optimization"},"NPoS election optimization"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"NPoS election optimization",src:a(83471).Z,width:"1868",height:"804"})),(0,o.kt)("p",null,"A basic election solution is a simple distribution of stake across validators, but this can be\noptimized for better distribution equaling a higher security score. The staking miner does not act\nas a validator and focuses solely on the election result and optimization of the solution. It\nconnects to a specified chain and keeps listening to new signed phase of the election pallet in\norder to submit solutions to the NPoS election. When the correct time comes, it computes its\nsolution and submits it to the chain. The default miner algorithm is sequential Phragm\xe9n with a\nconfigurable number of balancing iterations that improve the score."),(0,o.kt)("h3",{id:"signed-phase-of-the-election-pallet"},"Signed Phase of the election pallet"),(0,o.kt)("p",null,"The election provider pallet ",(0,o.kt)("inlineCode",{parentName:"p"},"pallet_election_provider_multi_phase")," is divided into two phases,\n",(0,o.kt)("strong",{parentName:"p"},"signed")," and ",(0,o.kt)("strong",{parentName:"p"},"unsigned"),". At the end of the pallet's timeline, the function ",(0,o.kt)("inlineCode",{parentName:"p"},"elect()")," is called."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," elect()\n + <--T::SignedPhase--\x3e + <--T::UnsignedPhase--\x3e +\n +-------------------------------------------------------------------+\n Phase::Off + Phase::Signed + Phase::Unsigned +\n")),(0,o.kt)("p",null,"Solutions provided by the staking miner can only be submitted during the signed phase. Solutions are\nsubmitted and queued on the chain as a ",(0,o.kt)("inlineCode",{parentName:"p"},"RawSolution"),". Once submitted, a solution cannot be retracted\nby the originating account."),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"RawSolution")," struct definition:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"pub struct RawSolution {\n pub solution: S, // The solution itself\n pub score: ElectionScore, // The claimed score of the solution.\n pub round: u32, // The round at which this solution should be submitted.\n}\n")),(0,o.kt)("p",null,"A maximum of ",(0,o.kt)("inlineCode",{parentName:"p"},"pallet::Config::SignedMaxSubmissions")," will be stored on-chain and they will be sorted\nbased on score. Higher the score the more optimal the election solution is. On both Polkadot and\nKusama the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/f610ffc05876d4b98a14cee245b4cc27bd3c0c15/runtime/polkadot/src/lib.rs#L390"},"'SignedMaxSubmissions'"),"\nis set to\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.signedMaxSubmissions",defaultValue:16,mdxType:"RPC"}),"\n","\nsubmissions. This variable can be modified if needed through governance."),(0,o.kt)("p",null,"Upon arrival of a new solution:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"If the queue is not full, it is stored in the appropriate sorted index."),(0,o.kt)("li",{parentName:"ol"},"If the queue is full but the submitted solution is better than one of the queued ones, the worse\nsolution is discarded, the deposit of the outgoing solution is returned, and the new solution is\nstored in the correct index."),(0,o.kt)("li",{parentName:"ol"},"If the queue is full and the solution is not an improvement compared to any of the queued ones,\nit is instantly rejected and no deposit is reserved.")),(0,o.kt)("p",null,"Upon the end of the ",(0,o.kt)("inlineCode",{parentName:"p"},"SignedPhase"),", no more solutions can be submitted and the solutions in the queue\nwill be checked using\n",(0,o.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/pallet_election_provider_multi_phase/pallet/struct.Pallet.html#method.feasibility_check"},(0,o.kt)("inlineCode",{parentName:"a"},"Pallet::feasibility_check")),"\nwhich ensures the score is indeed correct, and marks them as valid or invalid. By checking each\nsolution in the queue, the queue will be reorganized by score. The highest valid score will be\nrewarded. Invalid solutions with higher score than the winning solution will be slashed. The rest of\nthe solutions will be discarded and their deposit will be returned. Once the staking miner with a\nwinning solution is ready to be rewarded the runtime will automatically execute\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/blob/f2bc08a3071a91b71fec63cf2b22c707411cec0e/frame/election-provider-multi-phase/src/signed.rs#L453-L474"},(0,o.kt)("inlineCode",{parentName:"a"},"finalize_signed_phase_accept_solution")),"\nwhich reward account associated with the winning solution."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"Queue\n+-------------------------------+\n|Solution(score=20, valid=false)| +--\x3e Slashed\n+-------------------------------+\n|Solution(score=15, valid=true )| +--\x3e Rewarded, Saved\n+-------------------------------+\n|Solution(score=10, valid=true )| +--\x3e Discarded\n+-------------------------------+\n|Solution(score=05, valid=false)| +--\x3e Discarded\n+-------------------------------+\n| None |\n+-------------------------------+\n")),(0,o.kt)("h3",{id:"deposit-and-reward-mechanics"},"Deposit and reward mechanics"),(0,o.kt)("p",null,"The staking miners are required to pay a deposit to post their solutions. Deposit amount is the sum\nof ",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositBase")," +",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositByte")," + ",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositWeight"),". All good solutions are subject\nto receiving a ",(0,o.kt)("inlineCode",{parentName:"p"},"SignedRewardBase"),"."),(0,o.kt)("h4",{id:"deposit"},"Deposit"),(0,o.kt)("p",null,"Current deposit(",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositBase"),") is\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.signedDepositBase",defaultValue:4e11,filter:"humanReadable",mdxType:"RPC"}),"\n","\nwhich is a fixed amount."),(0,o.kt)("p",null,"Current deposit per byte(",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositByte"),") is\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.signedDepositByte",defaultValue:97656,filter:"precise",mdxType:"RPC"}),"\n","\nand the total is variable depending on the size of the solution data. For example, a solution\nweighing 200KB would yield 200 x 0.0000097656 = ",(0,o.kt)("strong",{parentName:"p"},"0.00195312 DOT"),".\n",""),(0,o.kt)("p",null,"And the weight deposit(",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositWeight"),") is currently set to ",(0,o.kt)("inlineCode",{parentName:"p"},"0")," and has no effect."),(0,o.kt)("h4",{id:"reward"},"Reward"),(0,o.kt)("p",null,"Current reward(",(0,o.kt)("inlineCode",{parentName:"p"},"SignedRewardBase"),") is\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.signedRewardBase",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),"\n","\nwhich is a fixed amount."),(0,o.kt)("h3",{id:"further-resources"},"Further Resources"),(0,o.kt)("p",null,"If you want to run a staking miner on your validator, refer to the repository provided in the\nresources section below."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/paritytech/staking-miner-v2"},"Staking Miner repository")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://crates.parity.io/pallet_election_provider_multi_phase/index.html"},"Election Pallet definition")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/paritytech/polkadot-sdk/blob/f610ffc05876d4b98a14cee245b4cc27bd3c0c15/runtime/polkadot/src/lib.rs#L389:L397"},"Signed phase parameter configuration on Polkadot"))))}k.isMDXComponent=!0},71842:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/bags-list-example-0-6836e3658c32484103ffcd06d6372427.png"},79098:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/bags-list-example-1-6aeffdb212b7af723f00e38b40780dcc.png"},86983:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/bags-list-example-2-aec08a8679a23e697f416374cbcdf735.png"},54258:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/bags-list-example-3-08c2b290f95e036e026f667fca527704.png"},83471:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/NPoS-election-optimization-3ef1b7bd0a99f64c4198511b4216989d.png"},56789:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/stash-vs-stash-and-staking-proxy-2104e1a23d5c29821cec15fb9b67eba5.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/41b7b3e8.929a2e38.js b/assets/js/41b7b3e8.929a2e38.js deleted file mode 100644 index f00f5033aeaf..000000000000 --- a/assets/js/41b7b3e8.929a2e38.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[3513],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>p});var n=a(74165),i=a(15861),o=a(67294),s=a(87152),r=a(14741),l=a(67425);function d(e,t,a){return h.apply(this,arguments)}function h(){return(h=(0,i.Z)((0,n.Z)().mark((function e(t,a,i){var o,l,d,h,c;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:o=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return o="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return o="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return o="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return o="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==o){e.next=18;break}return e.abrupt("return");case 18:return d=new s.U(o),e.next=21,r.G.create({provider:d});case 21:h=e.sent,(c=a.split(".")).forEach((function(e){e in h&&(h=h[e])})),e.t1=c[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=h.toString(),e.abrupt("break",35);case 29:return e.next=31,h();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+c[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function c(e,t,a,n){switch(t){case"humanReadable":(0,l.HumanReadable)(e,a,n);break;case"precise":(0,l.Precise)(e,a,n);break;case"blocksToDays":(0,l.BlocksToDays)(e,n);break;case"erasToDays":(0,l.ErasToDays)(e,n,a);break;case"percentage":(0,l.Percentage)(e,n);break;case"permillToPercent":(0,l.PermillToPercent)(e,n);break;case"arrayLength":(0,l.ArrayLength)(e,n);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(e){var t=e.network,a=e.path,s=e.defaultValue,r=e.filter,l=void 0===r?void 0:r,h=(0,o.useState)(""),p=h[0],u=h[1];return t=t.toLowerCase(),(0,o.useEffect)((function(){void 0!==l?c(s.toString(),l,t,u):u(s.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var o=function(){var e=(0,i.Z)((0,n.Z)().mark((function e(){var i;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,d(t,a,u);case 2:if(void 0!==(i=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?c(i,l,t,u):u(i);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{o()}catch(r){console.log(r)}}}),[]),p}},67425:e=>{var t="polkadot",a="kusama",n="statemine",i="statemint",o={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,s,r){var l=void 0;if(s===t||s===i)l=3;else{if(s!==a&&s!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),r((e=Number.isInteger(e/o[s].precision)?e/o[s].precision+" "+o[s].symbol:(e/o[s].precision).toFixed(l)+" "+o[s].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/o[t].precision+" "+o[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,o,s){var r=void 0;if(s===t||s===i)r=1;else{if(s!==a&&s!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");r=4}o((e/=r).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},84358:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>k,frontMatter:()=>l,metadata:()=>h,toc:()=>p});var n=a(87462),i=a(63366),o=(a(67294),a(3905)),s=a(47940),r=["components"],l={id:"learn-staking-advanced",title:"Advanced Staking Concepts",sidebar_label:"Advanced Staking Concepts",description:"Advanced Concepts about Staking on Polkadot.",keywords:["staking","stake","nominate","nominating","NPoS","proxies","payouts","simple payouts","rewards","staking miner","phragm\xe9n"],slug:"../learn-staking-advanced"},d=void 0,h={unversionedId:"learn/learn-staking-advanced",id:"learn/learn-staking-advanced",title:"Advanced Staking Concepts",description:"Advanced Concepts about Staking on Polkadot.",source:"@site/../docs/learn/learn-staking-advanced.md",sourceDirName:"learn",slug:"/learn-staking-advanced",permalink:"/docs/learn-staking-advanced",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-staking-advanced.md",tags:[],version:"current",lastUpdatedBy:"Aryan Malik",lastUpdatedAt:1708596632,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{id:"learn-staking-advanced",title:"Advanced Staking Concepts",sidebar_label:"Advanced Staking Concepts",description:"Advanced Concepts about Staking on Polkadot.",keywords:["staking","stake","nominate","nominating","NPoS","proxies","payouts","simple payouts","rewards","staking miner","phragm\xe9n"],slug:"../learn-staking-advanced"},sidebar:"docs",previous:{title:"Accounts",permalink:"/docs/learn-account-advanced"},next:{title:"NFT Pallets",permalink:"/docs/learn-nft-pallets"}},c={},p=[{value:"Staking Proxies",id:"staking-proxies",level:2},{value:"Bags List",id:"bags-list",level:2},{value:"Rewards Distribution",id:"rewards-distribution",level:2},{value:"Oversubscription, Commission Fees & Slashes",id:"oversubscription-commission-fees--slashes",level:4},{value:"Slashing",id:"slashing",level:2},{value:"Unresponsiveness",id:"unresponsiveness",level:3},{value:"Equivocation",id:"equivocation",level:3},{value:"Slashing Across Eras",id:"slashing-across-eras",level:3},{value:"Simple Payouts",id:"simple-payouts",level:2},{value:"Claiming Rewards",id:"claiming-rewards",level:3},{value:"FAQ and Cautionary Notes",id:"faq-and-cautionary-notes",level:3},{value:"Staking Miner",id:"staking-miner",level:2},{value:"NPoS election optimization",id:"npos-election-optimization",level:3},{value:"Signed Phase of the election pallet",id:"signed-phase-of-the-election-pallet",level:3},{value:"Deposit and reward mechanics",id:"deposit-and-reward-mechanics",level:3},{value:"Deposit",id:"deposit",level:4},{value:"Reward",id:"reward",level:4},{value:"Further Resources",id:"further-resources",level:3}],u={toc:p},m="wrapper";function k(e){var t=e.components,l=(0,i.Z)(e,r);return(0,o.kt)(m,(0,n.Z)({},u,l,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("admonition",{title:"New to Staking?",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Start your staking journey or explore more information about staking on\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.network/staking/"},"Polkadot's Home Page"),". Discover the new\n",(0,o.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},"Staking Dashboard")," that makes staking much easier and\ncheck this\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182104"},"extensive article list")," to\nhelp you get started. You can now stake on\nPolkadot natively with just\n",(0,o.kt)(s.Z,{network:"polkadot",path:"query.nominationPools.minJoinBond",filter:"humanReadable",defaultValue:1e10,mdxType:"RPC"}),"\n","\nand earn staking rewards. For additional information, check out\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.network/blog/nomination-pools-are-live-stake-natively-with-just-1-dot/"},"this blog post"),".")),(0,o.kt)("p",null,"This page is meant to be an advanced guide to staking with\nPolkadot. For a more general introduction,\ncheckout the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"Introduction to Staking")," page."),(0,o.kt)("h2",{id:"staking-proxies"},"Staking Proxies"),(0,o.kt)("p",null,"Polkadot makes it possible to create accounts\nhaving special permissions also called ",(0,o.kt)("strong",{parentName:"p"},"proxy accounts"),". For more details about proxy accounts\nvisit the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-proxies"},"dedicated page")," on this wiki."),(0,o.kt)("p",null,"Proxy accounts are special accounts which can sign\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-transactions#pallets-and-extrinsics"},(0,o.kt)("strong",{parentName:"a"},"extrinsic calls"))," made to specific ",(0,o.kt)("strong",{parentName:"p"},"pallets"),"\non behalf of the proxied account. There is thus the possibility to create staking proxy accounts\nthat can be used to sign extrinsic calls specific to the staking, session and utility pallets."),(0,o.kt)("p",null,"Staking on Polkadot is not a set-and-forget\naction, as a nominator you will need to monitor the performance of your validators and make changes\nif needed. There will be this transactions such as nominating that will be needed to regularly\nsigned. Each time you sign with an account, in the case of hot accounts, you expose the private key\nof that account to the internet with consequent risk of attack. A hot stash will be exposed all the\ntime a transaction is signed. Even in the case of a cold stash created with a Ledger device, signing\nwith the stash will build a transaction history that might tell something about your habits and\npreferences, or even your location."),(0,o.kt)("p",null,"Ideally, accounts with high economic power like the stash must be and remain as isolated as\npossible. With a staking proxy, the stash account is fully isolated when signing for staking-related\ntransactions. The proxy private key will be used to sign staking-related transactions, the stash\nprivate key will stay isolated and the staking transaction history will be built by the proxy."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"stash-stakingProxy",src:a(56789).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"For a practical perspective we need to use only one account and remember one password to sign for\nall staking-related transactions. From a security perspective who controls the staking proxy\ncontrols our staking actions."),(0,o.kt)("p",null,"It is important to remember that actions that can be performed by the proxy accounts are limited,\nand in the case of staking proxy, extrinsic calls to the balances pallet cannot be signed. This\nmeans it is not possible to do balance transfers on the proxied account through a staking proxy."),(0,o.kt)("p",null,"Note that to change the staking proxy you will need to sign with the stash or an ",(0,o.kt)("em",{parentName:"p"},"any")," proxy."),(0,o.kt)("h2",{id:"bags-list"},"Bags List"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"On Polkadot and Kusama, the instance of the pallet\n",(0,o.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/pallet_bags_list/"},"Bags-List")," is named as\n'voterList'."),(0,o.kt)("p",{parentName:"admonition"},"For a demo about bags list see ",(0,o.kt)("a",{parentName:"p",href:"https://youtu.be/hIIZRJLrBZA"},"this video tutorial"),".")),(0,o.kt)("p",null,"In Polkadot's NPoS nomination intents are\nplaced in a semi-sorted list called ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/pull/9507"},"bags-list"),".\nThe\nBags-List substrate pallet is designed to be self-maintaining, with minimal effort from the\nblockchain, making it extremely scalable. The bags list has two primary components, bags and nodes\n(or nominators' accounts), with bags containing the nodes with bonded balance within a specific\nrange. In the figure below the 1st empty bag will contain nominators whose bonded balance is in the\nrange of 21 - 30 DOT, the 2nd bag 11 - 20 DOT, and the 3rd bag 0-10 DOT. The nomination intents are\nthe nominators' accounts with bonded tokens (in the example shown below, there are eight nomination\nintents) that will be put inside each of those three bags depending on their stake."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"bags list example 0",src:a(71842).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"The bags list is semi-sorted, meaning that sorting is only partially done. When the nomination\nintents are submitted to the network, they are automatically put into each bag based on the number\nof bonded tokens, but within each bag, those nodes are arranged based on the time they are inserted\nand not based on their stake (see figure below). When the nomination intent of 19 DOT is submitted,\nit gets placed at the last spot in the 2nd bag (shown in the yellow circle). The same scenario\napplies for the node with 8 DOT (green circle) in the 3rd bag. Placing the node above all nodes with\na lesser stake requires an additional step (more on this later)."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"bags list example 1",src:a(79098).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"The mentioned two nodes (19 DOT and 8 DOT) have the option to move up in their respective bags,\nwhich can put them in front of the nodes with less stake than them (see figure below). This action\nmust be done manually by submitting the ",(0,o.kt)("inlineCode",{parentName:"p"},"putInFrontOf")," extrinsic within the ",(0,o.kt)("inlineCode",{parentName:"p"},"voterList")," pallet\ninstance. Moreover, if the node with 19 DOT bonds an additional 2 DOT, that node will be put\nautomatically in the 1st bag (i.e. automatic ",(0,o.kt)("inlineCode",{parentName:"p"},"rebag"),') because the total number of bonded tokens will\nnow be within the range of the 1st bag. That node with now 21 DOT will be put at the tail end of the\n1st bag with the possibility to manually put itself in front of "older" nodes with less than 21 DOT\n(if there are any).'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"bags list example 2",src:a(86983).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"If one decides to send staking rewards to the stash account and automatically bond them (i.e.\ncompounding the staking rewards), the position within a bag does not change automatically. The same\nscenario applies to a slashing event, i.e., when a nominator gets slashed, their position within a\nbag does not change. This might result in a scenario where the node is in the wrong bag and needs to\nbe placed in the right bag. To address this issue, any account on-chain can submit the\npermissionless extrinsic ",(0,o.kt)("inlineCode",{parentName:"p"},"rebag")," within the ",(0,o.kt)("inlineCode",{parentName:"p"},"voterList")," pallet instance to update the positions of\nthe nodes that do not belong to their bag and place them in the correct one. To reiterate, actions\nlike bonding/unbonding tokens automatically rebag the nominator node, but events like staking\nrewards/slashing do not. See the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-nominator#bags-list"},"bags-list")," section for more\ninformation."),(0,o.kt)("p",null,"The bags-list is capable of including an unlimited number of nodes, subject to the chain's runtime\nstorage. In the current staking system configuration, the bags list keeps\n",(0,o.kt)(s.Z,{network:"polkadot",path:"query.staking.maxNominatorsCount",defaultValue:5e4,mdxType:"RPC"}),"\n","\nnomination intents, of which, at most\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.maxElectingVoters",defaultValue:22500,mdxType:"RPC"}),"\n","\ncome out as the electing nominators. See\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-nominator#staking-election-stages"},"Staking Election Stages")," section for more info."),(0,o.kt)("p",null,"This means that only a portion of the nomination intents is kept. Once the nomination period ends,\nthe NPoS election system takes all nomination intents and their associated votes as input, and it\noutputs a set of validators. The bags are iterated from the most staked to the least staked. If the\naccounts are not appropriately sorted, this could leave the last touched bag to only be partially\niterated. Thus, in some edge cases, the order of the members within a bag is important. Continuing\nwith the example used in the previous figures, there are 8 nomination intents of which only 7 will\nbe kept. If the bags list stays semi-sorted (i.e. no accounts call the ",(0,o.kt)("inlineCode",{parentName:"p"},"putInFrontOf")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"rebag"),"\nextrinsics), the nomination of the node with 8 DOT in the 3rd bag will not be considered while that\nof the preceding node with 5 DOT will be. Nomination of the node with 8 DOT will be kept only if it\nputs itself in front of the one with 5 DOT. Note how the nomination of the node with 19 DOT in the\n2nd bag will be considered regardless of changing its position inside the bag. The sorting\nfunctionality of nomination intents using bags is extremely important for the\n",(0,o.kt)("a",{parentName:"p",href:"https://gist.github.com/kianenigma/aa835946455b9a3f167821b9d05ba376"},"long-term improvements")," of the\nstaking/election system."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"bags list example 3",src:a(54258).Z,width:"1920",height:"800"})),(0,o.kt)("admonition",{title:"Minimum active nomination threshold to earn rewards is dynamic",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Submitting a nomination intent does not guarantee staking rewards. The stake of the top\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.maxElectingVoters",defaultValue:22500,mdxType:"RPC"}),"\n","\nnominators is applied to the validators in the active set. To avail of staking rewards, ensure that\nthe number of tokens bonded is higher than the minimum active bond. For more information, see the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-nominator"},"nominator guide"),".")),(0,o.kt)("p",null,'The "election solution" which is a connected graph between nominators and validators with the stake\nas edge weights, has to meet certain requirements, such as maximizing the amount of stake to\nnominate validators and distributing the stake backing validators as evenly as possible. The\nobjectives of this election mechanism are to maximize the security of the network, and achieve fair\nrepresentation of the nominators. If you want to know more about how NPoS works (e.g. election,\nrunning time complexity, etc.), please read\n',(0,o.kt)("a",{parentName:"p",href:"http://research.web3.foundation/en/latest/polkadot/NPoS.html"},"here"),"."),(0,o.kt)("h2",{id:"rewards-distribution"},"Rewards Distribution"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"The general rule for rewards across validators is that two validators get paid essentially the same\namount of tokens for equal work, i.e. they are not paid proportional to their total stakes. There is\na probabilistic component to staking rewards in the form of\n",(0,o.kt)("a",{parentName:"p",href:"/docs/maintain-guides-validator-payout##era-points"},"era points")," and\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-transaction-fees#fee-calculation"},"tips")," but these should average out over time.")),(0,o.kt)("p",null,"Validators are paid the same regardless of stake backing them. Validators with less stake will\ngenerally pay more to nominators per-token than the ones with more stake. This gives nominators an\neconomic incentive to gradually shift their preferences to lower-staked validators that gain a\nsufficient amount of reputation. A consequence of this is that the stake across validators will be\nas evenly distributed as possible which avoids concentration of power among a few validators. In the\nlong term, validators will have similar levels of stake, with the stake being higher for validators\nwith higher reputation. A nominator who is willing to risk more by backing a validator with a lower\nreputation will get paid more, provided there are no slashing events."),(0,o.kt)("p",null,"Before distributing rewards to nominators, validators can create a cut of the reward (a commission)\nthat is not shared with the nominators. This cut is a percentage of the block reward, not an\nabsolute value. After the commission gets deducted, the remaining portion is distributed pro-rata\nbased on their staked value and split between the validator and all of the nominators whose stake\nhas backed this validator."),(0,o.kt)("p",null,"For example, assume the block reward for a validator is 10 DOT. A validator may specify\n",(0,o.kt)("inlineCode",{parentName:"p"},"validator_commission = 50%"),", in which case the validator would receive 5 DOT. The remaining 5 DOT\nwould then be split between the validator and their nominators based on the proportion of stake each\nnominator had. Note that for this calculation, validator's self-stake acts just as if they were\nanother nominator."),(0,o.kt)("p",null,"Thus, a percentage of the reward goes thus to pay the validator's commission fees and the remainder\nis paid pro-rata (i.e. proportional to stake) to the nominators and validator. If a validator's\ncommission is set to 100%, no tokens will be paid out to any of the nominators. Notice in particular\nthat the validator is rewarded twice: once in commission fees for validating (if their commission\nrate is above 0%), and once for nominating itself with own stake."),(0,o.kt)("p",null,"The following example should clarify the above. For simplicity, we have the following assumptions:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"These validators do not have a stake of their own."),(0,o.kt)("li",{parentName:"ul"},"They each receive the same number of era points."),(0,o.kt)("li",{parentName:"ul"},"There are no tips for any transactions processed."),(0,o.kt)("li",{parentName:"ul"},"They do NOT charge any commission fees."),(0,o.kt)("li",{parentName:"ul"},"Total reward amount is 100 DOT tokens."),(0,o.kt)("li",{parentName:"ul"},"The current minimum amount of DOT to be a validator is 350 (note that this is ",(0,o.kt)("em",{parentName:"li"},"not")," the actual\nvalue, which fluctuates, but merely an assumption for purposes of this example; to understand how\nthe actual minimal stake is calculated, see\n",(0,o.kt)("a",{parentName:"li",href:"/docs/faq#what-is-the-minimum-stake-necessary-to-be-elected-as-an-active-validator"},"here"),").")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"th"},"Validator A")),(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"}))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Nominator (4)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Stake (600)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Fraction of the Total Stake"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Rewards")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Jin"),(0,o.kt)("td",{parentName:"tr",align:"center"},"100"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.167"),(0,o.kt)("td",{parentName:"tr",align:"center"},"16.7")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"td"},"Sam")),(0,o.kt)("td",{parentName:"tr",align:"center"},"50"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.083"),(0,o.kt)("td",{parentName:"tr",align:"center"},"8.3")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Anson"),(0,o.kt)("td",{parentName:"tr",align:"center"},"250"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.417"),(0,o.kt)("td",{parentName:"tr",align:"center"},"41.7")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Bobby"),(0,o.kt)("td",{parentName:"tr",align:"center"},"200"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.333"),(0,o.kt)("td",{parentName:"tr",align:"center"},"33.3")))),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"th"},"Validator B")),(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"}))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Nominator (4)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Stake (400)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Fraction of the Total Stake"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Rewards")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Alice"),(0,o.kt)("td",{parentName:"tr",align:"center"},"100"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.25"),(0,o.kt)("td",{parentName:"tr",align:"center"},"25")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Peter"),(0,o.kt)("td",{parentName:"tr",align:"center"},"100"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.25"),(0,o.kt)("td",{parentName:"tr",align:"center"},"25")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"John"),(0,o.kt)("td",{parentName:"tr",align:"center"},"150"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.375"),(0,o.kt)("td",{parentName:"tr",align:"center"},"37.5")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"td"},"Kitty")),(0,o.kt)("td",{parentName:"tr",align:"center"},"50"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.125"),(0,o.kt)("td",{parentName:"tr",align:"center"},"12.5")))),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Both validators A & B have 4 nominators with a total stake 600 and 400 respectively.")),(0,o.kt)("p",null,"Based on the above rewards distribution, nominators of validator B get more rewards per DOT than\nthose of validator A because A has more overall stake. Sam has staked 50 DOT with validator A, but\nhe only gets 8.3 in return, whereas Kitty gets 12.5 with the same amount of stake."),(0,o.kt)("p",null,"To estimate how many tokens you can get each month as a nominator or validator, you can use this\n",(0,o.kt)("a",{parentName:"p",href:"https://www.stakingrewards.com/earn/polkadot/calculate"},"tool")," as a reference and play around with\nit by changing some parameters (e.g. how many days you would like to stake with your DOT, provider\nfees, compound rewards, etc.) to have a better estimate. Even though it may not be entirely accurate\nsince staking participation is changing dynamically, it works well as an indicator."),(0,o.kt)("h4",{id:"oversubscription-commission-fees--slashes"},"Oversubscription, Commission Fees & Slashes"),(0,o.kt)("p",null,"There is an additional factor to consider in terms of rewards. While there is no limit to the number\nof nominators a validator may have, a validator does have a limit to how many nominators to which it\ncan pay rewards. In Polkadot this limit is\ncurrently\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),",\n","\nalthough this can be modified via runtime upgrade. A validator with more than\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n","\nnominators is ",(0,o.kt)("em",{parentName:"p"},"oversubscribed"),". When payouts occur, only the top\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n",'\nnominators as measured by the amount of stake allocated to that validator will receive rewards. All\nother nominators are essentially "wasting" their stake - they used their nomination to elect that\nvalidator to the active stake, but receive no rewards in exchange for doing so.'),(0,o.kt)("p",null,"Note that the network slashes a validator for a misbehavior (e.g. validator offline, equivocation,\netc.) the slashed amount is a fixed percentage (and not a fixed amount), which means that validators\nwith more stake get slashed more DOT. Again, this is done to provide nominators with an economic\nincentive to shift their preferences and back less popular validators whom they consider to be\ntrustworthy."),(0,o.kt)("p",null,"Also, note that each validator candidate is free to name their desired commission fee (as a\npercentage of rewards) to cover operational costs. Since validators are paid the same, validators\nwith lower commission fees pay more to nominators than validators with higher fees. Thus, each\nvalidator can choose between increasing their fees to earn more, or decreasing their fees to attract\nmore nominators and increase their chances of being elected. In the long term, we expect that all\nvalidators will need to be cost-efficient to remain competitive, and that validators with higher\nreputation will be able to charge slightly higher commission fees (which is fair)."),(0,o.kt)("h2",{id:"slashing"},"Slashing"),(0,o.kt)("h3",{id:"unresponsiveness"},"Unresponsiveness"),(0,o.kt)("p",null,'For every session, validators will send an "I\'m online" heartbeat to indicate they are live. If a\nvalidator produces no blocks during an epoch and fails to send the heartbeat, it will be reported as\nunresponsive. Slashing may occur depending on the repeated offenses and how many other validators\nwere unresponsive or offline during the epoch.'),(0,o.kt)("p",null,"Validators should have a well-architected network infrastructure to ensure the node runs to reduce\nthe risk of slashing or chilling. A high availability setup is desirable, preferably with backup\nnodes that kick in ",(0,o.kt)("strong",{parentName:"p"},"only once the original node is verifiably offline")," (to avoid double-signing\nand being slashed for equivocation - see below). A comprehensive guide on validator setup is\navailable ",(0,o.kt)("a",{parentName:"p",href:"/docs/maintain-guides-secure-validator"},"here"),"."),(0,o.kt)("p",null,"Here is the formula for calculating slashing due to unresponsiveness:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"Let x = offenders, n = total no. validators in the active set\n\nmin((3 * (x - (n / 10 + 1))) / n, 1) * 0.07\n")),(0,o.kt)("p",null,"The examples demonstrate how to calculate the slashing penalty for unresponsiveness."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"In all of the examples, assume that there are 100 validators in the active set.")),(0,o.kt)("p",null,"No slashing would enact if <= 10% of all validators are unresponsive."),(0,o.kt)("p",null,"For example, if exactly 10 validators were unresponsive, the expression 3 ",(0,o.kt)("em",{parentName:"p"}," (x - (n / 10 + 1))) / n\nwould be 3 ")," (10 - (100 / 10 + 1)) / 100 = 3 ","*"," (10 - (10 + 1)) / 100 = -0.03 which is rounded to 0."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"The minimum value between 0 and 1 is 0. 0 multiplied by 0.07 is 0.")),(0,o.kt)("p",null,"If 14 validators are unresponsive, then slashing would occur, as > 10% of validators are\nunresponsive."),(0,o.kt)("p",null,"The slashing penalty would be min((3 ",(0,o.kt)("em",{parentName:"p"}," (14 - (100 / 10 + 1))) / 100, 1) ")," 0.07 = min((3 ",(0,o.kt)("em",{parentName:"p"}," (14 -\n11))/100, 1) ")," 0.07 = min(0.09, 1) ","*"," 0.07 = 0.6%"),(0,o.kt)("p",null,"Similarly, if one-third of the validator set (around 33/100) are unresponsive, the slashing penalty\nwould be about 5%."),(0,o.kt)("p",null,"The maximum slashing that can occur due to unresponsiveness is 7%. After around 45% of the\nvalidators go offline, the expression 3 ",(0,o.kt)("em",{parentName:"p"}," (x - (n / 10 + 1))) / n will go beyond 1. Hence, min((3 "),"\n(x - (n / 10 + 1))) / n, 1) ","*"," 0.07 will be ceiled to 7%."),(0,o.kt)("h3",{id:"equivocation"},"Equivocation"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"GRANDPA Equivocation"),": A validator signs two or more votes in the same round on different chains."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"BABE Equivocation"),": A validator produces two or more blocks on the Relay Chain in the same time\nslot."),(0,o.kt)("p",null,"Both GRANDPA and BABE equivocation use the same formula for calculating the slashing penalty:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"Let x = offenders, n = total no. validators in the active set\n\nmin( (3 * x / n )^2, 1)\n")),(0,o.kt)("p",null,"As an example, assume that there are 100 validators in the active set, and one of them equivocates\nin a slot (for our purposes, it does not matter whether it was a BABE or GRANDPA equivocation). This\nis unlikely to be an attack on the network, but much more likely to be a misconfiguration of a\nvalidator. The penalty would be min(3 ","*"," 1 / 100)^2, 1) = 0.0009, or a 0.09% slash for that\nvalidator (i.e., the stake held by the validator and its nominators)."),(0,o.kt)("p",null,"Now assume that there is a group running several validators, and all of them have an issue in the\nsame slot. The penalty would be min((3 ","*"," 5 / 100)^2, 1) = 0.0225, or a 2.25% slash. If 20\nvalidators equivocate, this is a much more serious offense and possibly indicates a coordinated\nattack on the network, and so the slash will be much greater - min((3 ","*"," 20 / 100)^2, 1) = 0.36, or\na 36% slash on all of these validators and their nominators. All slashed validators will also be\nchilled."),(0,o.kt)("p",null,"From the example above, the risk of nominating or running many validators in the active set are\napparent. While rewards grow linearly (two validators will get you approximately twice as many\nstaking rewards as one), slashing grows exponentially. A single validator equivocating causes a\n0.09% slash, two validators equivocating does not cause a 0.09 ","*"," 2 = 0.18% slash, but rather a\n0.36% slash - 4x as much as the single validator."),(0,o.kt)("p",null,"Validators may run their nodes on multiple machines to make sure they can still perform validation\nwork in case one of their nodes goes down, but validator operators should be extremely careful in\nsetting these up. If they do not have good coordination to manage signing machines, equivocation is\npossible, and equivocation offenses are slashed at much higher rates than equivalent offline\noffenses."),(0,o.kt)("p",null,"If a validator is reported for any one of the offenses they will be removed from the validator set\n(",(0,o.kt)("a",{parentName:"p",href:"#chilling"},"chilled"),") and they will not be paid while they are out. They will be considered\ninactive immediately and will lose their nominators. They need to re-issue intent to validate and\nagain gather support from nominators."),(0,o.kt)("h3",{id:"slashing-across-eras"},"Slashing Across Eras"),(0,o.kt)("p",null,"There are 3 main difficulties to account for with slashing in NPoS:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"A nominator can nominate multiple validators and be slashed via any of them."),(0,o.kt)("li",{parentName:"ul"},"Until slashed, the stake is reused from era to era. Nominating with N coins for E eras in a row\ndoes not mean you have N","*","E coins to be slashed - you've only ever had N."),(0,o.kt)("li",{parentName:"ul"},"Slashable offenses can be found after the fact and out of order.")),(0,o.kt)("p",null,"To balance this, we only slash for the maximum slash a participant can receive in some time period,\nrather than the sum. This ensures protection from overslashing. Likewise, the period over which\nmaximum slashes are computed is finite and the validator is chilled with nominations withdrawn after\na slashing event, as stated in the previous section. This prevents rage-quit attacks in which, once\ncaught misbehaving, a participant deliberately misbehaves more because their slashing amount is\nalready maxed out."),(0,o.kt)("h2",{id:"simple-payouts"},"Simple Payouts"),(0,o.kt)("p",null,"Polkadot makes stakers claim their rewards for\npast eras by submitting a transaction. This naturally leads to spreading out reward distribution, as\npeople make transactions at disparate times, rather than updating the accounts of all stakers in a\nsingle block."),(0,o.kt)("p",null,"Even if everyone submitted a reward claim at the same time, the fact that they are individual\ntransactions would allow the block construction algorithm to process only a limited number per block\nand ensure that the network maintains a constant block time. If all rewards were sent out in one\nblock, this could cause serious issues with the stability of the network."),(0,o.kt)("p",null,"Simple payouts require one transaction per validator, per ",(0,o.kt)("a",{parentName:"p",href:"/docs/glossary##era"},"era"),", to\nclaim rewards. The reason Polkadot requires\nthis is to avoid an attack where someone has several thousand accounts nominating a single\nvalidator. The major cost in reward distribution is mutating the accounts in storage, and\nPolkadot cannot pay out several thousand\naccounts in a single transaction."),(0,o.kt)("h3",{id:"claiming-rewards"},"Claiming Rewards"),(0,o.kt)("p",null,"Polkadot stores the last 84 eras of reward\ninformation (e.g. maps of era number to validator points, staking rewards, nomination exposure,\netc.). Rewards will not be claimable more than 84 eras after they were earned. This means that all\nrewards must be claimed within a maximum of 84 eras, although under certain circumstances (described\nbelow) this may be as low as 28 eras."),(0,o.kt)("p",null,"If a validator kills their stash, any remaining rewards will no longer be claimable. Before doing\nthis, however, they would need to first stop validating and then unbond the funds in their stash,\nwhich takes 28 eras. If a validator were to immediately chill and start unbonding after rewards are\ncalculated, and nobody issued a payout for that era from that validator in the next 28 eras, the\nreward would no longer be claimable."),(0,o.kt)("admonition",{title:"Advanced How-to Guides",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"In order to be absolutely sure that staking rewards can be claimed, users should trigger a payout\nbefore 28 eras have passed. See\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-guides-staking#claiming-rewards-with-the-polkadot-js-ui"},"this page")," for more information\nabout how to claim rewards using the Polkadot-JS UI.")),(0,o.kt)("h3",{id:"faq-and-cautionary-notes"},"FAQ and Cautionary Notes"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Rewards expire after 84 eras. On Polkadot, that's about 84 days. On Kusama, it is approximately\n21 days. Validators should claim all pending rewards before killing their stash in the event the\nvalidator decides to ",(0,o.kt)("inlineCode",{parentName:"li"},"chill")," -> ",(0,o.kt)("inlineCode",{parentName:"li"},"unbonds all")," -> ",(0,o.kt)("inlineCode",{parentName:"li"},"withdraws unbonded"),". Nominators will not miss\nout on rewards if they claim the pending rewards for a validator within 28 days. Essentially, the\ndeadline to ensure you get staking rewards is 28 eras. If the validator verifies its intent and\ndoes not unbond and withdraw, the 84 era timeline holds."),(0,o.kt)("li",{parentName:"ol"},"Claiming rewards (or neglecting to claim rewards) does not affect nominations in any way.\nNominations will persist after claiming rewards or after the rewards expire."),(0,o.kt)("li",{parentName:"ol"},'Rewards are not minted until they are claimed. Therefore, if your reward destination is "stash,\nincreasing amount at stake", then your staked amount does not reflect your rewards until you\nclaim them. If you want to maximize compounding, then you will need to claim often or nominate\nvalidators which regularly claim for you.'),(0,o.kt)("li",{parentName:"ol"},"Staking operations at the end of an era are closed to allow the off-chain validator election to\ntake place. See ",(0,o.kt)("a",{parentName:"li",href:"/docs/learn-phragmen#off-chain-phragmen"},"Off-chain Phragm\xe9n")," for more information.")),(0,o.kt)("h2",{id:"staking-miner"},"Staking Miner"),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"The staking-miner code is experimental and it is still in the development phase. Use is at your own\ndiscretion, as there is a risk of losing some funds.")),(0,o.kt)("p",null,"At the end of each era on Polkadot and Kusama, using ",(0,o.kt)("a",{parentName:"p",href:"learn-phragmen"},"NPoS"),', a new set of validators\nmust be elected based on the nominator preferences. This is a computationally intensive process,\nhence the usage of the term "mining" for computing the solution. The validators use\n',(0,o.kt)("a",{parentName:"p",href:"https://docs.substrate.io/reference/how-to-guides/offchain-workers/"},"off-chain workers")," to compute\nthe result and submit a transaction to propose the set of winners. This can also be delegated to\nstand-alone programs, whose task is to mine the optimal solution. Staking miners compete with each\nother to produce election solutions which consist of a validator set, stake distribution across that\nset, and a score indicating how optimal the solution is. Staking miners run any given staking\nalgorithms (as of now, sequential Phragm\xe9n or PhragMMS, subject to change if improved algorithms are\nintroduced) to produce results, which are then sent as a transaction to the relay chain via a normal\nsigned extrinsic. The transaction requires a bond and a transaction fee. The best solution is\nrewarded, which the least covers the transaction fee, and the bond is returned to the account.\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced#deposit-and-reward-mechanics"},"The bond and the fee")," are lost if the\nsolution is invalid."),(0,o.kt)("p",null,"Staking miner uses a pallet called ",(0,o.kt)("inlineCode",{parentName:"p"},"pallet_election_provider_multi_phase")," and can only produce\nsolutions during the\n",(0,o.kt)("a",{parentName:"p",href:"https://crates.parity.io/pallet_election_provider_multi_phase/index.html#signed-phase"},(0,o.kt)("inlineCode",{parentName:"a"},"SignedPhase")),"\nof the pallet's life cycle. Once the ",(0,o.kt)("inlineCode",{parentName:"p"},"SignedPhase")," is over and the\n",(0,o.kt)("a",{parentName:"p",href:"https://crates.parity.io/pallet_election_provider_multi_phase/index.html#unsigned-phase"},(0,o.kt)("inlineCode",{parentName:"a"},"UnsignedPhase")),"\nstarts, only the off-chain workers can provide election results."),(0,o.kt)("p",null,"Running the staking miner requires passing the seed of a funded account in order to pay the fees for\nthe transactions that will be sent. The same account's balance is used to reserve deposits as well.\nThe best solution in each round is rewarded. All correct solutions will get their deposit back and\nthe ones that submit invalid solutions will lose their deposit."),(0,o.kt)("h3",{id:"npos-election-optimization"},"NPoS election optimization"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"NPoS election optimization",src:a(83471).Z,width:"1868",height:"804"})),(0,o.kt)("p",null,"A basic election solution is a simple distribution of stake across validators, but this can be\noptimized for better distribution equaling a higher security score. The staking miner does not act\nas a validator and focuses solely on the election result and optimization of the solution. It\nconnects to a specified chain and keeps listening to new signed phase of the election pallet in\norder to submit solutions to the NPoS election. When the correct time comes, it computes its\nsolution and submits it to the chain. The default miner algorithm is sequential Phragm\xe9n with a\nconfigurable number of balancing iterations that improve the score."),(0,o.kt)("h3",{id:"signed-phase-of-the-election-pallet"},"Signed Phase of the election pallet"),(0,o.kt)("p",null,"The election provider pallet ",(0,o.kt)("inlineCode",{parentName:"p"},"pallet_election_provider_multi_phase")," is divided into two phases,\n",(0,o.kt)("strong",{parentName:"p"},"signed")," and ",(0,o.kt)("strong",{parentName:"p"},"unsigned"),". At the end of the pallet's timeline, the function ",(0,o.kt)("inlineCode",{parentName:"p"},"elect()")," is called."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," elect()\n + <--T::SignedPhase--\x3e + <--T::UnsignedPhase--\x3e +\n +-------------------------------------------------------------------+\n Phase::Off + Phase::Signed + Phase::Unsigned +\n")),(0,o.kt)("p",null,"Solutions provided by the staking miner can only be submitted during the signed phase. Solutions are\nsubmitted and queued on the chain as a ",(0,o.kt)("inlineCode",{parentName:"p"},"RawSolution"),". Once submitted, a solution cannot be retracted\nby the originating account."),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"RawSolution")," struct definition:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"pub struct RawSolution {\n pub solution: S, // The solution itself\n pub score: ElectionScore, // The claimed score of the solution.\n pub round: u32, // The round at which this solution should be submitted.\n}\n")),(0,o.kt)("p",null,"A maximum of ",(0,o.kt)("inlineCode",{parentName:"p"},"pallet::Config::SignedMaxSubmissions")," will be stored on-chain and they will be sorted\nbased on score. Higher the score the more optimal the election solution is. On both Polkadot and\nKusama the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/f610ffc05876d4b98a14cee245b4cc27bd3c0c15/runtime/polkadot/src/lib.rs#L390"},"'SignedMaxSubmissions'"),"\nis set to\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.signedMaxSubmissions",defaultValue:16,mdxType:"RPC"}),"\n","\nsubmissions. This variable can be modified if needed through governance."),(0,o.kt)("p",null,"Upon arrival of a new solution:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"If the queue is not full, it is stored in the appropriate sorted index."),(0,o.kt)("li",{parentName:"ol"},"If the queue is full but the submitted solution is better than one of the queued ones, the worse\nsolution is discarded, the deposit of the outgoing solution is returned, and the new solution is\nstored in the correct index."),(0,o.kt)("li",{parentName:"ol"},"If the queue is full and the solution is not an improvement compared to any of the queued ones,\nit is instantly rejected and no deposit is reserved.")),(0,o.kt)("p",null,"Upon the end of the ",(0,o.kt)("inlineCode",{parentName:"p"},"SignedPhase"),", no more solutions can be submitted and the solutions in the queue\nwill be checked using\n",(0,o.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/pallet_election_provider_multi_phase/pallet/struct.Pallet.html#method.feasibility_check"},(0,o.kt)("inlineCode",{parentName:"a"},"Pallet::feasibility_check")),"\nwhich ensures the score is indeed correct, and marks them as valid or invalid. By checking each\nsolution in the queue, the queue will be reorganized by score. The highest valid score will be\nrewarded. Invalid solutions with higher score than the winning solution will be slashed. The rest of\nthe solutions will be discarded and their deposit will be returned. Once the staking miner with a\nwinning solution is ready to be rewarded the runtime will automatically execute\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/blob/f2bc08a3071a91b71fec63cf2b22c707411cec0e/frame/election-provider-multi-phase/src/signed.rs#L453-L474"},(0,o.kt)("inlineCode",{parentName:"a"},"finalize_signed_phase_accept_solution")),"\nwhich reward account associated with the winning solution."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"Queue\n+-------------------------------+\n|Solution(score=20, valid=false)| +--\x3e Slashed\n+-------------------------------+\n|Solution(score=15, valid=true )| +--\x3e Rewarded, Saved\n+-------------------------------+\n|Solution(score=10, valid=true )| +--\x3e Discarded\n+-------------------------------+\n|Solution(score=05, valid=false)| +--\x3e Discarded\n+-------------------------------+\n| None |\n+-------------------------------+\n")),(0,o.kt)("h3",{id:"deposit-and-reward-mechanics"},"Deposit and reward mechanics"),(0,o.kt)("p",null,"The staking miners are required to pay a deposit to post their solutions. Deposit amount is the sum\nof ",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositBase")," +",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositByte")," + ",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositWeight"),". All good solutions are subject\nto receiving a ",(0,o.kt)("inlineCode",{parentName:"p"},"SignedRewardBase"),"."),(0,o.kt)("h4",{id:"deposit"},"Deposit"),(0,o.kt)("p",null,"Current deposit(",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositBase"),") is\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.signedDepositBase",defaultValue:4e11,filter:"humanReadable",mdxType:"RPC"}),"\n","\nwhich is a fixed amount."),(0,o.kt)("p",null,"Current deposit per byte(",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositByte"),") is\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.signedDepositByte",defaultValue:97656,filter:"precise",mdxType:"RPC"}),"\n","\nand the total is variable depending on the size of the solution data. For example, a solution\nweighing 200KB would yield 200 x 0.0000097656 = ",(0,o.kt)("strong",{parentName:"p"},"0.00195312 DOT"),".\n",""),(0,o.kt)("p",null,"And the weight deposit(",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositWeight"),") is currently set to ",(0,o.kt)("inlineCode",{parentName:"p"},"0")," and has no effect."),(0,o.kt)("h4",{id:"reward"},"Reward"),(0,o.kt)("p",null,"Current reward(",(0,o.kt)("inlineCode",{parentName:"p"},"SignedRewardBase"),") is\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.signedRewardBase",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),"\n","\nwhich is a fixed amount."),(0,o.kt)("h3",{id:"further-resources"},"Further Resources"),(0,o.kt)("p",null,"If you want to run a staking miner on your validator, refer to the repository provided in the\nresources section below."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/paritytech/staking-miner-v2"},"Staking Miner repository")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://crates.parity.io/pallet_election_provider_multi_phase/index.html"},"Election Pallet definition")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/paritytech/polkadot-sdk/blob/f610ffc05876d4b98a14cee245b4cc27bd3c0c15/runtime/polkadot/src/lib.rs#L389:L397"},"Signed phase parameter configuration on Polkadot"))))}k.isMDXComponent=!0},71842:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/bags-list-example-0-6836e3658c32484103ffcd06d6372427.png"},79098:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/bags-list-example-1-6aeffdb212b7af723f00e38b40780dcc.png"},86983:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/bags-list-example-2-aec08a8679a23e697f416374cbcdf735.png"},54258:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/bags-list-example-3-08c2b290f95e036e026f667fca527704.png"},83471:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/NPoS-election-optimization-3ef1b7bd0a99f64c4198511b4216989d.png"},56789:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/stash-vs-stash-and-staking-proxy-2104e1a23d5c29821cec15fb9b67eba5.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/41f7224c.b9b31e90.js b/assets/js/41f7224c.9cd2a1ba.js similarity index 93% rename from assets/js/41f7224c.b9b31e90.js rename to assets/js/41f7224c.9cd2a1ba.js index c9fffc94ba9e..abff206ac1e9 100644 --- a/assets/js/41f7224c.b9b31e90.js +++ b/assets/js/41f7224c.9cd2a1ba.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3274],{3905:(e,r,t)=>{t.d(r,{Zo:()=>d,kt:()=>f});var n=t(67294);function a(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function i(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function c(e){for(var r=1;r=0||(a[t]=e[t]);return a}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var l=n.createContext({}),s=function(e){var r=n.useContext(l),t=r;return e&&(t="function"==typeof e?e(r):c(c({},r),e)),t},d=function(e){var r=s(e.components);return n.createElement(l.Provider,{value:r},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},m=n.forwardRef((function(e,r){var t=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),u=s(t),m=a,f=u["".concat(l,".").concat(m)]||u[m]||p[m]||i;return t?n.createElement(f,c(c({ref:r},d),{},{components:t})):n.createElement(f,c({ref:r},d))}));function f(e,r){var t=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var i=t.length,c=new Array(i);c[0]=m;var o={};for(var l in r)hasOwnProperty.call(r,l)&&(o[l]=r[l]);o.originalType=e,o[u]="string"==typeof e?e:a,c[1]=o;for(var s=2;s{t.d(r,{Z:()=>h});var n=t(67294),a=t(86010),i=t(53438),c=t(39960),o=t(13919),l=t(95999);const s={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function d(e){var r=e.href,t=e.children;return n.createElement(c.Z,{href:r,className:(0,a.Z)("card padding--lg",s.cardContainer)},t)}function u(e){var r=e.href,t=e.icon,i=e.title,c=e.description;return n.createElement(d,{href:r},n.createElement("h2",{className:(0,a.Z)("text--truncate",s.cardTitle),title:i},t," ",i),c&&n.createElement("p",{className:(0,a.Z)("text--truncate",s.cardDescription),title:c},c))}function p(e){var r,t=e.item,a=(0,i.Wl)(t);return a?n.createElement(u,{href:a,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:null!=(r=t.description)?r:(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t.items.length})}):null}function m(e){var r,t,a=e.item,c=(0,o.Z)(a.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,i.xz)(null!=(r=a.docId)?r:void 0);return n.createElement(u,{href:a.href,icon:c,title:a.label,description:null!=(t=a.description)?t:null==l?void 0:l.description})}function f(e){var r=e.item;switch(r.type){case"link":return n.createElement(m,{item:r});case"category":return n.createElement(p,{item:r});default:throw new Error("unknown item type "+JSON.stringify(r))}}function v(e){var r=e.className,t=(0,i.jA)();return n.createElement(h,{items:t.items,className:r})}function h(e){var r=e.items,t=e.className;if(!r)return n.createElement(v,e);var c=(0,i.MN)(r);return n.createElement("section",{className:(0,a.Z)("row",t)},c.map((function(e,r){return n.createElement("article",{key:r,className:"col col--6 margin-bottom--lg"},n.createElement(f,{item:e}))})))}},48659:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>u,contentTitle:()=>s,default:()=>v,frontMatter:()=>l,metadata:()=>d,toc:()=>p});var n=t(87462),a=t(63366),i=(t(67294),t(3905)),c=t(52991),o=["components"],l={id:"learn-archive",title:"Learn Archive",sidebar_label:"Archive",description:"Archive for the Learn Section.",keywords:["Gov1","Gov1 Treasury","Launch","Redenomination","Controller"],slug:"../learn-archive"},s=void 0,d={unversionedId:"learn/learn-archive",id:"learn/learn-archive",title:"Learn Archive",description:"Archive for the Learn Section.",source:"@site/../docs/learn/learn-archive.md",sourceDirName:"learn",slug:"/learn-archive",permalink:"/docs/learn-archive",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-archive.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710167319,formattedLastUpdatedAt:"Mar 11, 2024",frontMatter:{id:"learn-archive",title:"Learn Archive",sidebar_label:"Archive",description:"Archive for the Learn Section.",keywords:["Gov1","Gov1 Treasury","Launch","Redenomination","Controller"],slug:"../learn-archive"},sidebar:"docs",previous:{title:"Hyperbridge",permalink:"/docs/learn-hyperbridge"},next:{title:"Governance V1",permalink:"/docs/learn/learn-governance"}},u={},p=[],m={toc:p},f="wrapper";function v(e){var r=e.components,t=(0,a.Z)(e,o);return(0,i.kt)(f,(0,n.Z)({},m,t,{components:r,mdxType:"MDXLayout"}),(0,i.kt)("div",{className:"sticky"},(0,i.kt)("br",null),(0,i.kt)("p",null,"This section contains archived pages. The content in them no longer applies to Polkadot but can\nstill be relevant for parachains and related projects.")),(0,i.kt)(c.Z,{mdxType:"DocCardList"}))}v.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3274],{3905:(e,r,t)=>{t.d(r,{Zo:()=>d,kt:()=>f});var n=t(67294);function a(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function i(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function c(e){for(var r=1;r=0||(a[t]=e[t]);return a}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var l=n.createContext({}),s=function(e){var r=n.useContext(l),t=r;return e&&(t="function"==typeof e?e(r):c(c({},r),e)),t},d=function(e){var r=s(e.components);return n.createElement(l.Provider,{value:r},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},m=n.forwardRef((function(e,r){var t=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),u=s(t),m=a,f=u["".concat(l,".").concat(m)]||u[m]||p[m]||i;return t?n.createElement(f,c(c({ref:r},d),{},{components:t})):n.createElement(f,c({ref:r},d))}));function f(e,r){var t=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var i=t.length,c=new Array(i);c[0]=m;var o={};for(var l in r)hasOwnProperty.call(r,l)&&(o[l]=r[l]);o.originalType=e,o[u]="string"==typeof e?e:a,c[1]=o;for(var s=2;s{t.d(r,{Z:()=>h});var n=t(67294),a=t(86010),i=t(53438),c=t(39960),o=t(13919),l=t(95999);const s={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function d(e){var r=e.href,t=e.children;return n.createElement(c.Z,{href:r,className:(0,a.Z)("card padding--lg",s.cardContainer)},t)}function u(e){var r=e.href,t=e.icon,i=e.title,c=e.description;return n.createElement(d,{href:r},n.createElement("h2",{className:(0,a.Z)("text--truncate",s.cardTitle),title:i},t," ",i),c&&n.createElement("p",{className:(0,a.Z)("text--truncate",s.cardDescription),title:c},c))}function p(e){var r,t=e.item,a=(0,i.Wl)(t);return a?n.createElement(u,{href:a,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:null!=(r=t.description)?r:(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t.items.length})}):null}function m(e){var r,t,a=e.item,c=(0,o.Z)(a.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,i.xz)(null!=(r=a.docId)?r:void 0);return n.createElement(u,{href:a.href,icon:c,title:a.label,description:null!=(t=a.description)?t:null==l?void 0:l.description})}function f(e){var r=e.item;switch(r.type){case"link":return n.createElement(m,{item:r});case"category":return n.createElement(p,{item:r});default:throw new Error("unknown item type "+JSON.stringify(r))}}function v(e){var r=e.className,t=(0,i.jA)();return n.createElement(h,{items:t.items,className:r})}function h(e){var r=e.items,t=e.className;if(!r)return n.createElement(v,e);var c=(0,i.MN)(r);return n.createElement("section",{className:(0,a.Z)("row",t)},c.map((function(e,r){return n.createElement("article",{key:r,className:"col col--6 margin-bottom--lg"},n.createElement(f,{item:e}))})))}},48659:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>u,contentTitle:()=>s,default:()=>v,frontMatter:()=>l,metadata:()=>d,toc:()=>p});var n=t(87462),a=t(63366),i=(t(67294),t(3905)),c=t(52991),o=["components"],l={id:"learn-archive",title:"Learn Archive",sidebar_label:"Archive",description:"Archive for the Learn Section.",keywords:["Gov1","Gov1 Treasury","Launch","Redenomination","Controller"],slug:"../learn-archive"},s=void 0,d={unversionedId:"learn/learn-archive",id:"learn/learn-archive",title:"Learn Archive",description:"Archive for the Learn Section.",source:"@site/../docs/learn/learn-archive.md",sourceDirName:"learn",slug:"/learn-archive",permalink:"/docs/learn-archive",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-archive.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-archive",title:"Learn Archive",sidebar_label:"Archive",description:"Archive for the Learn Section.",keywords:["Gov1","Gov1 Treasury","Launch","Redenomination","Controller"],slug:"../learn-archive"},sidebar:"docs",previous:{title:"Hyperbridge",permalink:"/docs/learn-hyperbridge"},next:{title:"Governance V1",permalink:"/docs/learn/learn-governance"}},u={},p=[],m={toc:p},f="wrapper";function v(e){var r=e.components,t=(0,a.Z)(e,o);return(0,i.kt)(f,(0,n.Z)({},m,t,{components:r,mdxType:"MDXLayout"}),(0,i.kt)("div",{className:"sticky",style:{zIndex:1}},(0,i.kt)("br",null),(0,i.kt)("p",null,"This section contains archived pages. The content in them no longer applies to Polkadot but can\nstill be relevant for parachains and related projects.")),(0,i.kt)(c.Z,{mdxType:"DocCardList"}))}v.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/43cda9e8.112598c7.js b/assets/js/43cda9e8.112598c7.js new file mode 100644 index 000000000000..d53e99d6d7d2 --- /dev/null +++ b/assets/js/43cda9e8.112598c7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6357],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var o=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=o.createContext({}),d=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=d(e.components);return o.createElement(l.Provider,{value:t},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=d(n),h=a,k=p["".concat(l,".").concat(h)]||p[h]||c[h]||r;return n?o.createElement(k,i(i({ref:t},u),{},{components:n})):o.createElement(k,i({ref:t},u))}));function k(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:a,i[1]=s;for(var d=2;d{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>k,frontMatter:()=>s,metadata:()=>d,toc:()=>p});var o=n(87462),a=n(63366),r=(n(67294),n(3905)),i=["components"],s={id:"learn-guides-assets-ledger",title:"Polkadot-JS Guides about Asset Hub Ledger App",sidebar_label:"Asset Hub Ledger Guides",description:"Polkadot-JS Guides about Ledger and the Asset Hub.",keywords:["asset hub","ledger","assets","statemine","statemint","polkadot-js"],slug:"../learn-guides-assets-ledger"},l=void 0,d={unversionedId:"learn/learn-guides-assets-ledger",id:"learn/learn-guides-assets-ledger",title:"Polkadot-JS Guides about Asset Hub Ledger App",description:"Polkadot-JS Guides about Ledger and the Asset Hub.",source:"@site/../docs/learn/learn-guides-assets-ledger.md",sourceDirName:"learn",slug:"/learn-guides-assets-ledger",permalink:"/docs/learn-guides-assets-ledger",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-assets-ledger.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-assets-ledger",title:"Polkadot-JS Guides about Asset Hub Ledger App",sidebar_label:"Asset Hub Ledger Guides",description:"Polkadot-JS Guides about Ledger and the Asset Hub.",keywords:["asset hub","ledger","assets","statemine","statemint","polkadot-js"],slug:"../learn-guides-assets-ledger"},sidebar:"docs",previous:{title:"Create Asset Guides",permalink:"/docs/learn-guides-assets-create"},next:{title:"Architecture",permalink:"/docs/learn-architecture-index"}},u={},p=[{value:"Requirements",id:"requirements",level:2},{value:"Installing the Ledger Application",id:"installing-the-ledger-application",level:2},{value:"Using Ledger Live",id:"using-ledger-live",level:3},{value:"Using on Polkadot-JS Apps UI",id:"using-on-polkadot-js-apps-ui",level:2},{value:"Adding Your Account",id:"adding-your-account",level:3},{value:"Working on Relay Chains and Asset Hubs",id:"working-on-relay-chains-and-asset-hubs",level:3},{value:"Confirming the Address on your Device",id:"confirming-the-address-on-your-device",level:3},{value:"Using Polkadot-JS Apps",id:"using-polkadot-js-apps",level:4},{value:"Sending a Transfer",id:"sending-a-transfer",level:3},{value:"Receiving a Transfer",id:"receiving-a-transfer",level:3},{value:"Teleporting",id:"teleporting",level:3},{value:"Support",id:"support",level:2}],c={toc:p},h="wrapper";function k(e){var t=e.components,s=(0,a.Z)(e,i);return(0,r.kt)(h,(0,o.Z)({},c,s,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"sticky",style:{zIndex:1}},(0,r.kt)("br",null),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,r.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,r.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,r.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Because of required WebUSB support, Ledger wallets currently only work on Chromium-based browsers\nlike Brave, Chrome or Edge.")),(0,r.kt)("p",null,"The Asset Hub has a ",(0,r.kt)("a",{parentName:"p",href:"https://www.ledger.com/"},"Ledger")," application that is compatible with the Ledger\nNano S and Ledger Nano X devices. The Ledger devices are hardware wallets that keep your private key\nsecured on a physical device that does not get directly exposed to your computer or the internet."),(0,r.kt)("p",null,"The Statemine application allows you to manage your KSM and other tokens on the Asset Hub parachain.\nIt supports most of the available transaction types of the network in the XL version of the app\n(details ",(0,r.kt)("a",{parentName:"p",href:"#installing-the-ledger-application"},"below"),")."),(0,r.kt)("p",null,"If you have trouble using Ledger or following the directions below, you can try searching for your\nissue on the ",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/"},"Polkadot Support page"),"."),(0,r.kt)("admonition",{title:"Intro to Ledger Explainer",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Please check out our\n",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/7VlTncHCGPc"},"intro to Ledger video on YouTube for more information"),".")),(0,r.kt)("h2",{id:"requirements"},"Requirements"),(0,r.kt)("p",null,"Here is a list of what you will need before starting:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"A Ledger Nano S or a Ledger Nano X."),(0,r.kt)("li",{parentName:"ul"},"The latest firmware installed."),(0,r.kt)("li",{parentName:"ul"},"Ledger Live is installed and at version 2.29 or newer (see settings -> about to find out if you're\nup to date)."),(0,r.kt)("li",{parentName:"ul"},"A web browser is installed that you can use to access\n",(0,r.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI"),".")),(0,r.kt)("h2",{id:"installing-the-ledger-application"},"Installing the Ledger Application"),(0,r.kt)("h3",{id:"using-ledger-live"},"Using Ledger Live"),(0,r.kt)("admonition",{title:"Ledger Nano S",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"There are two versions of the Statemine app: the normal (light) version and the XL version. The\nlight version has smaller size but it supports only basic functionality. If you want access to all\nthe supported extrinsics, you need to install the XL version of the app. You can see\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/Zondax/ledger-statemine"},"here")," a full list of the extrinsics supported by both\nversions.")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},'Open the "Manager" tab in Ledger Live.'),(0,r.kt)("li",{parentName:"ul"},"Connect and unlock your Ledger device."),(0,r.kt)("li",{parentName:"ul"},"If asked, allow the manager on your device by pressing both buttons on the YES screen."),(0,r.kt)("li",{parentName:"ul"},"Search for Statemine in the app catalog."),(0,r.kt)("li",{parentName:"ul"},"If you are using a Ledger Nano S, install either the normal (light) version or the XL version. For\nLedger Nano X, there will only be one app available.")),(0,r.kt)("p",null,"Please proceed to the ",(0,r.kt)("a",{parentName:"p",href:"#using-on-polkadot-js-apps"},"usage instructions")," below."),(0,r.kt)("h2",{id:"using-on-polkadot-js-apps-ui"},"Using on Polkadot-JS Apps UI"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The Polkadot extension doesn't support Statemine Ledger accounts at this point, so you need to add\nyour account on Polkadot-JS UI as described below.")),(0,r.kt)("h3",{id:"adding-your-account"},"Adding Your Account"),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"These instructions will guide you on how to add a Ledger account that's ",(0,r.kt)("strong",{parentName:"p"},"only")," available on the\nAsset Hub. If you want to use the same Ledger account on both\nPolkadot ",(0,r.kt)("strong",{parentName:"p"},"and")," the Asset Hub check the\ninstructions ",(0,r.kt)("a",{parentName:"p",href:"#working-on-relay-chains-and-asset-hubs"},"below"),".")),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI")," already has an integration with the\nLedger application so that your device will work with the browser interface after installation. The\nfunctionality is currently gated behind a feature setting that you will need to turn on."),(0,r.kt)("p",null,'In order to turn on the interoperability with the Statemine Ledger application, go to the "Settings"\ntab in ',(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI"),'. Find the option for attaching\nLedger devices and switch the option from the default "Do not attach Ledger devices" to "Attach\nLedger via WebUSB" (',(0,r.kt)("strong",{parentName:"p"},"but see note above"),")."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Dropdown selector for allowing Ledger connections in Polkadot-JS Apps UI Settings",src:n(54035).Z,width:"531",height:"235"})),(0,r.kt)("p",null,'Click "Save" to keep your settings.'),(0,r.kt)("p",null,'Now when you go to the "Accounts" tab you will see a new button that says "Add via Ledger". Ensure\nthat your Ledger device is unlocked, Ledger Live is ',(0,r.kt)("strong",{parentName:"p"},"closed")," and you have\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169778-how-to-switch-network-nodes"},"switched over"),"\nto the Statemine application, then click this button."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Add Ledger button in Polkadot-JS Apps UI",src:n(26789).Z,width:"488",height:"83"})),(0,r.kt)("p",null,"A popup will appear asking you to select an account and derivation path."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Picking an account and derivation path",src:n(33414).Z,width:"1894",height:"643"})),(0,r.kt)("p",null,"The first option lets you select an account. You can have multiple accounts on a single Ledger\ndevice. The second dropdown lets you pick a derivation path - think of it like a formula from which\nchild accounts are generated. If in doubt, pick the default option for both."),(0,r.kt)("p",null,"Once you confirm your selection, depending on your browser and its security settings, you might need\nto confirm the USB connection through a popup like the one below when adding the Ledger device for\nthe first time:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Display the device connection popup",src:n(57302).Z,width:"468",height:"461"})),(0,r.kt)("p",null,'You should now be able to scroll down and find a new account on the page with the type "ledger".'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Displaying the Ledger account in the list",src:n(78465).Z,width:"867",height:"70"})),(0,r.kt)("p",null,"You can now use this account to interact with the Asset Hub on\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI")," and it will prompt your ledger for\nconfirmation when you initiate a transaction."),(0,r.kt)("h3",{id:"working-on-relay-chains-and-asset-hubs"},"Working on Relay Chains and Asset Hubs"),(0,r.kt)("p",null,"Polkadot and Kusama accounts from the ",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs#polkadot-js-extension"},"extension"),"\nwill show up in the Asset Hub, even if they're not set to be used on all chains. The Asset Hub is a\nsystem parachains on Polkadot :polkadot}}"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"However"),", as mentioned above, the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs#polkadot-js-extension"},"Polkadot extension")," does not support Statemine\nLedger accounts at the moment, but the Polkadot-JS UI does. So, if your Kusama account is in the\nPolkadot extension, you'll need to remove it from there and re-add it on Polkadot-JS UI directly\n",(0,r.kt)("strong",{parentName:"p"},"as a Kusama account"),", as described\n",(0,r.kt)("a",{parentName:"p",href:"https://guide.kusama.network/docs/kusama-ledger#using-on-polkadot-js-apps-ui"},"here"),". After that,\nyou will be able to make transactions with that account."),(0,r.kt)("p",null,"To remove an account from the Polkadot extension:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Open the extension"),(0,r.kt)("li",{parentName:"ol"},"Click on the three dots next to the account"),(0,r.kt)("li",{parentName:"ol"},'Select "Forget account".')),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"As mentioned above, a Polkadot :polkadot}}")),(0,r.kt)("h3",{id:"confirming-the-address-on-your-device"},"Confirming the Address on your Device"),(0,r.kt)("p",null,'On the "Accounts" tab, find your Ledger-connected account. Click on the three vertical dots at the\nend of the row. This will open a new menu, here you can click the "Show address on hardware device"\noption to display the address on your device.'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Options menu of an account in the Accounts screen of Polkadot-JS Apps UI",src:n(83566).Z,width:"419",height:"478"})),(0,r.kt)("p",null,"Here you can scroll through and make sure the address matches to what is displayed on\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI"),"."),(0,r.kt)("h4",{id:"using-polkadot-js-apps"},"Using Polkadot-JS Apps"),(0,r.kt)("p",null,'Once you have your account loaded on the "Accounts" tab it should show a row with your Ledger\naccount. At the far right of the row is located your account\'s DOT balance. If you expand the\nbalance arrow, it will show details of your balance such as locks or reserved amounts.'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Account row showing empty balance",src:n(78465).Z,width:"867",height:"70"})),(0,r.kt)("h3",{id:"sending-a-transfer"},"Sending a Transfer"),(0,r.kt)("p",null,"If you would like to send a transfer from your account housed on the Ledger device, the easiest\nmethod is to use ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI"),"."),(0,r.kt)("admonition",{title:"Transfers",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Transferring in this way sends tokens to another account on the Asset Hub parachain. If you need to\ntransfer KSM between the Asset Hub and\nPolkadot, see the ",(0,r.kt)("a",{parentName:"p",href:"#teleporting"},"Teleporting"),"\nsection below.")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},'Click on the "Send" button next to your account.'),(0,r.kt)("li",{parentName:"ul"},"In the second input, select one of the accounts from the drop-down menu or paste the address that\nyou want to transfer funds to."),(0,r.kt)("li",{parentName:"ul"},"In the third input, enter the amount of KSM you want to transfer."),(0,r.kt)("li",{parentName:"ul"},'Click the "Make Transfer" button.'),(0,r.kt)("li",{parentName:"ul"},"Confirm the transaction on your device."),(0,r.kt)("li",{parentName:"ul"},"A green success notification will be displayed when the transaction is included in a block.")),(0,r.kt)("admonition",{title:'The "Transfer with Keep-Alive Checks" toggle',type:"note"},(0,r.kt)("p",{parentName:"admonition"},'Note the "Transfer with Keep-Alive Checks" toggle. While this toggle is in the ',(0,r.kt)("em",{parentName:"p"},"On")," state, your\naccount will be unable to make transactions which would get its balance below the existential\ndeposit. This prevents reaping of accounts with low balances. If you toggle this to ",(0,r.kt)("em",{parentName:"p"},"Off"),", you will\nbe able to go below existential deposit balance, causing your account to be deleted and any dust\namount of KSM to be burned. If you encounter KeepAlive errors when making transactions, this might\nbe the reason."),(0,r.kt)("p",{parentName:"admonition"},"A detailed guide on doing transfers is available\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-guides-ledger#sending-a-transfer-with-ledger-devices"},"here"),".")),(0,r.kt)("h3",{id:"receiving-a-transfer"},"Receiving a Transfer"),(0,r.kt)("p",null,"In order to receive a transfer on the accounts stored on your Ledger device, you will need to\nprovide the sender (i.e. the payer) with your address."),(0,r.kt)("p",null,"The easiest way to get your address is to click on the account name which will open a sidebar. Your\naddress will be shown in this sidebar, along with some other information. Another method is just\nclicking on your account's avatar icon - this immediately copies your address to the clipboard."),(0,r.kt)("admonition",{title:"Your Asset Hub address is the same as your Relay Chain address",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Make sure that you clarify to the sender that you wish to receive your tokens on the Asset Hub\nparachain, otherwise (if you're receiving DOT\ntokens) they could be sent on the Polkadot\nchain.")),(0,r.kt)("admonition",{title:"Before giving anyone your address",type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Make sure it matches what's really on the Ledger by\n",(0,r.kt)("a",{parentName:"p",href:"#confirming-the-address-on-your-device"},"confirming the address on your device"),". Some malware will\nintercept clicks and clipboard requests and can change your copied value in-flight, so being extra\nvigilant around copy-paste operations makes sense.")),(0,r.kt)("h3",{id:"teleporting"},"Teleporting"),(0,r.kt)("p",null,"Teleporting allows you to send tokens between the Relay Chain and a parachain, or between different\nparachains."),(0,r.kt)("p",null,"The Statemine Ledger app doesn't support the ",(0,r.kt)("inlineCode",{parentName:"p"},"teleport")," extrinsic at this point, so an intermediary\naccount needs to be created first."),(0,r.kt)("p",null,"To teleport KSM to the Relay Chain follow these steps:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Create an account outside your Ledger. Instructions can be found\n",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-accounts#account-generation"},"here"),"."),(0,r.kt)("li",{parentName:"ul"},"Transfer the desired amount as described ",(0,r.kt)("a",{parentName:"li",href:"#sending-a-transfer"},"above"),". If you want to send exactly\nthe amount you want to teleport, don't forget take into account the fees for teleporting that will\nbe deducted in the next step."),(0,r.kt)("li",{parentName:"ul"},"Teleport your tokens following the instructions you will find ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-teleport"},"here"),".")),(0,r.kt)("p",null,"Teleporting ",(0,r.kt)("strong",{parentName:"p"},"to")," a Ledger account from a non-Ledger account doesn't require these extra steps."),(0,r.kt)("h2",{id:"support"},"Support"),(0,r.kt)("p",null,"If you need support, please visit the ",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network"},"Polkadot Support page"),"."))}k.isMDXComponent=!0},83566:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/ledger-4-6f7e09be831f4a82031a066b8f222a6c.png"},54035:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/ledger-fd53351628660be133bf903bbc63f682.png"},33414:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/add-account-8690ff195ced1f005f03c2b2bbef349a.png"},78465:(e,t,n)=>{n.d(t,{Z:()=>o});const o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA2MAAABGCAYAAABBuEwRAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAB46SURBVHhe7d0LWFVlvgbwFxQRUbkZWwgwcCaIzAOYM5aVjZKJNpM6x1G7TJeRjfWcptOYU9N5vKTVGU/WPDOdMwk6NU1pFycvMwlW6IyNdjOBU6NCR0EugiAIqIiCyln/b62199obUDRhb+P9nWc9e933xjmxePf3ff/P50htTVtIaBiIiIiIiIio+5xoOm6s6XyNVyIiIiIiIupBDGNEREREREQewDBGRERERETkAQxjREREREREHsAwRkRERERE5AEMY0RERERERB7AMEZEREREROQBDGNEREREREQewDBGRERERETkAQxjREREREREHsAwRkRERERE5AEMY0RERERERB7AMEZEREQ9qqy8HNu2fWRsuZL9cpyIqDfwOVJb0xYSGmZsEhEREXWvRx75uQpcs2fNwqxZM429wFtvvY0333oLMdHReOml3xl7yeMKsnDn4hxjIx4ZWb/G5HBjswM7d36B9z/4QK0PGRKGe++5B4GBgWq7paUF69avx759+9X2qJQUpKVNUuuiqakJr7/xBmpr69T27RMnYvTo69U60bfBiabjxpqOYYyIiIh6lBm6hBnIOtpHXqAmB0/Yt2GcGcBUMAOWbrBjpH6Gi+LiYnzw4YeOACbBbH/xfkyfNg39+vVDTs5mdZ4EMDOYDY8brgKX+7YZzCbedhvi4uLUdQ7qc2Wh0NjUdRwUv1wxDQv0t9VYz6lG9hNzkVmkDriKt2PjsjRjg+jScQ9j7KZIREREPUqClgQuIQGMQcx7fblOCzyT7nYGnKQ7kRGfg08KjG0LCVOf79yJUSmjHC1hiYnX4OTJk6ivr0d1dTUOlB5ASkqyOibh7HujR6uwJtdWVFSgoaFBXSPkHnKvoqKv1XZ7EqzWY+MGY1kch0z7k8iuMQ6rsKUFMSxxnpM1Dtvs05CpPr8Nk5eZ++1IsN6PQYx6CMMYERER9Tj3QCYYxLxNNSpKgIRoa1OTDVGxQPanXxnbTq2trSpMhYWFGnsAPz8/9O/fH2Vl5aqly8fHBwMHDjSO6oFLgposdXVHEBwcrK4xyb1Ky0rVteeVZMfSSUXIXGd8toKNyIQdWXOv07dFeBqWLU5D9ps52k9H5HkMY0RERNTjqqqqXAKZGcRkP3mXuCttxprOFh1vrLUnwctsFRPS+hU0OMjYQruwJcEsICDA2II6V64xyb3knl01ckwaUFKhgtaXn+Yg4ZYULT66iYxGQtE27HK0oBF5DsMYERER9aj/ev55zH3oYezY8bEKYM8+s1S9yrbsl+NE3SY8Cm4j0Ig8hmHMS506dQpH6utRWXUIpWXlKC45oBZZl31yTM4hIiK6XEnokgA2YsQI9coQ5p2KD7p26Ksu76jihU7Gh1m7FMpYsMajjcYWVDdG6c5oOn78OJqbm40tqHPlGpPcS+7ZVdUHi401ossDw5iXOXGiWYWt2roj2paPap4PCgpCSEiIWmRdb/73UefIuXINERHR5eKX8+dj7Ngb1boZyMwgJvvlOHkDfXxYYbm1P58+jmzyGMs4LIN0P5RuiDL2yyTBS8JUTEy0+vulra1NBTCThC3zbxwZH+Ye1uRew2KGuXR9PBcVFGOjVNdE6bJY+FFe+7FhBZ8gO34cRrlVXSTyBIYxLyJzatRrv4QCBwzAAG2RQa5nz57F9vrPMTHvLrXIuuyTY3KOnCvXmPNxEBERXQ7cA5lgEPM+I6fbkbB5tbNCoRTFKErDDUnGtoVZHXFX3i5H69iePXvVmC8JWzabDVcNuwp5efnqmFl9UUrZy7VRUVEqzMk1Qu4h94qPv1ptn1dBFhZsjkfGdCMoSuVHZMG+wlJsREriL87B5Nlp7ceSEXkA5xnzAhKuDlXXwN/fH76+7fOxhLCCY7vVetKga/FByhq1biX3kG6LQ23hHd6DiIjIG5ktYwxiXuwckz5Xb3oS9o/GIWuZM9z0yKTPl2SeMQv3+dSIugknffZC0tVQvjWS1i5dG0o+fQ6nW44hKmku7tz3lEsYe+36Zfiz36sIbBuIB1oeg4/2f0Ka/qUrQGTEULVNRER0OZB5xljSnoh6A4YxLyPf/Pj4+rq0Zn3991+gas8ban1QeAqaU5fi6eLfqO1FcY/hrYhlKOzzpdqe3PoTPHbqGbUupIWsTVvkmygiIiIiIvIe7mHMI/3ZysvLUVFx0NjqvaTwxqmWFhXEduzdjnc/flff3+CsBHSivghjg0fjsZjfqUXWS333GUeBCt8D6vXdj7dj+97d6l5yTxb1ICIiIuq9WvMq0TD7HVT5LjD2UFe0bCsx1npGj4ex48eb0Hj0KBoaG3BUe+3NGhobMTAwEK//7U+Y9txUPPRyBn78n9MQOeJ++Pj0UedEJz2Mp/btw327d6tF1me0/kwd80Uf/LB1Nqb95xJkvPw7TH3uafzpb1vUPeXeRETdonQLnl9TAP6WISLyPm3HW3Bs0VbUjslE89tfoU9siHGEzuX017U4POIl1P3gFfUq2z2hx7splpWV4eixY2o9cEAgYmOvUuu9jRTbkNL0UhFxzksP4i+f/8U4Auz9fRH6+Z3FsVN1iAxKwKjPPkO5McdGdP/+2PX976Ph5GH07zsATc1nEP/wHHVM/Oh7Y/DKI7/AiRMnMCQsVBUFuRD5+QX463t/VYOoO5rx/r33NmHlqlXGlqtJk27HQ3PnqnssfvppY6/TqFEpHd5XxrnJAO5du/KMPVAVlWQSUKmqJDq7pzDvK9zvY+rsvenb7CtkTl0ILF6PjA6qfp1PR4PSySBhbEcY7HclIcjYRUREnte8+n9x/LltOL33sLEH6P/DBIRsvNvY8lJeUECl+bV8NDywztgCgl+djoD7ko2tS8ej3RSbmk44gphoOtHkKH3a2zRpYSkgIECtjxtxq3oVNyfejO3N/8C1n4/E6IJb8GLp87g9zBmWZd3/82OIWdWK8MxGDD3kp10zwjgK3DriX9Sr3FveoztI6Nq4YX27RYKYScLP22+96XL8iiuuUGHJOnljSUkJ0u0ZSElOcTk3bdIkPPLzR9VxU0f3lGXhggUuIWvxokUux+Ua8eof/6heiXqfMuQuX4P8PC1ELX/BWLZoe63kHPPYC1id10m7lwSxtQVA5RZkOe7RiPw1zmvbX+96PDevAKvl8xinNOatsVzr3E9ERF3T+nkF6qetQcO9f1ZBLGzbHEeLWN8R/EqxK/pec4WxpnPf7i7dGsaOHj2Gw4cPq/Fh+/cXo7RUH99kVVpaqo7JOXKuXNMbnDx5Cn366F0R7/3BT7H+qQ14+aFMvPur9fhT5R9xpu2MOvZy+e/x3He+g9euvVYtst4v30jUbUC/fzZh/a8WIvOhn2PDU4vw0x9MUIfk3vIe3uSB++9Xr7m5W9SrhDIpXzvzJz/BHXdMUftMsn3jjTdg9+49xp6LJ0Hth3f8EP/85241mST1XtLadefUacbypHPeHEVa0pzHNpQbu01S2tk8/kQOsldor9a5a6zHtSVTyysmKaucuSkHT6hj7u/bU6qQWxgG++PzMP/xOUiNLMDbuWYckyC2FtXj52jH5PgM2Lau6jiQDZuA+TOSgMgJ2r0mIEYFrVXIDZ9hXDsP9vERqNy6yRGqynK145Dz9fcOK9yCSv2QCndZW22YaVw7f4YNuSvdgyIREXXkbMNJHP3l+6pL4smN+vxs4eXz0fxaHs6U1KvtvtddfFOTPL+cz7Ys6OXjTNbnprZYnonqebtCe1Y+4Tz+xCbX6bet935inftDt+f5fS8KYX97EP1ujVWvst0Tui2M1dfXo6y8DNU1NWp8WPPJZpxt09KDG9knx+QcOVeuqa3tmT6aniSzy0spenG4/hDefO8lrN7wPNb//XXEDYhT+8XVA+Kxc/terJ6tHdcWWT8b6mccBc4E9UW23zvYlLoU2Sm/QZ2P/lee3Ns6g703kFAkLWDlFfp/cFVVVaq19Kabxqptd9LS5h7SiC6Wo9uh2Wq6OA6ZdvPBondpLE5foR/LGofizUXqiGJOErrYuHZ2OTIdc9Zo1Bw8wFLz3ll2FC92DV3ZK8txtzruuS4YyWPNboVBiEuI0H6uI2rcV2PeduRr4eqOFLPTYQxStcBVufWLLoSiICTfpYWo1BhjW9szPBGRxroEva8LIpA6xfne8jk6JWFPhTwiIjqXE6u+wOHvvIim5duNPUDE6SVo+XsJTrziHLLRN/7iWnjkubmgxO54bmalF2PBEznQI5VzKIB67m1YgYySha6Ba3MWymcbxxenoXDlbxzPRTX3m+PeKzCuJMdtzjgP8fGB/3jt73DHdFPdr9vCmIyFCriI8TlyzaBBg4ytb68zZ844wliWFsI+/nILDlTtw7OvPo5nYp/DIzGP4v7IB/H7a1bgt0+/hd35xWqR9eaJwWi5LhCnRg3EsfED8Fv/hSj3LcHOPh/h9X7/re4p95b36A6bN7/v+CbDusi4rvO58sorVQuotIo1NDQiMHBAl8dxyViwmbNmt3tfGcd2LvJeMg5uxIhrHWPQqLf5ChtWAhnzLOO/kuxYOikHq+XBUfAJspGGu6cYR8PT8Iv0eH1dU71zGwonLXGOPUu6ExmOw9XIflOCmh0jjT369UDmOkvL2aQbnMe9TOORKu0zhxphyRAcZglUXVOWa3Q1XGlp+Wo8ov0L2RBmvbn13sOu11vpzC6MpcZ+IiLqUMtHB1B7QxYa7Rtx9ohePbtPTDAizi5FyyflqquiVd/4IcbaN2Ob8mtsNMZRV29ajWzrc1HbO3meHVi50dl6Fm/HVMdz8wZMRhHK1cPhK3yyGZg823wm69cmqHXPad1Vibpb/4BjC7eoV9nuCd0WxqRwxLBhw1SRjq6Sc+WaCy068W0jWXxhYwCWNwxA7Bm9K6NVcb9W/HtkDRYOrZOeij2uszFjycnn+La7iyRYWYPWkqVLVZgSnY0Zc289k0If1ntIgJPxatYxbdTL1FSgWHsIZNqd/38hywKjdav6YLH20Ig2Hgo625XOFurq8iIkRFubs2yIijVWUQPtMLIXu97bvtLSsvYtZ4awt2uMrojpEy4gyBkta9p1M7VfIflrOW6MiKgzDfe9qweFz5zd+vxv/y7CD8zD6X1HUHfzSmOvTsaL+Qxw9qi6ELYpd2NyURbs6rnm2ttDnovYvNDluXenPatrrVvqmRyPaOuDIjwKzqeuZ5x6z/XTu293l24dM9a3b18tXMVgcBdauuQcOVeu6Q1kTJeP0QRqnzofN46cgKsivoP/eGA5BuU9g367V8Dv6zfgv/0xPLpoFq5NjlOLrM/duxevVFbit2VlePLrA3j01BJEn43F6DO34N6Wf1P3lHubY9K8ycGDB1Uwktaw4OAg1U3RDFtCgpUZstLnOKtEXghrAQ+5x+DBgzHp9tuNo9R7xSMjyzXIy7LMbA37hhxdGK3L3OuMo94tKNTZZdGhoc7ZunVORjfEdC1QdVRdMShUi67VqLPevJN7x6RKKJPxbFXYs59pjIjIXd+4EPhGOP+uDrg/BaE5P0XbsVOon7ra2OvkN+Kb9Iu/DhnqebYCGfHmF5qWcWOTlrR/7m2w9BK5zPjf4do2577dXbo1jAmZhDioC13DpPuYnNtb+Pn5OcLYFSFDMTv917j78SxMu/Ve+B51FjrxbdyH0Tddg3veHKMWWS+yVEks1tYnt/4EUw48iilVGQhr0/+jk3vLe3gTCV15+XmIjopW2xEREaqb4vbtO9R2dzALgSx/4UUW7+jN1DduZveI9lQrWFG50Q9ep1rLDLboeBSWW6tuVKPCUegzHNphFB90HZh8OQlKuQnJlVvwnqNgRxly1xYgcvz1XRy7VYU6x39e2rXWboraHa5OqkLuJnNeskbk77B0aZbqjNbKjo0l2FMZgcTh7WIdEVGvN3DReNUKNvg3kzHwV7cg+JVpar90WTy9x/qc0l2aLoo2TF4mQWsJJiMHn2i/wuW5iJIKl+dml3X0TFatZZ7lNyoSYX//GQYtmaBeZbsn9Ej6ae5CifXmZmfrSG/Qv7+/Y0zX61W7MO1//4iH9r6LH2uvrVfP1tKU3qrVmvgzLNj3FH62+z61yPrD0XqY6aMFrvsjI7Vr0rVrf6XdY452r3fVMbm3vIc3MUvLp6bqFR+ldezee+7B2++8027cl4w/62w+sws1e9Ys9fq7l15yaYWj3uQ6TE2PR/ZiayUovQqUqnqoxoAZ48dETQ5etHQztI0eh4TNC50VEgs2ItNxWHtIzXYdmCxhTSpIuVeO8l4xSDUqKOrl5fXKinc7Cnq4GfZdFd6yVHdCvdiH3r1Qlu0IS5+BZC2gma1bMalzkAo5X46vQl2CdGM0xpENm4CZSc4xYzLezDbjLiQzixERdcjHrw8CH70Bg569TW0f/fdsNblzR/pcZPEOoSoiOgp2aIzx1TckaU8+owvji5bnXLvzO2U8k980z9WemS90sYtjd2trw6mtWiw06jr0hB6Z9PnAgQM4fp75xAYNHKjGi/UWLpM+73kHfzm82zgC7L3xlxjQ0ozmpjqEhsdjzGejUH5S7xsc3T8an35/Fw42VmGQ/0C09jmNaz52zlP2oytuw6rE5d9o0udzTdgsZek7C0nmRM0lJQc6vIc5KbQ7CUjukzVL18IlTy9GbKw+MOdckz6b50pLm9xHyti7j1+T+coWLlqsWsk4dqy3cFZ6MgcYq+pNliqI0rXQOfhYPz9brachI70YmdZJn1XFxBx1VAYlZ8RmYVv0Ckc3R1Wt0RLgEtKdx9T7Ysll022x2zUWYPXKOtzMqolERN9Iy7YS1P3gFbXeN+EKnC50TvYshux6GH7JEcbWhZIvFudavnyU7v6WisBqomZLiNKejeYz01HB2HyGnueZPDndjuKVnp30WeZqkykCTEM+zeiW8vbukz73SBgrLCzC6TOn1bpUS7TZhqr16upDaDZaKmSsWEK8s3pZb1BZdQiBWhh7rfILzPv6L2rfzcGxsDcH4T9enouzZ88gY/ovUXFdA145qAegB6+cgzn1ITiw83n4+PRBwm0v46GmTfhHw+fq+AtXL8R9kf+qJnyOjND/nYno0pOHyGpLGKPO6HOYYcY8pBrft0nBj7cxw6UcPhERXTgzjPmGBCD0/fvgd/2VaH4tH02//wytOw9i6PGFF13Ao7eRf7eGB9YZW0Dwq9MRcF+ysXXpeCSMyYTO0lJjG2pD0ODBxl5d49GjqD5UjYCA/og2ut/1FidONKO+oUG1ju1oKMGhlmP4cfhIpD/7I+wq/FidE+AfiB2rSrG5Vv9GftKQNGxfGYszrXpLY1DkjUiaugHv1mRjaL8rMDZ4tPq3DgkO1u4boM4hom+m3Td86ttAz36Dd1mRcWFrLePEkhjEiIguBSm/Xjv6ZYT+9R74T+ldjRqX2umva1E//U019q5vYjhC1s1G36svzbQAVh4JY9S52to6+Pj6uhQvWfqHx9Tkz2LE8BRkzFyIp9/Su+gtmrUIAbufwbEavUtfROI9uPrWF9W6OHv2LNq0ZcgQ/m9KdOmcp6sGERERfStIa2O/cY75ay45hjEvJN0VpZiFWV1RJmz+n7XP4njzMdyT9hAe/J90FBTnq2NJccnYOG8lKgpWoG+/QYgd85S213mdjL9i90QiIup9GpG/ZhXqxjq7xPYoSwtw5LkK4FwqauzlHiSmd1zwpjFvDbIKE2HvaMqJC2UdM9uFL6N27vwC73/wgVqXL4elWFdgoD7vbEtLC9atX499+/ar7VEpKUhLm6TWRVNTE15/4w31ZbW4feJEjB59vVon+jZgGPNC0pp1qLpGFdvoqLz/xEW3uYSxD57+UK1byT2kKMhQW3ivmiKAiIhI59kwJmMh/xHaAyHM1FNhzL1btgpmwNJO5pMqLi7GBx9+6AhgEsz2F+/H9GnT0K9fP+Tk6BUbJICZwWx43HAVuNy3zWA28bbbEBfnNiWwe/EIpeOg6Fq8yXqOe68Hi3g7Ni5LMzaILh2GMS8m3wKd0n4RDdR+eZ21lNTcsXe7SzfFsdfcpNaFr4+PqlTpr/2CY9dEIiLqnfQglmvMW6RapoaXYPUmIDF8C3LVFBb6WEVVQMYyhNE6hlEPVBNg27oF+legQLKl+IwKOFur9A3IZOcShFzfW7shZqpKoW77Iyc4g5EEKbfPZg/djveQ6Hhv9b7BEris8/aZ76mtGmHMlgTkFxifyfKztA9jejEd8+fq6tjN9tVg9QBTPttajVbnHqaEBKq1f/4z0ibprV9yXIKZzaYXP5Lw9vnOnWpfRUWFS5ATEuZqa2tdWs+UjsbuqqBY3D5sxVo+vxHi4lyq6Wo4Fph6iHsYYxOKF5EwJYU3pBKiFOGQbofSynVT4s2qNUwWWZd9ckzOkXPlGgYxIiLqvYKQfNccpEbqIcbROlW5BXtC52D+4/OcQaxGC0WyLcsM7a/xgrXILdVPF5Vb9yAsXT9uHx+B/LXGpOSlW7QgZtOClnmtTU1wXqbeex5mareSEDjfEsT2JBjvrS0zteCVleuY3rzdZ1O7LO9tBjGb9vPo95CfzzqBuqhCfo0WuMzjNWvxvPU9HJxVTR330s5d7ZjovTP6BPcJ0dZ0YkNULJD9aft5rVpbW9HQ0ICwsFBjD+Dn56eGYpSVlatgJkMyBg4caByFCl319fVqqas7gmDtbxq5xiT3Ki0rVdeeV5IdSycVIXOd8dlkTkjYkWWdViQ8DcsWp1nmuCLyLIYxLyMVEGXMl8wRBrSpXz6NjY2OX1Syrv9CalPnyLmsmkhERNSRCCQOd3bSi0nVgoi1255MYG6sOiTd5Oj2FzQ8EZHan+x1HWWWYRO0UNPJXHmlXyAXE3CHpctiTOoMJBdsR77jXq6fTYlMRJy5KygJd0soc3S5DEJcgvt8URFInWL+PFooHCvh8v/08GjRmKe9b9IMl3slT5kAbP2i3bkdibvSdQoPW3TnVfskeJmtWkK6JgYNdv6c7mFLgllAgPPvGDlXrjHJveSeXTVyTBpQUqGC1pef5iDhlhRjniuLyGgkFG3DLsdE/USewzDmpWT8WGhIiApbw2KiERd7lVpkXfbJsQud0JmIiIj0LnzPL39BWyzd9s5n2PVIjSzA2+q6F1xa09w11mlRoHILsoxzL/i9XEirln4PZxdJkw1h1jwXHNZheGw8ol1XsNbyWbTFpftjLxMeBbcRaEQewzBGREREvYIZwpzdDWe0bxnrlN4dUXU5TALy10qoWWNp6XIjY8TUe1iXjottdMwMYWtRrbo/6t0mL5qMEWv3eTpp2XNTfNC1Q191eUcVL3RS1dnapVDGkTUedf4jSTdG6c5oOn78OJqbm40t7X8j7Vy5xiT3knt2VfXBYmON6PLAMEZERES9QCOKC6vUmLKuhpDOqO6OxhiuPfvbp7GgMBtQWWcZ23URSv8P+Uag67xCo1srWEMdKt1byzRBoVqIqzlyEZ9HHx9WWG7tz6ePI5s8xjIOyyDdD6Ubooz9MknwkjAVExOtuhzKmHcJYCYJWyEhIWqR8WHuYU3uNSxmmEvXx3NRQTE2SnVNlC6LhR/lqS6LLgo+QXb8OIxioQ7yAgxjRERE1GtUO9KLFNm4gK6DMo/YcqOYh2gswZ7KDsZ9CbNLo7WYhvv1XWENdKqAiHs3xSrk7jTvWIbctQWIHH99u6AZlHITkiu34D1LwQ7VSrjGWgykYyOn25GweTWyzTwmRTGK0nCDtRKhQcZ6fW/0aOzK2+VoHduzZ68a8yVhSyooXjXsKuTl6f/q0gImlRSl+qJcGxUVpcKcXCPkHnKv+Pir1fZ5FWRhweZ4ZEw3gmLSnchAFuwrLMVGpGri4hxMnp3WfiwZkQewtD0RERF9KzhKz0uXvNFH2s/DpcrBO8dKJc+Yg7Adq5Abrpd5V9UWYSn57jaXl3tZfGvZe70svnWeMbdS8o6S95oO5ghrX4re7f2klWxsHbLWVuvl7SH3qEPi+GrkmiHtXKXt3X52l1L753OOSZ+rNz0J+0fjkLXMGW56ZNLnSzLPmAVL21MP4TxjREREREREHsB5xoiIiIiIiLwAwxgREREREZEHMIwRERERERF5AMMYERERERGRBzCMEREREREReQDDGBERERERkQcwjBEREREREXkAwxgREREREZEHMIwRERERERF5AMMYERERERGRBzCMEREREREReQDDGBERERERkQcwjBEREREREXmAb58+fXD69Gljk4iIiIiIiHqCr5+fH44fO8pARkRERERE1IN8mo41tvn4+KC1tRVnzpwxdhMREREREdGl5O/vb6zpVBgz1omIiIiIiKiHsIAHERERERFRjwP+H+DzMQEznx96AAAAAElFTkSuQmCC"},57302:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/query-device-d7d9e7e7d28a34a343c59094db864a1a.png"},26789:(e,t,n)=>{n.d(t,{Z:()=>o});const o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAegAAABTCAYAAABUKpQOAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABu3SURBVHhe7d0PWFRV3gfwr+AojhqoDW5gj/gHcyEXdPmzCxrii7ip+5iV+67pZmirkW6mWb5umq9pmYUovZrlaqxE+lYmr63ogqw4K0zyJ4UMNgURVqEVXIWQSR3B95w7d3KYuTPMwB0cht/neca5cwXmzMy9v985555zpkdTY8MdEEIIIcSpuIn3hBBCCHEilKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0RfN0lauX28Cs351Wg+U4uW89fQ8t113Gm4AehaAIUbenh6wO2BfnAbMQDuY7zhHuaLnhOHir9NCCF3UTzpGErQBLoj5dB99g/cTi/DHa1O3Gu7HkoFek7zh2LWT6F4dKS4lxDSHVE8kQ8l6G7s1odFuLnjK7R8e0Xc03Fuo+9H7/ifo9f8YHEPIaQ7oHgiP0rQ3RCv4d5cf0LodnIU3l3Ve80EalET4uIonjgOJehu5odlmbi167T4yPF6PTsWfbbEio8IIa6E4oljUYLuJlrO/hvaheloPvWduKfzuI97AMqd0+D20CBxDyGkK6N40jkoQXcDt3MvQjv3/3Dnilbc0/l63K+EMvUx9Ix8UNxDCOmKKJ50HkrQLk44mR7/rF2jKeXGR2cqD8yiJE1IF0XxpHPRQiUuTOiG4jVdJziZOF4OXh5eLkJI10LxpPNRgnZh/BrRveyGksLLw8tFCOlaKJ50PkrQLoqPrrwXAzhswcvFy0cI6RoontwblKBdEJ+X2JlTH9qDl4+XkxDi3Cie3DuUoF0QXzSgK+gq5SSkO6N4cu9QgnYxfLk9R67oIydeTl5eQohzckQ8cR9yHxThQ4R7ObliPKFpVi6mMXS3TWvhug3sA3d/6Yn+t7++jDs/tD1Ss0cfBXr6DwTYvanms1fQUn9DfGQZX2u3f8EC8REhxJnYGk9s1XvScHj+aYb4CGj4/UHcPFYhPuo4V4snlKBdCL8Go/3N5+Ij6/q9NhHKeWPFR601rj2GH1KLxUeWecwYjfsSHxUftXbz8Dk0/MG20ZXKT59wyjV2azPWYWlKORCzCvviAsS9tihF8pyNyMRIxG1di1iVuJvYqQ6Za5cjmX0Esf/1EeLGiLtJp7AnntjKa+8s9GKtZ4NbeZdQ/9Rn4iN5OGs8sY8+htjWxV2nxoYFv8PTL+5CUaO4z9Hqq5D7xQ5sWL4ET8/5HWbz2zOLsHRNAlIzSlHbLP4c+RH/ijdb9RxtOWu4Deojblnn7uclbpnrMUgpbrXNnnJbVXMYK4RjZRFSz4r7XJIOJanL2XkxH6syasR9DnBmj/68Sy4Vd5DuRLbzspO1t9wlyWKeaUf8KEtdJP7uOmTWiTtl4HzXoJu1KNm/Gk8vXo1tn2hQcrkB6K+C92AVlNCitqIY6SkbsXThanxa6lxz8u41/v2rclCEPyjUdK3d+DUkuchV7uq8LFQLW1pkaiipENIRcp2Xna3j5Wbx41ghqwbb6EYhMrIck4tsS9CqKKze/RFStj6L4P7iPkdorkPuu69gQ1oVdAoVwmavQtKf2fO+n4ikxETs5tvb1yIuXAXFjSqkvfEKks9QkuZuH6+SbYUf3gXV1k1OvNy8/B3SXI7sDFZ1HRyCsKGsFq1WI7/tS+BdlAKBcxOR8vGH2DjFR9xHiHzkjCedrWPxxBNeA1n8yDmKnHpxVxtq1enI1fFGpLhDRk7Vgq7NfA/bClmLWTESc99MxLLpAfA2GX+k8BqJ2BcSkRAfAi80IHPzO7J2KXRVzfn6tqMcmt79ss2b3Dpc/tJcZDYCytBpmD5Gyc4wDbILqfJGSHvIGU/uhfaXvwF+Dwax+1Kk59hw+Yg1DDLTyoH+PvBxQOPVeRJ0vQbJn/CJ5kpEL3sZ09poGHiP/z0WRfFAXI7U/XZ0R7gouadCNCWdtHrT5V0Sf1IeHSu/Dvk5avYvO3ZCR8J/wlR4s71FOQWwsRJMCDEidzzpbB0pv3d4KALZffUhNcraGOukO31UaBj4Tp8I6SG3HSOZoLU5CcIF76d3iImvLguv8Qvga7Ng+rJ1l0uRmZqAVYvnixfJ2e8t3oid6ipo7RjIVZt3FEX8ycY8hd8E2TLASIng6TPgy7Z0LBCfNurONFzsTz7DHmirkLl9pX6g2etZLhuwW85fE7dsc7u448v23f72ClquSrdSm8vsW8De3vK3cqOYJWh28Ayeimg+eHNIKGJ5L/yZw8htqxLcXIei/UbH7zOLsGLzfhTZ0CujrVBj5xvLseCZ9h/3qFdjA3/eOTusdMmzSuhz/GdWIl18Pa2OcWPNDajUHMQ2o3LZ85o6zPT9nDMf8W/sQnaFld6MumJ8unk14hfoy/v0cyuxaX9x2wNBm7WoVO/ChhcXiQNJjZ7LMMBNImYJTJ5z9oIl2LBLjUqJQbAUT7qeDpV/YARmxrAc1HgUGaetNf0akJOlYTkyANPGDxX3mWjrOBRmKvDjS3pwmUSC1uK0hk+xUSJ2UgjMZ7gaYYl7/fKNSD5SilqFF/zGRSB4uCcLOqXI3rkaL31camPLVouyYv0ybcHjQ2F5bLAJn2BECv3+BSiRmkrXwl58wjoka2r05WAn/C3hP1xPy3fXxS3bXN+Ug9oRW1rdrifkCP+nXBiCnj9te27QzYxyXAn9wOzv8BufqmUPe8tvrJ5V7nLZvfeEUKHCxg4MBE/gXTA1yD5lJUNf1mDLi8uxKa0YlTeU8A6IQKR/XzSVHsSml9chvcrS0cuO132r8dwalgxKWYj2GorgiCD4KiqRw4/7FDta7l6hiOY9atAgv9jC85UXIJsnjjFTEdlGz1JJyhKs2r4fuRW30G9gACIjAuDtoUP1Kf1rcujlIG0pkl9iyZW9n9XsLA6MiEDgYCV7P1lFZs0SvMbHCJiozUlC/IsJSDtVhSYPlfA7o5RNKElLwIo3DqPS4kfAKi3sb67aqUYJe7MHDA9C5Dgf9LqoYc/1CpILLX8CWhY0l77Mn5MdG56G90iLkuxdWPUH9h5dFn/QFMWTNnk8ESA5qNRwkyL1c4Yb/3vt0ZF4IozxmMIbfzrksgRs8Ui6dBzprNKmGD8Z421OWvYxT9D1LBjw/MxbIw/pd1mmwJBHVyDpzx9i99ZEbHwpHivXb0NK4jz4s8xen/EZsm0KCDW4ICRYFUb52T49hwfiYaP5vQ4XLpo/UZNmP1JvTMbq7R9h38fsti5G6Pp0RXcaOj4iSrujAC2Xr6OHhwLK50LFvZ2j/eVvwOkv+YhtH8SG381evuGT4c/uq3k3lX5Xa801SEtkrdarCvhNX4XdO7ch6dV4LHk1ETt2JmJJOAvGrDUsRZu3B+sPVUE3MAQL3+HH/gasXLwCG7d+gPfXPwmVOgv54s+2TYmwqAhhK7ewWLJCW3byOKsSAJHREW1XXr1CELduG/btZq8ncRWWLF6FpPe3YXUMqzjzy0GHHDS6nbWcMxMSWAVAicjFiUjZnojVi+OxOpHFg63xiByoQ1nKe60rCJcO4u0dhahXDMW0Vz8w+50w1gDIlvwItMhPflOoQHmFPIuE3R8gaf0KLHlpA5K2b8PGJ1XIzioUf9bE5Sy8tZm1ZvpHYMnWD7HD8B5t/xBJi9n7y96j5PekWzsUT6xz8+6L+96eYjag1PRmTOr/jW/87/G/a68Ox0OfSEzj8+7PHEa25NU8HfL/cpBVRG1oyHaAWYKuL9aghN37TjK0RqxQRWHh3CCzgVwYHIPHhZhTjnMVlqrAxm5BJ3QteaJvb2GHzRRW3pncPGDJ6tkIdFDtxqnoWsSNjrm+mbdFWU14+kPoHduJk/3bW/6aXKEWiyFRCDZuXaqCMJ4Xv/E48iTmNOpOH0QaO/EUEc9jzewAKN3F/+DcVYhcuBZzJV8+a5Uf4N1aPvjNyqWINmnRKofPwH8ti2Knre0UQaGI5MexpvWlGkFzOfJyWHpWRCAsqO0wEDhzKWJHsmTcihKBU6fCj23pzpSJU9HkpTvNktdZHXyf/COWRJj0vqgiMH92CNsoNxp4YwhwCkTG/xFzA0zeMfY7/NzllSwzNcfxqYbFlYFTsfyFKPi2+uyU8Jv5MiuD1HvFnvPAXpTp+GfHKg0mxfSOmIe5QjEPI1ciKFM8sc592ABxS17t+rsdjoeeGB8TwY5OVpH/i8QYp3oNMvlltSEzbGjItp9b65PV0Brhfept9KW1wWeoPrrV1tvc2Sc7RVQUwuyJlF2ZQp7xfjc+L4Xu638J28rnw4T7TtHO8hvmPvubVShVCJvEu8ek5jTqcDqPJ1kFoh8JkU6mLEmH/kLiutKlAmTy4D1yMiItzDZTPhyKcHHbJh4hiI4SMrR5N7fYva2MmYwwD3Ffewz2wyh+f7neAddNDe/nSMRaiBtK/0Ah2daWVQq9AT+OG1BEITrEwkk6mL2PEh/Bj5/59Bj4GyfnHykRNl7fK9GK4TktfnZK+AfwuFWHc5Xm18wpnljXUv29uCWvdv1dGeKhYuxkxPZnR7fElKvqnMOsIatA8K8j227IdoBbvnFNsY4FA94aGROBsXbUEnX1VSjRZOHTlD3C4JSlLy7CCr5Eot107a/4uPcSN+7y8+k+ayz28OxI9G6t6d2TaHw9G9ce2yvucbx2ld8w95klhvHjzD9rr6AIYTSmLs+0ZVqH6vP8PgCjeLPSEjfzVpiuukbo/lSO9rPcvemusLvLKzBislBRMO3mLtEcZQlNPzrdZs06VJcXI/uLPUjelYBVy5cjfgFfetRRqnBOGKxWjuQX9QOqzG4v7tFfamjSQrg6eKVa/zjAH8Mkk6yeeQ8Ze201/DNXYtQIK+e3xGeHS2UQvjSxfA+WSpWR3YSlXZmmpibh3hjFE+uaL30vrK3Nl++0djMm9f/GN/73+N+1lyzx0J1VOGfy885kyhWPO4fY4/6T8fgvTXur5OV2vODuE1fnHWUnjQKRrGlvU36+WozUNfOFVb82bN+DtAw1TvNzRxWM8Q/ZU9X0ha/QTVCFCxZHhUipEQMDO1n9zN+oYd3ohHJ7oJ+41XG3si/ghz1FGHDwKXifX2Z2G7D/t+JPyqdd5TcMnrKUGBbvEi7XmM+JZq1IYSCQCl52zl28Vq+/Ouk7UOYTc2QoonlZjLu5bxQiW83OB5u70bSozEjC0gXzsWJtAnZ+koXML3mLVQm/XwY5sKZvuESlgNdg/ap/Fm+DFBCq0tfq9dd5VV5CxcR27LMTftEH3vZ+BD/c0rfePTyly2Z0G+BhXuGneNI2/sUXfG1tSzcpUj9nuLX3izTkiofeUdOEy0/CWBZxVkF9zmdIZ8e77/QoCz048nGrPVEgdBfxZFd0giVr3uU01ob6Px9ksykB6ez983t0BRL+9CH2fawfLMYH2zxmNGCnbZ4IHKM/+HNZgDLvXLKgpgi5PNAqWIt/mH5Xd+U2Qt7rP3wpT8XD0kvjKMY+IOtSn5z95dch/xhvXbLyeEkHWeHmpT+WpedEa9HUzrEkDXKvssRq69FT+Dlwt5tb900B8tmmefe9ND547bWUQlwTBoolIiXlI3Gw2AasfHaq0JvgMMLbHIq4N/Wr/lm8vRDVuvKv1bbqMbBdO3rbWDAVijnuGSRIlc3otizKsS0jZyd3POlsspXfIwRTWk25qkHuYTsuA/fpZWcFtDU3XFZD6OZmyY6PVlPGRCLQllrBBTUO8d+LeB6vz2W1c2XrpK7TNohbtvEdP1U/IKRwLw7Y1DuuRdEhPsjEjjK7MPcxXXs8qd3lN1xPRBAWvSUdZIXb5uf1A7BazYlWwVfoMS5DtZVv0mu4atStJfL20feJ19aIU22kNIqtQzv5hscIiVjfza3D6YIC9m8AosNtablpcVrNrwOrMHMFHyimgsL4nLjBKiPipvx84Tuc3xfhXOseTMt+4qs/389XW3mvGlBrNuWJfXbCR2C9t03bYD6rgz+n8KtnylAp7CCWdLt4YoX/JKMpV2fVOMCOcZunVnmy41XclMQaupVW8p2bAnXg3dz6gRc+eHySjde6DN1FSqX59Tb2pPknJU4Qa1RR+M8pvNbagPQkPv1Fv9uS2ox3kKhmJWCt50WP23F9zkW5hzlyqILj2Vt+w9xnRExEmLVuao8ghIXzI9R4TrQKw0bzem0dDh21MFdfW4xsfnyZ8vNHML/XpFucQlibc5SlqnbwCUY075jg3dz1+gqI7XMsm6C/bCo9E0JbzFrj4rb8PBE4jrcmtMjMKNTHhbao/DCKf26XDyPzjHSi1RYfFy9htDbMX5g4zloyaunk3lyH7KMSX5c6MABCxw9vDeXZVMpuq7vFE6t+nHJ1HB8c5FMe7Zha1d9LP1alvARlEoecrrQIeeK2FDc+Sq224Cg7SVi0MZ2qYo2h6Z6naf0VlM0NyN/5JtIu21R8IwoEzlmLuIfY713VYMvy1UjWVKHeZDUhvnJZ+rvLhUFoOhYYYl+a131GVlrRc+JQ9DDpxegqeLl5+W1nmG0ARIYEtXGiKBA2ST8Ay/g6kn/MLGGuvjbrPWxTm7SUG6uQlpCEnBsSf7l/KKYLFclypG7ZhxKTBFKr2YG1n1TZdvKa8UHkVD7ynJ1TaSUsobKyh7b1+gz6oq8wXbQcOXmtX4+24iDe2lkgPnIM30mzhJ4KneY9vJUmsZpafTky3z2oHxMgGInYJ0ey18aS+s73kG3yEQhl3qKBTuLFK0OmInYg2yjfiy37Sls/F0vOuTvX4ZMqqXfNB9GP86kzrDW04x2kSaxuVl+ehS1pDpor3oV0r3jSFk+MnxbDYkg5iorZMTPmKUy3dWqVhz8Che8xL0TqJ8Wtj9UaNbbtVEse4wbuG54f+9/ZhWdx/t9A4G+fw3Q/idFv2gpk/7UYVwcG49Ho4SwUMAN/gj4lx1BUU4HcjAycKLmE8yf2ITllP3Ib/wNzpzSjqPQqBgVNQfRIGyeau/XFiPGhGFRTjK//WYOygmNIT0vDF8dycPxvGdi/LxWfHsnB19VatLC3K+yFtxA/zrz5VFeUhr9XgP2txzHWAd8w4qya/3EFLaV29lxY4D7kPvR5wvJVSz4dS65pFYrHRkMxw47JhDXHsD31GzQiAk8uDIdvT3G/JQP6oDGLJefGaijH/Bo/u5/t6zscgfdfxMnCCzj/VRa+OJqD/LMV+OoIO4b/9xBKBvwOy2O/R+7XV4HhE/DkWEM3szu8/UfhxtcafFt1Fn8/dAh/yy1FZXkOPt6TjM9P1OORV+ZhWE4hzmMgxv5qIkbYsc6Ch1cLvj18CvkVFWjp/yv8fkEQBknMGDE/xhV4YEAjsk9UoOYb9nqOncK5ylNI37sH+w6VwvuZp/CzU8WsTMPxyBPBti2wUVuMz3PYk9ScwQl1Fv7KznOzW/0IPPowy5YKHzw8ohEn88px8Ztj+OLIMZz4pgoXCw4i5eNUpBxgsaLWB488dve5+w4NhPfFk8g/fwFfHT2EIycK8O35u2X2mrsUUxo14B9Bq3O5pwoP/8wD36iLUfFtjvBcX5VX6T+7j9KQ+/0E/PEZP/y9gJVdFYwZUcNhiGqKIYEY1ZSHL89dwpnsQ0JsKam8iC//koqPWTk/zypG7YMTMDPo7mUFiify8WAxhccWg2YWQ3gskZPd8URk7XN2H+yNnvlZ+Pp7BSLnPI9HfEyvqWpx/ngGiq6anvMeGMZy6lfqb/Cvcg2OZPE4cwYn9+/FrrRCeMwyHOOmv1eHogM5cPP/xUR9S5gFu9hwewZGqBD76iasnBkEXw8daks1wvKCvtErkLB5NoLb26p1Z7XcFxKxO3EV4qIDhEE+uvo61F6ug9bdE94BQQhW8SqHFvnvvootGay2rv/Nbk8x66fiVse19WUYcn5Zhr3lrj6lFsYeKFhlbqwtsyncRyKcf7EKb60ZzYn2Hr8Um9c/i+gA/vWldag8pUHJVRXC4zbg/Vdj4GNpKqVyJOau3yIc+35erNV1uRS5BZVQDJ+KlVu3IW6MTX3S0n5c+pOVb4p9o0QVAfPE18PO4/oqFGlKUds7mJV1G1abrqhijxv8WrD+HDS7ae8udqkcMw989TLhvFVohZjALytcZ8k7eGY8Ev5nXuuBanxBmGVvY+PCKASyc1pXpy9zvSoUcazMr0/xsdh7oBgyFa+z55obMRT8W+2Ez65OgVHTVyBpK3seQ739QR+TGSlKBD6diHdfnaf/3JvqUKJRo+hiE3r5BGHm4k14f077lpd0NXLGk87kmHKLvVv9J2OKLYOojbFjdc1rxnGmGOdu+iL2pU1Wj3GuR1Njwx1xu+vg3Vi7N+IDdZ0QbBVjZuP1xVPhZ+1aZDfRGLobLd9aGflkB17TdfO9W9s1aP5nA1q+k7g42A5uo+9H/4IF4iNCZFK8C7PfVgMxq7AvjhJue8kZTzi+tjZfvtPg+1cyZG1Bu1o86ZoJWlSftwtrd6hRK2TpoYhd9jLigrr39IhbHxbhh6UZ4iPn1ydpCnrNF4ZdESKbsn2L8NohLfzjWEucr0NO2sUR8YSvrc2X72y+cA0ttfLOLXC1eNKlEzSRdj0iuUt8nyufCtFPEyc+IkQm2kJsez4JuboALNy+CtEduOJAKJ7cSx1fsJQ4nd5rJohbzq2rlJM4m1Kkvb0fRZclpmfVFSN5w3ssOQNeU2Y47GsAuxOKJ/cOtaBd1A/LMnFrl7DysFPq9exY9NkSKz4ixB6lSJ6jX1tc0V+FAYYBqTfrUVuvT9peIfFY90IEvLv5AkZyoXhyb1CCdmHXo1LQfOo78ZHzcB/3APqpnxYfEWI/7SUNMg6qcby07MekzNfY9guIRHRsDGLFpYOJfCiedD5K0C6s5ey/cf1Xe3HnivNMROtxvxL9/voU3B4aJO4hhHQFFE86H12DdmH8oFWmPuY0KwLxcvDyUHImpOuheNL5KEG7uJ6RD0J5YJZQ07yX+PPzcvDyEEK6JoonnYu6uLsJ3j2lXZh+T64h8WtEyp3TqOVMiIugeNI5KEF3M509GpNGaxPiuiieOBYl6G5Id6QcN9efcOjiA3zRAD4vUfEofRUoIa6M4onjUILuxvgyfjd3fCXrWrt8Ldze8T+n5TsJ6WYonsiPEjQRasC6z/6B2+lluKOVWJ2pDcL3r07zF75FhlrMhHRvFE/kQwmatHL7eBWa86uF7qqW89fQ8t113Gm4wc66FkDhhh6eHnB7oB/cRgwQup3cw3xl/nJ0QoiroHjSMZSgCSGEECdE86AJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHE6wP8De/Jhar/OivYAAAAASUVORK5CYII="}}]); \ No newline at end of file diff --git a/assets/js/43cda9e8.1461147c.js b/assets/js/43cda9e8.1461147c.js deleted file mode 100644 index 7bfcbb9fe2ae..000000000000 --- a/assets/js/43cda9e8.1461147c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6357],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var o=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function r(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=o.createContext({}),d=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},u=function(e){var t=d(e.components);return o.createElement(l.Provider,{value:t},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=d(n),h=a,g=p["".concat(l,".").concat(h)]||p[h]||c[h]||i;return n?o.createElement(g,r(r({ref:t},u),{},{components:n})):o.createElement(g,r({ref:t},u))}));function g(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,r=new Array(i);r[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:a,r[1]=s;for(var d=2;d{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>g,frontMatter:()=>s,metadata:()=>d,toc:()=>p});var o=n(87462),a=n(63366),i=(n(67294),n(3905)),r=["components"],s={id:"learn-guides-assets-ledger",title:"Polkadot-JS Guides about Asset Hub Ledger App",sidebar_label:"Asset Hub Ledger Guides",description:"Polkadot-JS Guides about Ledger and the Asset Hub.",keywords:["asset hub","ledger","assets","statemine","statemint","polkadot-js"],slug:"../learn-guides-assets-ledger"},l=void 0,d={unversionedId:"learn/learn-guides-assets-ledger",id:"learn/learn-guides-assets-ledger",title:"Polkadot-JS Guides about Asset Hub Ledger App",description:"Polkadot-JS Guides about Ledger and the Asset Hub.",source:"@site/../docs/learn/learn-guides-assets-ledger.md",sourceDirName:"learn",slug:"/learn-guides-assets-ledger",permalink:"/docs/learn-guides-assets-ledger",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-assets-ledger.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710309813,formattedLastUpdatedAt:"Mar 13, 2024",frontMatter:{id:"learn-guides-assets-ledger",title:"Polkadot-JS Guides about Asset Hub Ledger App",sidebar_label:"Asset Hub Ledger Guides",description:"Polkadot-JS Guides about Ledger and the Asset Hub.",keywords:["asset hub","ledger","assets","statemine","statemint","polkadot-js"],slug:"../learn-guides-assets-ledger"},sidebar:"docs",previous:{title:"Asset Guides",permalink:"/docs/learn-guides-assets-create"},next:{title:"Architecture",permalink:"/docs/learn-architecture-index"}},u={},p=[{value:"Requirements",id:"requirements",level:2},{value:"Installing the Ledger Application",id:"installing-the-ledger-application",level:2},{value:"Using Ledger Live",id:"using-ledger-live",level:3},{value:"Using on Polkadot-JS Apps UI",id:"using-on-polkadot-js-apps-ui",level:2},{value:"Adding Your Account",id:"adding-your-account",level:3},{value:"Working on Relay Chains and Asset Hubs",id:"working-on-relay-chains-and-asset-hubs",level:3},{value:"Confirming the Address on your Device",id:"confirming-the-address-on-your-device",level:3},{value:"Using Polkadot-JS Apps",id:"using-polkadot-js-apps",level:4},{value:"Sending a Transfer",id:"sending-a-transfer",level:3},{value:"Receiving a Transfer",id:"receiving-a-transfer",level:3},{value:"Teleporting",id:"teleporting",level:3},{value:"Support",id:"support",level:2}],c={toc:p},h="wrapper";function g(e){var t=e.components,s=(0,a.Z)(e,r);return(0,i.kt)(h,(0,o.Z)({},c,s,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Because of required WebUSB support, Ledger wallets currently only work on Chromium-based browsers\nlike Brave, Chrome or Edge.")),(0,i.kt)("p",null,"The Asset Hub has a ",(0,i.kt)("a",{parentName:"p",href:"https://www.ledger.com/"},"Ledger")," application that is compatible with the Ledger\nNano S and Ledger Nano X devices. The Ledger devices are hardware wallets that keep your private key\nsecured on a physical device that does not get directly exposed to your computer or the internet."),(0,i.kt)("p",null,"The Statemine application allows you to manage your KSM and other tokens on the Asset Hub parachain.\nIt supports most of the available transaction types of the network in the XL version of the app\n(details ",(0,i.kt)("a",{parentName:"p",href:"#installing-the-ledger-application"},"below"),")."),(0,i.kt)("p",null,"If you have trouble using Ledger or following the directions below, you can try searching for your\nissue on the ",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/"},"Polkadot Support page"),"."),(0,i.kt)("admonition",{title:"Intro to Ledger Explainer",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Please check out our\n",(0,i.kt)("a",{parentName:"p",href:"https://youtu.be/7VlTncHCGPc"},"intro to Ledger video on YouTube for more information"),".")),(0,i.kt)("h2",{id:"requirements"},"Requirements"),(0,i.kt)("p",null,"Here is a list of what you will need before starting:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"A Ledger Nano S or a Ledger Nano X."),(0,i.kt)("li",{parentName:"ul"},"The latest firmware installed."),(0,i.kt)("li",{parentName:"ul"},"Ledger Live is installed and at version 2.29 or newer (see settings -> about to find out if you're\nup to date)."),(0,i.kt)("li",{parentName:"ul"},"A web browser is installed that you can use to access\n",(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI"),".")),(0,i.kt)("h2",{id:"installing-the-ledger-application"},"Installing the Ledger Application"),(0,i.kt)("h3",{id:"using-ledger-live"},"Using Ledger Live"),(0,i.kt)("admonition",{title:"Ledger Nano S",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"There are two versions of the Statemine app: the normal (light) version and the XL version. The\nlight version has smaller size but it supports only basic functionality. If you want access to all\nthe supported extrinsics, you need to install the XL version of the app. You can see\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/Zondax/ledger-statemine"},"here")," a full list of the extrinsics supported by both\nversions.")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},'Open the "Manager" tab in Ledger Live.'),(0,i.kt)("li",{parentName:"ul"},"Connect and unlock your Ledger device."),(0,i.kt)("li",{parentName:"ul"},"If asked, allow the manager on your device by pressing both buttons on the YES screen."),(0,i.kt)("li",{parentName:"ul"},"Search for Statemine in the app catalog."),(0,i.kt)("li",{parentName:"ul"},"If you are using a Ledger Nano S, install either the normal (light) version or the XL version. For\nLedger Nano X, there will only be one app available.")),(0,i.kt)("p",null,"Please proceed to the ",(0,i.kt)("a",{parentName:"p",href:"#using-on-polkadot-js-apps"},"usage instructions")," below."),(0,i.kt)("h2",{id:"using-on-polkadot-js-apps-ui"},"Using on Polkadot-JS Apps UI"),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The Polkadot extension doesn't support Statemine Ledger accounts at this point, so you need to add\nyour account on Polkadot-JS UI as described below.")),(0,i.kt)("h3",{id:"adding-your-account"},"Adding Your Account"),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"These instructions will guide you on how to add a Ledger account that's ",(0,i.kt)("strong",{parentName:"p"},"only")," available on the\nAsset Hub. If you want to use the same Ledger account on both\nPolkadot ",(0,i.kt)("strong",{parentName:"p"},"and")," the Asset Hub check the\ninstructions ",(0,i.kt)("a",{parentName:"p",href:"#working-on-relay-chains-and-asset-hubs"},"below"),".")),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI")," already has an integration with the\nLedger application so that your device will work with the browser interface after installation. The\nfunctionality is currently gated behind a feature setting that you will need to turn on."),(0,i.kt)("p",null,'In order to turn on the interoperability with the Statemine Ledger application, go to the "Settings"\ntab in ',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI"),'. Find the option for attaching\nLedger devices and switch the option from the default "Do not attach Ledger devices" to "Attach\nLedger via WebUSB" (',(0,i.kt)("strong",{parentName:"p"},"but see note above"),")."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Dropdown selector for allowing Ledger connections in Polkadot-JS Apps UI Settings",src:n(54035).Z,width:"531",height:"235"})),(0,i.kt)("p",null,'Click "Save" to keep your settings.'),(0,i.kt)("p",null,'Now when you go to the "Accounts" tab you will see a new button that says "Add via Ledger". Ensure\nthat your Ledger device is unlocked, Ledger Live is ',(0,i.kt)("strong",{parentName:"p"},"closed")," and you have\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169778-how-to-switch-network-nodes"},"switched over"),"\nto the Statemine application, then click this button."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Add Ledger button in Polkadot-JS Apps UI",src:n(26789).Z,width:"488",height:"83"})),(0,i.kt)("p",null,"A popup will appear asking you to select an account and derivation path."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Picking an account and derivation path",src:n(33414).Z,width:"1894",height:"643"})),(0,i.kt)("p",null,"The first option lets you select an account. You can have multiple accounts on a single Ledger\ndevice. The second dropdown lets you pick a derivation path - think of it like a formula from which\nchild accounts are generated. If in doubt, pick the default option for both."),(0,i.kt)("p",null,"Once you confirm your selection, depending on your browser and its security settings, you might need\nto confirm the USB connection through a popup like the one below when adding the Ledger device for\nthe first time:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Display the device connection popup",src:n(57302).Z,width:"468",height:"461"})),(0,i.kt)("p",null,'You should now be able to scroll down and find a new account on the page with the type "ledger".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Displaying the Ledger account in the list",src:n(78465).Z,width:"867",height:"70"})),(0,i.kt)("p",null,"You can now use this account to interact with the Asset Hub on\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI")," and it will prompt your ledger for\nconfirmation when you initiate a transaction."),(0,i.kt)("h3",{id:"working-on-relay-chains-and-asset-hubs"},"Working on Relay Chains and Asset Hubs"),(0,i.kt)("p",null,"Polkadot and Kusama accounts from the ",(0,i.kt)("a",{parentName:"p",href:"/docs/polkadotjs#polkadot-js-extension"},"extension"),"\nwill show up in the Asset Hub, even if they're not set to be used on all chains. The Asset Hub is a\nsystem parachains on Polkadot :polkadot}}"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"However"),", as mentioned above, the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/polkadotjs#polkadot-js-extension"},"Polkadot extension")," does not support Statemine\nLedger accounts at the moment, but the Polkadot-JS UI does. So, if your Kusama account is in the\nPolkadot extension, you'll need to remove it from there and re-add it on Polkadot-JS UI directly\n",(0,i.kt)("strong",{parentName:"p"},"as a Kusama account"),", as described\n",(0,i.kt)("a",{parentName:"p",href:"https://guide.kusama.network/docs/kusama-ledger#using-on-polkadot-js-apps-ui"},"here"),". After that,\nyou will be able to make transactions with that account."),(0,i.kt)("p",null,"To remove an account from the Polkadot extension:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Open the extension"),(0,i.kt)("li",{parentName:"ol"},"Click on the three dots next to the account"),(0,i.kt)("li",{parentName:"ol"},'Select "Forget account".')),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"As mentioned above, a Polkadot :polkadot}}")),(0,i.kt)("h3",{id:"confirming-the-address-on-your-device"},"Confirming the Address on your Device"),(0,i.kt)("p",null,'On the "Accounts" tab, find your Ledger-connected account. Click on the three vertical dots at the\nend of the row. This will open a new menu, here you can click the "Show address on hardware device"\noption to display the address on your device.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Options menu of an account in the Accounts screen of Polkadot-JS Apps UI",src:n(83566).Z,width:"419",height:"478"})),(0,i.kt)("p",null,"Here you can scroll through and make sure the address matches to what is displayed on\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI"),"."),(0,i.kt)("h4",{id:"using-polkadot-js-apps"},"Using Polkadot-JS Apps"),(0,i.kt)("p",null,'Once you have your account loaded on the "Accounts" tab it should show a row with your Ledger\naccount. At the far right of the row is located your account\'s DOT balance. If you expand the\nbalance arrow, it will show details of your balance such as locks or reserved amounts.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Account row showing empty balance",src:n(78465).Z,width:"867",height:"70"})),(0,i.kt)("h3",{id:"sending-a-transfer"},"Sending a Transfer"),(0,i.kt)("p",null,"If you would like to send a transfer from your account housed on the Ledger device, the easiest\nmethod is to use ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI"),"."),(0,i.kt)("admonition",{title:"Transfers",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Transferring in this way sends tokens to another account on the Asset Hub parachain. If you need to\ntransfer KSM between the Asset Hub and\nPolkadot, see the ",(0,i.kt)("a",{parentName:"p",href:"#teleporting"},"Teleporting"),"\nsection below.")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},'Click on the "Send" button next to your account.'),(0,i.kt)("li",{parentName:"ul"},"In the second input, select one of the accounts from the drop-down menu or paste the address that\nyou want to transfer funds to."),(0,i.kt)("li",{parentName:"ul"},"In the third input, enter the amount of KSM you want to transfer."),(0,i.kt)("li",{parentName:"ul"},'Click the "Make Transfer" button.'),(0,i.kt)("li",{parentName:"ul"},"Confirm the transaction on your device."),(0,i.kt)("li",{parentName:"ul"},"A green success notification will be displayed when the transaction is included in a block.")),(0,i.kt)("admonition",{title:'The "Transfer with Keep-Alive Checks" toggle',type:"note"},(0,i.kt)("p",{parentName:"admonition"},'Note the "Transfer with Keep-Alive Checks" toggle. While this toggle is in the ',(0,i.kt)("em",{parentName:"p"},"On")," state, your\naccount will be unable to make transactions which would get its balance below the existential\ndeposit. This prevents reaping of accounts with low balances. If you toggle this to ",(0,i.kt)("em",{parentName:"p"},"Off"),", you will\nbe able to go below existential deposit balance, causing your account to be deleted and any dust\namount of KSM to be burned. If you encounter KeepAlive errors when making transactions, this might\nbe the reason."),(0,i.kt)("p",{parentName:"admonition"},"A detailed guide on doing transfers is available\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-guides-ledger#sending-a-transfer-with-ledger-devices"},"here"),".")),(0,i.kt)("h3",{id:"receiving-a-transfer"},"Receiving a Transfer"),(0,i.kt)("p",null,"In order to receive a transfer on the accounts stored on your Ledger device, you will need to\nprovide the sender (i.e. the payer) with your address."),(0,i.kt)("p",null,"The easiest way to get your address is to click on the account name which will open a sidebar. Your\naddress will be shown in this sidebar, along with some other information. Another method is just\nclicking on your account's avatar icon - this immediately copies your address to the clipboard."),(0,i.kt)("admonition",{title:"Your Asset Hub address is the same as your Relay Chain address",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Make sure that you clarify to the sender that you wish to receive your tokens on the Asset Hub\nparachain, otherwise (if you're receiving DOT\ntokens) they could be sent on the Polkadot\nchain.")),(0,i.kt)("admonition",{title:"Before giving anyone your address",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"Make sure it matches what's really on the Ledger by\n",(0,i.kt)("a",{parentName:"p",href:"#confirming-the-address-on-your-device"},"confirming the address on your device"),". Some malware will\nintercept clicks and clipboard requests and can change your copied value in-flight, so being extra\nvigilant around copy-paste operations makes sense.")),(0,i.kt)("h3",{id:"teleporting"},"Teleporting"),(0,i.kt)("p",null,"Teleporting allows you to send tokens between the Relay Chain and a parachain, or between different\nparachains."),(0,i.kt)("p",null,"The Statemine Ledger app doesn't support the ",(0,i.kt)("inlineCode",{parentName:"p"},"teleport")," extrinsic at this point, so an intermediary\naccount needs to be created first."),(0,i.kt)("p",null,"To teleport KSM to the Relay Chain follow these steps:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Create an account outside your Ledger. Instructions can be found\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-accounts#account-generation"},"here"),"."),(0,i.kt)("li",{parentName:"ul"},"Transfer the desired amount as described ",(0,i.kt)("a",{parentName:"li",href:"#sending-a-transfer"},"above"),". If you want to send exactly\nthe amount you want to teleport, don't forget take into account the fees for teleporting that will\nbe deducted in the next step."),(0,i.kt)("li",{parentName:"ul"},"Teleport your tokens following the instructions you will find ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-teleport"},"here"),".")),(0,i.kt)("p",null,"Teleporting ",(0,i.kt)("strong",{parentName:"p"},"to")," a Ledger account from a non-Ledger account doesn't require these extra steps."),(0,i.kt)("h2",{id:"support"},"Support"),(0,i.kt)("p",null,"If you need support, please visit the ",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network"},"Polkadot Support page"),"."))}g.isMDXComponent=!0},83566:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/ledger-4-6f7e09be831f4a82031a066b8f222a6c.png"},54035:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/ledger-fd53351628660be133bf903bbc63f682.png"},33414:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/add-account-8690ff195ced1f005f03c2b2bbef349a.png"},78465:(e,t,n)=>{n.d(t,{Z:()=>o});const o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA2MAAABGCAYAAABBuEwRAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAB46SURBVHhe7d0LWFVlvgbwFxQRUbkZWwgwcCaIzAOYM5aVjZKJNpM6x1G7TJeRjfWcptOYU9N5vKTVGU/WPDOdMwk6NU1pFycvMwlW6IyNdjOBU6NCR0EugiAIqIiCyln/b62199obUDRhb+P9nWc9e933xjmxePf3ff/P50htTVtIaBiIiIiIiIio+5xoOm6s6XyNVyIiIiIiIupBDGNEREREREQewDBGRERERETkAQxjREREREREHsAwRkRERERE5AEMY0RERERERB7AMEZEREREROQBDGNEREREREQewDBGRERERETkAQxjREREREREHsAwRkRERERE5AEMY0RERERERB7AMEZEREQ9qqy8HNu2fWRsuZL9cpyIqDfwOVJb0xYSGmZsEhEREXWvRx75uQpcs2fNwqxZM429wFtvvY0333oLMdHReOml3xl7yeMKsnDn4hxjIx4ZWb/G5HBjswM7d36B9z/4QK0PGRKGe++5B4GBgWq7paUF69avx759+9X2qJQUpKVNUuuiqakJr7/xBmpr69T27RMnYvTo69U60bfBiabjxpqOYYyIiIh6lBm6hBnIOtpHXqAmB0/Yt2GcGcBUMAOWbrBjpH6Gi+LiYnzw4YeOACbBbH/xfkyfNg39+vVDTs5mdZ4EMDOYDY8brgKX+7YZzCbedhvi4uLUdQ7qc2Wh0NjUdRwUv1wxDQv0t9VYz6lG9hNzkVmkDriKt2PjsjRjg+jScQ9j7KZIREREPUqClgQuIQGMQcx7fblOCzyT7nYGnKQ7kRGfg08KjG0LCVOf79yJUSmjHC1hiYnX4OTJk6ivr0d1dTUOlB5ASkqyOibh7HujR6uwJtdWVFSgoaFBXSPkHnKvoqKv1XZ7EqzWY+MGY1kch0z7k8iuMQ6rsKUFMSxxnpM1Dtvs05CpPr8Nk5eZ++1IsN6PQYx6CMMYERER9Tj3QCYYxLxNNSpKgIRoa1OTDVGxQPanXxnbTq2trSpMhYWFGnsAPz8/9O/fH2Vl5aqly8fHBwMHDjSO6oFLgposdXVHEBwcrK4xyb1Ky0rVteeVZMfSSUXIXGd8toKNyIQdWXOv07dFeBqWLU5D9ps52k9H5HkMY0RERNTjqqqqXAKZGcRkP3mXuCttxprOFh1vrLUnwctsFRPS+hU0OMjYQruwJcEsICDA2II6V64xyb3knl01ckwaUFKhgtaXn+Yg4ZYULT66iYxGQtE27HK0oBF5DsMYERER9aj/ev55zH3oYezY8bEKYM8+s1S9yrbsl+NE3SY8Cm4j0Ig8hmHMS506dQpH6utRWXUIpWXlKC45oBZZl31yTM4hIiK6XEnokgA2YsQI9coQ5p2KD7p26Ksu76jihU7Gh1m7FMpYsMajjcYWVDdG6c5oOn78OJqbm40tqHPlGpPcS+7ZVdUHi401ossDw5iXOXGiWYWt2roj2paPap4PCgpCSEiIWmRdb/73UefIuXINERHR5eKX8+dj7Ngb1boZyMwgJvvlOHkDfXxYYbm1P58+jmzyGMs4LIN0P5RuiDL2yyTBS8JUTEy0+vulra1NBTCThC3zbxwZH+Ye1uRew2KGuXR9PBcVFGOjVNdE6bJY+FFe+7FhBZ8gO34cRrlVXSTyBIYxLyJzatRrv4QCBwzAAG2RQa5nz57F9vrPMTHvLrXIuuyTY3KOnCvXmPNxEBERXQ7cA5lgEPM+I6fbkbB5tbNCoRTFKErDDUnGtoVZHXFX3i5H69iePXvVmC8JWzabDVcNuwp5efnqmFl9UUrZy7VRUVEqzMk1Qu4h94qPv1ptn1dBFhZsjkfGdCMoSuVHZMG+wlJsREriL87B5Nlp7ceSEXkA5xnzAhKuDlXXwN/fH76+7fOxhLCCY7vVetKga/FByhq1biX3kG6LQ23hHd6DiIjIG5ktYwxiXuwckz5Xb3oS9o/GIWuZM9z0yKTPl2SeMQv3+dSIugknffZC0tVQvjWS1i5dG0o+fQ6nW44hKmku7tz3lEsYe+36Zfiz36sIbBuIB1oeg4/2f0Ka/qUrQGTEULVNRER0OZB5xljSnoh6A4YxLyPf/Pj4+rq0Zn3991+gas8ban1QeAqaU5fi6eLfqO1FcY/hrYhlKOzzpdqe3PoTPHbqGbUupIWsTVvkmygiIiIiIvIe7mHMI/3ZysvLUVFx0NjqvaTwxqmWFhXEduzdjnc/flff3+CsBHSivghjg0fjsZjfqUXWS333GUeBCt8D6vXdj7dj+97d6l5yTxb1ICIiIuq9WvMq0TD7HVT5LjD2UFe0bCsx1npGj4ex48eb0Hj0KBoaG3BUe+3NGhobMTAwEK//7U+Y9txUPPRyBn78n9MQOeJ++Pj0UedEJz2Mp/btw327d6tF1me0/kwd80Uf/LB1Nqb95xJkvPw7TH3uafzpb1vUPeXeRETdonQLnl9TAP6WISLyPm3HW3Bs0VbUjslE89tfoU9siHGEzuX017U4POIl1P3gFfUq2z2hx7splpWV4eixY2o9cEAgYmOvUuu9jRTbkNL0UhFxzksP4i+f/8U4Auz9fRH6+Z3FsVN1iAxKwKjPPkO5McdGdP/+2PX976Ph5GH07zsATc1nEP/wHHVM/Oh7Y/DKI7/AiRMnMCQsVBUFuRD5+QX463t/VYOoO5rx/r33NmHlqlXGlqtJk27HQ3PnqnssfvppY6/TqFEpHd5XxrnJAO5du/KMPVAVlWQSUKmqJDq7pzDvK9zvY+rsvenb7CtkTl0ILF6PjA6qfp1PR4PSySBhbEcY7HclIcjYRUREnte8+n9x/LltOL33sLEH6P/DBIRsvNvY8lJeUECl+bV8NDywztgCgl+djoD7ko2tS8ej3RSbmk44gphoOtHkKH3a2zRpYSkgIECtjxtxq3oVNyfejO3N/8C1n4/E6IJb8GLp87g9zBmWZd3/82OIWdWK8MxGDD3kp10zwjgK3DriX9Sr3FveoztI6Nq4YX27RYKYScLP22+96XL8iiuuUGHJOnljSUkJ0u0ZSElOcTk3bdIkPPLzR9VxU0f3lGXhggUuIWvxokUux+Ua8eof/6heiXqfMuQuX4P8PC1ELX/BWLZoe63kHPPYC1id10m7lwSxtQVA5RZkOe7RiPw1zmvbX+96PDevAKvl8xinNOatsVzr3E9ERF3T+nkF6qetQcO9f1ZBLGzbHEeLWN8R/EqxK/pec4WxpnPf7i7dGsaOHj2Gw4cPq/Fh+/cXo7RUH99kVVpaqo7JOXKuXNMbnDx5Cn366F0R7/3BT7H+qQ14+aFMvPur9fhT5R9xpu2MOvZy+e/x3He+g9euvVYtst4v30jUbUC/fzZh/a8WIvOhn2PDU4vw0x9MUIfk3vIe3uSB++9Xr7m5W9SrhDIpXzvzJz/BHXdMUftMsn3jjTdg9+49xp6LJ0Hth3f8EP/85241mST1XtLadefUacbypHPeHEVa0pzHNpQbu01S2tk8/kQOsldor9a5a6zHtSVTyysmKaucuSkHT6hj7u/bU6qQWxgG++PzMP/xOUiNLMDbuWYckyC2FtXj52jH5PgM2Lau6jiQDZuA+TOSgMgJ2r0mIEYFrVXIDZ9hXDsP9vERqNy6yRGqynK145Dz9fcOK9yCSv2QCndZW22YaVw7f4YNuSvdgyIREXXkbMNJHP3l+6pL4smN+vxs4eXz0fxaHs6U1KvtvtddfFOTPL+cz7Ys6OXjTNbnprZYnonqebtCe1Y+4Tz+xCbX6bet935inftDt+f5fS8KYX97EP1ujVWvst0Tui2M1dfXo6y8DNU1NWp8WPPJZpxt09KDG9knx+QcOVeuqa3tmT6aniSzy0spenG4/hDefO8lrN7wPNb//XXEDYhT+8XVA+Kxc/terJ6tHdcWWT8b6mccBc4E9UW23zvYlLoU2Sm/QZ2P/lee3Ns6g703kFAkLWDlFfp/cFVVVaq19Kabxqptd9LS5h7SiC6Wo9uh2Wq6OA6ZdvPBondpLE5foR/LGofizUXqiGJOErrYuHZ2OTIdc9Zo1Bw8wFLz3ll2FC92DV3ZK8txtzruuS4YyWPNboVBiEuI0H6uI2rcV2PeduRr4eqOFLPTYQxStcBVufWLLoSiICTfpYWo1BhjW9szPBGRxroEva8LIpA6xfne8jk6JWFPhTwiIjqXE6u+wOHvvIim5duNPUDE6SVo+XsJTrziHLLRN/7iWnjkubmgxO54bmalF2PBEznQI5VzKIB67m1YgYySha6Ba3MWymcbxxenoXDlbxzPRTX3m+PeKzCuJMdtzjgP8fGB/3jt73DHdFPdr9vCmIyFCriI8TlyzaBBg4ytb68zZ844wliWFsI+/nILDlTtw7OvPo5nYp/DIzGP4v7IB/H7a1bgt0+/hd35xWqR9eaJwWi5LhCnRg3EsfED8Fv/hSj3LcHOPh/h9X7/re4p95b36A6bN7/v+CbDusi4rvO58sorVQuotIo1NDQiMHBAl8dxyViwmbNmt3tfGcd2LvJeMg5uxIhrHWPQqLf5ChtWAhnzLOO/kuxYOikHq+XBUfAJspGGu6cYR8PT8Iv0eH1dU71zGwonLXGOPUu6ExmOw9XIflOCmh0jjT369UDmOkvL2aQbnMe9TOORKu0zhxphyRAcZglUXVOWa3Q1XGlp+Wo8ov0L2RBmvbn13sOu11vpzC6MpcZ+IiLqUMtHB1B7QxYa7Rtx9ohePbtPTDAizi5FyyflqquiVd/4IcbaN2Ob8mtsNMZRV29ajWzrc1HbO3meHVi50dl6Fm/HVMdz8wZMRhHK1cPhK3yyGZg823wm69cmqHXPad1Vibpb/4BjC7eoV9nuCd0WxqRwxLBhw1SRjq6Sc+WaCy068W0jWXxhYwCWNwxA7Bm9K6NVcb9W/HtkDRYOrZOeij2uszFjycnn+La7iyRYWYPWkqVLVZgSnY0Zc289k0If1ntIgJPxatYxbdTL1FSgWHsIZNqd/38hywKjdav6YLH20Ig2Hgo625XOFurq8iIkRFubs2yIijVWUQPtMLIXu97bvtLSsvYtZ4awt2uMrojpEy4gyBkta9p1M7VfIflrOW6MiKgzDfe9qweFz5zd+vxv/y7CD8zD6X1HUHfzSmOvTsaL+Qxw9qi6ELYpd2NyURbs6rnm2ttDnovYvNDluXenPatrrVvqmRyPaOuDIjwKzqeuZ5x6z/XTu293l24dM9a3b18tXMVgcBdauuQcOVeu6Q1kTJeP0QRqnzofN46cgKsivoP/eGA5BuU9g367V8Dv6zfgv/0xPLpoFq5NjlOLrM/duxevVFbit2VlePLrA3j01BJEn43F6DO34N6Wf1P3lHubY9K8ycGDB1Uwktaw4OAg1U3RDFtCgpUZstLnOKtEXghrAQ+5x+DBgzHp9tuNo9R7xSMjyzXIy7LMbA37hhxdGK3L3OuMo94tKNTZZdGhoc7ZunVORjfEdC1QdVRdMShUi67VqLPevJN7x6RKKJPxbFXYs59pjIjIXd+4EPhGOP+uDrg/BaE5P0XbsVOon7ra2OvkN+Kb9Iu/DhnqebYCGfHmF5qWcWOTlrR/7m2w9BK5zPjf4do2577dXbo1jAmZhDioC13DpPuYnNtb+Pn5OcLYFSFDMTv917j78SxMu/Ve+B51FjrxbdyH0Tddg3veHKMWWS+yVEks1tYnt/4EUw48iilVGQhr0/+jk3vLe3gTCV15+XmIjopW2xEREaqb4vbtO9R2dzALgSx/4UUW7+jN1DduZveI9lQrWFG50Q9ep1rLDLboeBSWW6tuVKPCUegzHNphFB90HZh8OQlKuQnJlVvwnqNgRxly1xYgcvz1XRy7VYU6x39e2rXWboraHa5OqkLuJnNeskbk77B0aZbqjNbKjo0l2FMZgcTh7WIdEVGvN3DReNUKNvg3kzHwV7cg+JVpar90WTy9x/qc0l2aLoo2TF4mQWsJJiMHn2i/wuW5iJIKl+dml3X0TFatZZ7lNyoSYX//GQYtmaBeZbsn9Ej6ae5CifXmZmfrSG/Qv7+/Y0zX61W7MO1//4iH9r6LH2uvrVfP1tKU3qrVmvgzLNj3FH62+z61yPrD0XqY6aMFrvsjI7Vr0rVrf6XdY452r3fVMbm3vIc3MUvLp6bqFR+ldezee+7B2++8027cl4w/62w+sws1e9Ys9fq7l15yaYWj3uQ6TE2PR/ZiayUovQqUqnqoxoAZ48dETQ5etHQztI0eh4TNC50VEgs2ItNxWHtIzXYdmCxhTSpIuVeO8l4xSDUqKOrl5fXKinc7Cnq4GfZdFd6yVHdCvdiH3r1Qlu0IS5+BZC2gma1bMalzkAo5X46vQl2CdGM0xpENm4CZSc4xYzLezDbjLiQzixERdcjHrw8CH70Bg569TW0f/fdsNblzR/pcZPEOoSoiOgp2aIzx1TckaU8+owvji5bnXLvzO2U8k980z9WemS90sYtjd2trw6mtWiw06jr0hB6Z9PnAgQM4fp75xAYNHKjGi/UWLpM+73kHfzm82zgC7L3xlxjQ0ozmpjqEhsdjzGejUH5S7xsc3T8an35/Fw42VmGQ/0C09jmNaz52zlP2oytuw6rE5d9o0udzTdgsZek7C0nmRM0lJQc6vIc5KbQ7CUjukzVL18IlTy9GbKw+MOdckz6b50pLm9xHyti7j1+T+coWLlqsWsk4dqy3cFZ6MgcYq+pNliqI0rXQOfhYPz9brachI70YmdZJn1XFxBx1VAYlZ8RmYVv0Ckc3R1Wt0RLgEtKdx9T7Ysll022x2zUWYPXKOtzMqolERN9Iy7YS1P3gFbXeN+EKnC50TvYshux6GH7JEcbWhZIvFudavnyU7v6WisBqomZLiNKejeYz01HB2HyGnueZPDndjuKVnp30WeZqkykCTEM+zeiW8vbukz73SBgrLCzC6TOn1bpUS7TZhqr16upDaDZaKmSsWEK8s3pZb1BZdQiBWhh7rfILzPv6L2rfzcGxsDcH4T9enouzZ88gY/ovUXFdA145qAegB6+cgzn1ITiw83n4+PRBwm0v46GmTfhHw+fq+AtXL8R9kf+qJnyOjND/nYno0pOHyGpLGKPO6HOYYcY8pBrft0nBj7cxw6UcPhERXTgzjPmGBCD0/fvgd/2VaH4tH02//wytOw9i6PGFF13Ao7eRf7eGB9YZW0Dwq9MRcF+ysXXpeCSMyYTO0lJjG2pD0ODBxl5d49GjqD5UjYCA/og2ut/1FidONKO+oUG1ju1oKMGhlmP4cfhIpD/7I+wq/FidE+AfiB2rSrG5Vv9GftKQNGxfGYszrXpLY1DkjUiaugHv1mRjaL8rMDZ4tPq3DgkO1u4boM4hom+m3Td86ttAz36Dd1mRcWFrLePEkhjEiIguBSm/Xjv6ZYT+9R74T+ldjRqX2umva1E//U019q5vYjhC1s1G36svzbQAVh4JY9S52to6+Pj6uhQvWfqHx9Tkz2LE8BRkzFyIp9/Su+gtmrUIAbufwbEavUtfROI9uPrWF9W6OHv2LNq0ZcgQ/m9KdOmcp6sGERERfStIa2O/cY75ay45hjEvJN0VpZiFWV1RJmz+n7XP4njzMdyT9hAe/J90FBTnq2NJccnYOG8lKgpWoG+/QYgd85S213mdjL9i90QiIup9GpG/ZhXqxjq7xPYoSwtw5LkK4FwqauzlHiSmd1zwpjFvDbIKE2HvaMqJC2UdM9uFL6N27vwC73/wgVqXL4elWFdgoD7vbEtLC9atX499+/ar7VEpKUhLm6TWRVNTE15/4w31ZbW4feJEjB59vVon+jZgGPNC0pp1qLpGFdvoqLz/xEW3uYSxD57+UK1byT2kKMhQW3ivmiKAiIhI59kwJmMh/xHaAyHM1FNhzL1btgpmwNJO5pMqLi7GBx9+6AhgEsz2F+/H9GnT0K9fP+Tk6BUbJICZwWx43HAVuNy3zWA28bbbEBfnNiWwe/EIpeOg6Fq8yXqOe68Hi3g7Ni5LMzaILh2GMS8m3wKd0n4RDdR+eZ21lNTcsXe7SzfFsdfcpNaFr4+PqlTpr/2CY9dEIiLqnfQglmvMW6RapoaXYPUmIDF8C3LVFBb6WEVVQMYyhNE6hlEPVBNg27oF+legQLKl+IwKOFur9A3IZOcShFzfW7shZqpKoW77Iyc4g5EEKbfPZg/djveQ6Hhv9b7BEris8/aZ76mtGmHMlgTkFxifyfKztA9jejEd8+fq6tjN9tVg9QBTPttajVbnHqaEBKq1f/4z0ibprV9yXIKZzaYXP5Lw9vnOnWpfRUWFS5ATEuZqa2tdWs+UjsbuqqBY3D5sxVo+vxHi4lyq6Wo4Fph6iHsYYxOKF5EwJYU3pBKiFOGQbofSynVT4s2qNUwWWZd9ckzOkXPlGgYxIiLqvYKQfNccpEbqIcbROlW5BXtC52D+4/OcQaxGC0WyLcsM7a/xgrXILdVPF5Vb9yAsXT9uHx+B/LXGpOSlW7QgZtOClnmtTU1wXqbeex5mareSEDjfEsT2JBjvrS0zteCVleuY3rzdZ1O7LO9tBjGb9vPo95CfzzqBuqhCfo0WuMzjNWvxvPU9HJxVTR330s5d7ZjovTP6BPcJ0dZ0YkNULJD9aft5rVpbW9HQ0ICwsFBjD+Dn56eGYpSVlatgJkMyBg4caByFCl319fVqqas7gmDtbxq5xiT3Ki0rVdeeV5IdSycVIXOd8dlkTkjYkWWdViQ8DcsWp1nmuCLyLIYxLyMVEGXMl8wRBrSpXz6NjY2OX1Syrv9CalPnyLmsmkhERNSRCCQOd3bSi0nVgoi1255MYG6sOiTd5Oj2FzQ8EZHan+x1HWWWYRO0UNPJXHmlXyAXE3CHpctiTOoMJBdsR77jXq6fTYlMRJy5KygJd0soc3S5DEJcgvt8URFInWL+PFooHCvh8v/08GjRmKe9b9IMl3slT5kAbP2i3bkdibvSdQoPW3TnVfskeJmtWkK6JgYNdv6c7mFLgllAgPPvGDlXrjHJveSeXTVyTBpQUqGC1pef5iDhlhRjniuLyGgkFG3DLsdE/USewzDmpWT8WGhIiApbw2KiERd7lVpkXfbJsQud0JmIiIj0LnzPL39BWyzd9s5n2PVIjSzA2+q6F1xa09w11mlRoHILsoxzL/i9XEirln4PZxdJkw1h1jwXHNZheGw8ol1XsNbyWbTFpftjLxMeBbcRaEQewzBGREREvYIZwpzdDWe0bxnrlN4dUXU5TALy10qoWWNp6XIjY8TUe1iXjottdMwMYWtRrbo/6t0mL5qMEWv3eTpp2XNTfNC1Q191eUcVL3RS1dnapVDGkTUedf4jSTdG6c5oOn78OJqbm40t7X8j7Vy5xiT3knt2VfXBYmON6PLAMEZERES9QCOKC6vUmLKuhpDOqO6OxhiuPfvbp7GgMBtQWWcZ23URSv8P+Uag67xCo1srWEMdKt1byzRBoVqIqzlyEZ9HHx9WWG7tz6ePI5s8xjIOyyDdD6Ubooz9MknwkjAVExOtuhzKmHcJYCYJWyEhIWqR8WHuYU3uNSxmmEvXx3NRQTE2SnVNlC6LhR/lqS6LLgo+QXb8OIxioQ7yAgxjRERE1GtUO9KLFNm4gK6DMo/YcqOYh2gswZ7KDsZ9CbNLo7WYhvv1XWENdKqAiHs3xSrk7jTvWIbctQWIHH99u6AZlHITkiu34D1LwQ7VSrjGWgykYyOn25GweTWyzTwmRTGK0nCDtRKhQcZ6fW/0aOzK2+VoHduzZ68a8yVhSyooXjXsKuTl6f/q0gImlRSl+qJcGxUVpcKcXCPkHnKv+Pir1fZ5FWRhweZ4ZEw3gmLSnchAFuwrLMVGpGri4hxMnp3WfiwZkQewtD0RERF9KzhKz0uXvNFH2s/DpcrBO8dKJc+Yg7Adq5Abrpd5V9UWYSn57jaXl3tZfGvZe70svnWeMbdS8o6S95oO5ghrX4re7f2klWxsHbLWVuvl7SH3qEPi+GrkmiHtXKXt3X52l1L753OOSZ+rNz0J+0fjkLXMGW56ZNLnSzLPmAVL21MP4TxjREREREREHsB5xoiIiIiIiLwAwxgREREREZEHMIwRERERERF5AMMYERERERGRBzCMEREREREReQDDGBERERERkQcwjBEREREREXkAwxgREREREZEHMIwRERERERF5AMMYERERERGRBzCMEREREREReQDDGBERERERkQcwjBEREREREXmAb58+fXD69Gljk4iIiIiIiHqCr5+fH44fO8pARkRERERE1IN8mo41tvn4+KC1tRVnzpwxdhMREREREdGl5O/vb6zpVBgz1omIiIiIiKiHsIAHERERERFRjwP+H+DzMQEznx96AAAAAElFTkSuQmCC"},57302:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/query-device-d7d9e7e7d28a34a343c59094db864a1a.png"},26789:(e,t,n)=>{n.d(t,{Z:()=>o});const o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAegAAABTCAYAAABUKpQOAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABu3SURBVHhe7d0PWFRV3gfwr+AojhqoDW5gj/gHcyEXdPmzCxrii7ip+5iV+67pZmirkW6mWb5umq9pmYUovZrlaqxE+lYmr63ogqw4K0zyJ4UMNgURVqEVXIWQSR3B95w7d3KYuTPMwB0cht/neca5cwXmzMy9v985555zpkdTY8MdEEIIIcSpuIn3hBBCCHEilKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0RfN0lauX28Cs351Wg+U4uW89fQ8t113Gm4AehaAIUbenh6wO2BfnAbMQDuY7zhHuaLnhOHir9NCCF3UTzpGErQBLoj5dB99g/cTi/DHa1O3Gu7HkoFek7zh2LWT6F4dKS4lxDSHVE8kQ8l6G7s1odFuLnjK7R8e0Xc03Fuo+9H7/ifo9f8YHEPIaQ7oHgiP0rQ3RCv4d5cf0LodnIU3l3Ve80EalET4uIonjgOJehu5odlmbi167T4yPF6PTsWfbbEio8IIa6E4oljUYLuJlrO/hvaheloPvWduKfzuI97AMqd0+D20CBxDyGkK6N40jkoQXcDt3MvQjv3/3Dnilbc0/l63K+EMvUx9Ix8UNxDCOmKKJ50HkrQLk44mR7/rF2jKeXGR2cqD8yiJE1IF0XxpHPRQiUuTOiG4jVdJziZOF4OXh5eLkJI10LxpPNRgnZh/BrRveyGksLLw8tFCOlaKJ50PkrQLoqPrrwXAzhswcvFy0cI6RoontwblKBdEJ+X2JlTH9qDl4+XkxDi3Cie3DuUoF0QXzSgK+gq5SSkO6N4cu9QgnYxfLk9R67oIydeTl5eQohzckQ8cR9yHxThQ4R7ObliPKFpVi6mMXS3TWvhug3sA3d/6Yn+t7++jDs/tD1Ss0cfBXr6DwTYvanms1fQUn9DfGQZX2u3f8EC8REhxJnYGk9s1XvScHj+aYb4CGj4/UHcPFYhPuo4V4snlKBdCL8Go/3N5+Ij6/q9NhHKeWPFR601rj2GH1KLxUeWecwYjfsSHxUftXbz8Dk0/MG20ZXKT59wyjV2azPWYWlKORCzCvviAsS9tihF8pyNyMRIxG1di1iVuJvYqQ6Za5cjmX0Esf/1EeLGiLtJp7AnntjKa+8s9GKtZ4NbeZdQ/9Rn4iN5OGs8sY8+htjWxV2nxoYFv8PTL+5CUaO4z9Hqq5D7xQ5sWL4ET8/5HWbz2zOLsHRNAlIzSlHbLP4c+RH/ijdb9RxtOWu4Deojblnn7uclbpnrMUgpbrXNnnJbVXMYK4RjZRFSz4r7XJIOJanL2XkxH6syasR9DnBmj/68Sy4Vd5DuRLbzspO1t9wlyWKeaUf8KEtdJP7uOmTWiTtl4HzXoJu1KNm/Gk8vXo1tn2hQcrkB6K+C92AVlNCitqIY6SkbsXThanxa6lxz8u41/v2rclCEPyjUdK3d+DUkuchV7uq8LFQLW1pkaiipENIRcp2Xna3j5Wbx41ghqwbb6EYhMrIck4tsS9CqKKze/RFStj6L4P7iPkdorkPuu69gQ1oVdAoVwmavQtKf2fO+n4ikxETs5tvb1yIuXAXFjSqkvfEKks9QkuZuH6+SbYUf3gXV1k1OvNy8/B3SXI7sDFZ1HRyCsKGsFq1WI7/tS+BdlAKBcxOR8vGH2DjFR9xHiHzkjCedrWPxxBNeA1n8yDmKnHpxVxtq1enI1fFGpLhDRk7Vgq7NfA/bClmLWTESc99MxLLpAfA2GX+k8BqJ2BcSkRAfAi80IHPzO7J2KXRVzfn6tqMcmt79ss2b3Dpc/tJcZDYCytBpmD5Gyc4wDbILqfJGSHvIGU/uhfaXvwF+Dwax+1Kk59hw+Yg1DDLTyoH+PvBxQOPVeRJ0vQbJn/CJ5kpEL3sZ09poGHiP/z0WRfFAXI7U/XZ0R7gouadCNCWdtHrT5V0Sf1IeHSu/Dvk5avYvO3ZCR8J/wlR4s71FOQWwsRJMCDEidzzpbB0pv3d4KALZffUhNcraGOukO31UaBj4Tp8I6SG3HSOZoLU5CcIF76d3iImvLguv8Qvga7Ng+rJ1l0uRmZqAVYvnixfJ2e8t3oid6ipo7RjIVZt3FEX8ycY8hd8E2TLASIng6TPgy7Z0LBCfNurONFzsTz7DHmirkLl9pX6g2etZLhuwW85fE7dsc7u448v23f72ClquSrdSm8vsW8De3vK3cqOYJWh28Ayeimg+eHNIKGJ5L/yZw8htqxLcXIei/UbH7zOLsGLzfhTZ0CujrVBj5xvLseCZ9h/3qFdjA3/eOTusdMmzSuhz/GdWIl18Pa2OcWPNDajUHMQ2o3LZ85o6zPT9nDMf8W/sQnaFld6MumJ8unk14hfoy/v0cyuxaX9x2wNBm7WoVO/ChhcXiQNJjZ7LMMBNImYJTJ5z9oIl2LBLjUqJQbAUT7qeDpV/YARmxrAc1HgUGaetNf0akJOlYTkyANPGDxX3mWjrOBRmKvDjS3pwmUSC1uK0hk+xUSJ2UgjMZ7gaYYl7/fKNSD5SilqFF/zGRSB4uCcLOqXI3rkaL31camPLVouyYv0ybcHjQ2F5bLAJn2BECv3+BSiRmkrXwl58wjoka2r05WAn/C3hP1xPy3fXxS3bXN+Ug9oRW1rdrifkCP+nXBiCnj9te27QzYxyXAn9wOzv8BufqmUPe8tvrJ5V7nLZvfeEUKHCxg4MBE/gXTA1yD5lJUNf1mDLi8uxKa0YlTeU8A6IQKR/XzSVHsSml9chvcrS0cuO132r8dwalgxKWYj2GorgiCD4KiqRw4/7FDta7l6hiOY9atAgv9jC85UXIJsnjjFTEdlGz1JJyhKs2r4fuRW30G9gACIjAuDtoUP1Kf1rcujlIG0pkl9iyZW9n9XsLA6MiEDgYCV7P1lFZs0SvMbHCJiozUlC/IsJSDtVhSYPlfA7o5RNKElLwIo3DqPS4kfAKi3sb67aqUYJe7MHDA9C5Dgf9LqoYc/1CpILLX8CWhY0l77Mn5MdG56G90iLkuxdWPUH9h5dFn/QFMWTNnk8ESA5qNRwkyL1c4Yb/3vt0ZF4IozxmMIbfzrksgRs8Ui6dBzprNKmGD8Z421OWvYxT9D1LBjw/MxbIw/pd1mmwJBHVyDpzx9i99ZEbHwpHivXb0NK4jz4s8xen/EZsm0KCDW4ICRYFUb52T49hwfiYaP5vQ4XLpo/UZNmP1JvTMbq7R9h38fsti5G6Pp0RXcaOj4iSrujAC2Xr6OHhwLK50LFvZ2j/eVvwOkv+YhtH8SG381evuGT4c/uq3k3lX5Xa801SEtkrdarCvhNX4XdO7ch6dV4LHk1ETt2JmJJOAvGrDUsRZu3B+sPVUE3MAQL3+HH/gasXLwCG7d+gPfXPwmVOgv54s+2TYmwqAhhK7ewWLJCW3byOKsSAJHREW1XXr1CELduG/btZq8ncRWWLF6FpPe3YXUMqzjzy0GHHDS6nbWcMxMSWAVAicjFiUjZnojVi+OxOpHFg63xiByoQ1nKe60rCJcO4u0dhahXDMW0Vz8w+50w1gDIlvwItMhPflOoQHmFPIuE3R8gaf0KLHlpA5K2b8PGJ1XIzioUf9bE5Sy8tZm1ZvpHYMnWD7HD8B5t/xBJi9n7y96j5PekWzsUT6xz8+6L+96eYjag1PRmTOr/jW/87/G/a68Ox0OfSEzj8+7PHEa25NU8HfL/cpBVRG1oyHaAWYKuL9aghN37TjK0RqxQRWHh3CCzgVwYHIPHhZhTjnMVlqrAxm5BJ3QteaJvb2GHzRRW3pncPGDJ6tkIdFDtxqnoWsSNjrm+mbdFWU14+kPoHduJk/3bW/6aXKEWiyFRCDZuXaqCMJ4Xv/E48iTmNOpOH0QaO/EUEc9jzewAKN3F/+DcVYhcuBZzJV8+a5Uf4N1aPvjNyqWINmnRKofPwH8ti2Knre0UQaGI5MexpvWlGkFzOfJyWHpWRCAsqO0wEDhzKWJHsmTcihKBU6fCj23pzpSJU9HkpTvNktdZHXyf/COWRJj0vqgiMH92CNsoNxp4YwhwCkTG/xFzA0zeMfY7/NzllSwzNcfxqYbFlYFTsfyFKPi2+uyU8Jv5MiuD1HvFnvPAXpTp+GfHKg0mxfSOmIe5QjEPI1ciKFM8sc592ABxS17t+rsdjoeeGB8TwY5OVpH/i8QYp3oNMvlltSEzbGjItp9b65PV0Brhfept9KW1wWeoPrrV1tvc2Sc7RVQUwuyJlF2ZQp7xfjc+L4Xu638J28rnw4T7TtHO8hvmPvubVShVCJvEu8ek5jTqcDqPJ1kFoh8JkU6mLEmH/kLiutKlAmTy4D1yMiItzDZTPhyKcHHbJh4hiI4SMrR5N7fYva2MmYwwD3Ffewz2wyh+f7neAddNDe/nSMRaiBtK/0Ah2daWVQq9AT+OG1BEITrEwkk6mL2PEh/Bj5/59Bj4GyfnHykRNl7fK9GK4TktfnZK+AfwuFWHc5Xm18wpnljXUv29uCWvdv1dGeKhYuxkxPZnR7fElKvqnMOsIatA8K8j227IdoBbvnFNsY4FA94aGROBsXbUEnX1VSjRZOHTlD3C4JSlLy7CCr5Eot107a/4uPcSN+7y8+k+ayz28OxI9G6t6d2TaHw9G9ce2yvucbx2ld8w95klhvHjzD9rr6AIYTSmLs+0ZVqH6vP8PgCjeLPSEjfzVpiuukbo/lSO9rPcvemusLvLKzBislBRMO3mLtEcZQlNPzrdZs06VJcXI/uLPUjelYBVy5cjfgFfetRRqnBOGKxWjuQX9QOqzG4v7tFfamjSQrg6eKVa/zjAH8Mkk6yeeQ8Ze201/DNXYtQIK+e3xGeHS2UQvjSxfA+WSpWR3YSlXZmmpibh3hjFE+uaL30vrK3Nl++0djMm9f/GN/73+N+1lyzx0J1VOGfy885kyhWPO4fY4/6T8fgvTXur5OV2vODuE1fnHWUnjQKRrGlvU36+WozUNfOFVb82bN+DtAw1TvNzRxWM8Q/ZU9X0ha/QTVCFCxZHhUipEQMDO1n9zN+oYd3ohHJ7oJ+41XG3si/ghz1FGHDwKXifX2Z2G7D/t+JPyqdd5TcMnrKUGBbvEi7XmM+JZq1IYSCQCl52zl28Vq+/Ouk7UOYTc2QoonlZjLu5bxQiW83OB5u70bSozEjC0gXzsWJtAnZ+koXML3mLVQm/XwY5sKZvuESlgNdg/ap/Fm+DFBCq0tfq9dd5VV5CxcR27LMTftEH3vZ+BD/c0rfePTyly2Z0G+BhXuGneNI2/sUXfG1tSzcpUj9nuLX3izTkiofeUdOEy0/CWBZxVkF9zmdIZ8e77/QoCz048nGrPVEgdBfxZFd0giVr3uU01ob6Px9ksykB6ez983t0BRL+9CH2fawfLMYH2zxmNGCnbZ4IHKM/+HNZgDLvXLKgpgi5PNAqWIt/mH5Xd+U2Qt7rP3wpT8XD0kvjKMY+IOtSn5z95dch/xhvXbLyeEkHWeHmpT+WpedEa9HUzrEkDXKvssRq69FT+Dlwt5tb900B8tmmefe9ND547bWUQlwTBoolIiXlI3Gw2AasfHaq0JvgMMLbHIq4N/Wr/lm8vRDVuvKv1bbqMbBdO3rbWDAVijnuGSRIlc3otizKsS0jZyd3POlsspXfIwRTWk25qkHuYTsuA/fpZWcFtDU3XFZD6OZmyY6PVlPGRCLQllrBBTUO8d+LeB6vz2W1c2XrpK7TNohbtvEdP1U/IKRwLw7Y1DuuRdEhPsjEjjK7MPcxXXs8qd3lN1xPRBAWvSUdZIXb5uf1A7BazYlWwVfoMS5DtZVv0mu4atStJfL20feJ19aIU22kNIqtQzv5hscIiVjfza3D6YIC9m8AosNtablpcVrNrwOrMHMFHyimgsL4nLjBKiPipvx84Tuc3xfhXOseTMt+4qs/389XW3mvGlBrNuWJfXbCR2C9t03bYD6rgz+n8KtnylAp7CCWdLt4YoX/JKMpV2fVOMCOcZunVnmy41XclMQaupVW8p2bAnXg3dz6gRc+eHySjde6DN1FSqX59Tb2pPknJU4Qa1RR+M8pvNbagPQkPv1Fv9uS2ox3kKhmJWCt50WP23F9zkW5hzlyqILj2Vt+w9xnRExEmLVuao8ghIXzI9R4TrQKw0bzem0dDh21MFdfW4xsfnyZ8vNHML/XpFucQlibc5SlqnbwCUY075jg3dz1+gqI7XMsm6C/bCo9E0JbzFrj4rb8PBE4jrcmtMjMKNTHhbao/DCKf26XDyPzjHSi1RYfFy9htDbMX5g4zloyaunk3lyH7KMSX5c6MABCxw9vDeXZVMpuq7vFE6t+nHJ1HB8c5FMe7Zha1d9LP1alvARlEoecrrQIeeK2FDc+Sq224Cg7SVi0MZ2qYo2h6Z6naf0VlM0NyN/5JtIu21R8IwoEzlmLuIfY713VYMvy1UjWVKHeZDUhvnJZ+rvLhUFoOhYYYl+a131GVlrRc+JQ9DDpxegqeLl5+W1nmG0ARIYEtXGiKBA2ST8Ay/g6kn/MLGGuvjbrPWxTm7SUG6uQlpCEnBsSf7l/KKYLFclypG7ZhxKTBFKr2YG1n1TZdvKa8UHkVD7ynJ1TaSUsobKyh7b1+gz6oq8wXbQcOXmtX4+24iDe2lkgPnIM30mzhJ4KneY9vJUmsZpafTky3z2oHxMgGInYJ0ey18aS+s73kG3yEQhl3qKBTuLFK0OmInYg2yjfiy37Sls/F0vOuTvX4ZMqqXfNB9GP86kzrDW04x2kSaxuVl+ehS1pDpor3oV0r3jSFk+MnxbDYkg5iorZMTPmKUy3dWqVhz8Che8xL0TqJ8Wtj9UaNbbtVEse4wbuG54f+9/ZhWdx/t9A4G+fw3Q/idFv2gpk/7UYVwcG49Ho4SwUMAN/gj4lx1BUU4HcjAycKLmE8yf2ITllP3Ib/wNzpzSjqPQqBgVNQfRIGyeau/XFiPGhGFRTjK//WYOygmNIT0vDF8dycPxvGdi/LxWfHsnB19VatLC3K+yFtxA/zrz5VFeUhr9XgP2txzHWAd8w4qya/3EFLaV29lxY4D7kPvR5wvJVSz4dS65pFYrHRkMxw47JhDXHsD31GzQiAk8uDIdvT3G/JQP6oDGLJefGaijH/Bo/u5/t6zscgfdfxMnCCzj/VRa+OJqD/LMV+OoIO4b/9xBKBvwOy2O/R+7XV4HhE/DkWEM3szu8/UfhxtcafFt1Fn8/dAh/yy1FZXkOPt6TjM9P1OORV+ZhWE4hzmMgxv5qIkbYsc6Ch1cLvj18CvkVFWjp/yv8fkEQBknMGDE/xhV4YEAjsk9UoOYb9nqOncK5ylNI37sH+w6VwvuZp/CzU8WsTMPxyBPBti2wUVuMz3PYk9ScwQl1Fv7KznOzW/0IPPowy5YKHzw8ohEn88px8Ztj+OLIMZz4pgoXCw4i5eNUpBxgsaLWB488dve5+w4NhPfFk8g/fwFfHT2EIycK8O35u2X2mrsUUxo14B9Bq3O5pwoP/8wD36iLUfFtjvBcX5VX6T+7j9KQ+/0E/PEZP/y9gJVdFYwZUcNhiGqKIYEY1ZSHL89dwpnsQ0JsKam8iC//koqPWTk/zypG7YMTMDPo7mUFiify8WAxhccWg2YWQ3gskZPd8URk7XN2H+yNnvlZ+Pp7BSLnPI9HfEyvqWpx/ngGiq6anvMeGMZy6lfqb/Cvcg2OZPE4cwYn9+/FrrRCeMwyHOOmv1eHogM5cPP/xUR9S5gFu9hwewZGqBD76iasnBkEXw8daks1wvKCvtErkLB5NoLb26p1Z7XcFxKxO3EV4qIDhEE+uvo61F6ug9bdE94BQQhW8SqHFvnvvootGay2rv/Nbk8x66fiVse19WUYcn5Zhr3lrj6lFsYeKFhlbqwtsyncRyKcf7EKb60ZzYn2Hr8Um9c/i+gA/vWldag8pUHJVRXC4zbg/Vdj4GNpKqVyJOau3yIc+35erNV1uRS5BZVQDJ+KlVu3IW6MTX3S0n5c+pOVb4p9o0QVAfPE18PO4/oqFGlKUds7mJV1G1abrqhijxv8WrD+HDS7ae8udqkcMw989TLhvFVohZjALytcZ8k7eGY8Ev5nXuuBanxBmGVvY+PCKASyc1pXpy9zvSoUcazMr0/xsdh7oBgyFa+z55obMRT8W+2Ez65OgVHTVyBpK3seQ739QR+TGSlKBD6diHdfnaf/3JvqUKJRo+hiE3r5BGHm4k14f077lpd0NXLGk87kmHKLvVv9J2OKLYOojbFjdc1rxnGmGOdu+iL2pU1Wj3GuR1Njwx1xu+vg3Vi7N+IDdZ0QbBVjZuP1xVPhZ+1aZDfRGLobLd9aGflkB17TdfO9W9s1aP5nA1q+k7g42A5uo+9H/4IF4iNCZFK8C7PfVgMxq7AvjhJue8kZTzi+tjZfvtPg+1cyZG1Bu1o86ZoJWlSftwtrd6hRK2TpoYhd9jLigrr39IhbHxbhh6UZ4iPn1ydpCnrNF4ZdESKbsn2L8NohLfzjWEucr0NO2sUR8YSvrc2X72y+cA0ttfLOLXC1eNKlEzSRdj0iuUt8nyufCtFPEyc+IkQm2kJsez4JuboALNy+CtEduOJAKJ7cSx1fsJQ4nd5rJohbzq2rlJM4m1Kkvb0fRZclpmfVFSN5w3ssOQNeU2Y47GsAuxOKJ/cOtaBd1A/LMnFrl7DysFPq9exY9NkSKz4ixB6lSJ6jX1tc0V+FAYYBqTfrUVuvT9peIfFY90IEvLv5AkZyoXhyb1CCdmHXo1LQfOo78ZHzcB/3APqpnxYfEWI/7SUNMg6qcby07MekzNfY9guIRHRsDGLFpYOJfCiedD5K0C6s5ey/cf1Xe3HnivNMROtxvxL9/voU3B4aJO4hhHQFFE86H12DdmH8oFWmPuY0KwLxcvDyUHImpOuheNL5KEG7uJ6RD0J5YJZQ07yX+PPzcvDyEEK6JoonnYu6uLsJ3j2lXZh+T64h8WtEyp3TqOVMiIugeNI5KEF3M509GpNGaxPiuiieOBYl6G5Id6QcN9efcOjiA3zRAD4vUfEofRUoIa6M4onjUILuxvgyfjd3fCXrWrt8Ldze8T+n5TsJ6WYonsiPEjQRasC6z/6B2+lluKOVWJ2pDcL3r07zF75FhlrMhHRvFE/kQwmatHL7eBWa86uF7qqW89fQ8t113Gm4wc66FkDhhh6eHnB7oB/cRgwQup3cw3xl/nJ0QoiroHjSMZSgCSGEECdE86AJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHFClKAJIYQQJ0QJmhBCCHE6wP8De/Jhar/OivYAAAAASUVORK5CYII="}}]); \ No newline at end of file diff --git a/assets/js/4f031749.191c540a.js b/assets/js/4f031749.191c540a.js new file mode 100644 index 000000000000..d975105d52c6 --- /dev/null +++ b/assets/js/4f031749.191c540a.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[2008],{47940:(e,t,o)=>{"use strict";o.d(t,{Z:()=>u});var a=o(74165),n=o(15861),s=o(67294),i=o(87152),r=o(14741),l=o(67425);function p(e,t,o){return d.apply(this,arguments)}function d(){return(d=(0,n.Z)((0,a.Z)().mark((function e(t,o,n){var s,l,p,d,c;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:s=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return s="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return s="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return s="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return s="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==s){e.next=18;break}return e.abrupt("return");case 18:return p=new i.U(s),e.next=21,r.G.create({provider:p});case 21:d=e.sent,(c=o.split(".")).forEach((function(e){e in d&&(d=d[e])})),e.t1=c[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=d.toString(),e.abrupt("break",35);case 29:return e.next=31,d();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+c[0]+") in "+o);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function c(e,t,o,a){switch(t){case"humanReadable":(0,l.HumanReadable)(e,o,a);break;case"precise":(0,l.Precise)(e,o,a);break;case"blocksToDays":(0,l.BlocksToDays)(e,a);break;case"erasToDays":(0,l.ErasToDays)(e,a,o);break;case"percentage":(0,l.Percentage)(e,a);break;case"permillToPercent":(0,l.PermillToPercent)(e,a);break;case"arrayLength":(0,l.ArrayLength)(e,a);break;default:return void console.log("Ignoring unknown filter type")}}const u=function(e){var t=e.network,o=e.path,i=e.defaultValue,r=e.filter,l=void 0===r?void 0:r,d=(0,s.useState)(""),u=d[0],k=d[1];return t=t.toLowerCase(),(0,s.useEffect)((function(){void 0!==l?c(i.toString(),l,t,k):k(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var s=function(){var e=(0,n.Z)((0,a.Z)().mark((function e(){var n;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,p(t,o,k);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?c(n,l,t,k):k(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{s()}catch(r){console.log(r)}}}),[]),u}},67425:e=>{var t="polkadot",o="kusama",a="statemine",n="statemint",s={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,r){var l=void 0;if(i===t||i===n)l=3;else{if(i!==o&&i!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),r((e=Number.isInteger(e/s[i].precision)?e/s[i].precision+" "+s[i].symbol:(e/s[i].precision).toFixed(l)+" "+s[i].symbol).toString())},Precise:function(e,t,o){o(e=(e=parseFloat(e))/s[t].precision+" "+s[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,s,i){var r=void 0;if(i===t||i===n)r=1;else{if(i!==o&&i!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");r=4}s((e/=r).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},44002:(e,t,o)=>{"use strict";o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>p,default:()=>h,frontMatter:()=>l,metadata:()=>d,toc:()=>u});var a=o(87462),n=o(63366),s=(o(67294),o(3905)),i=o(47940),r=["components"],l={id:"learn-guides-staking-pools",title:"Polkadot-JS Guides for Pool Creators",sidebar_label:"Nomination Pool Guides",description:"Polkadot-JS Guides about Nomination Pools.",keyword:["stake","staking","pools","create","destroy","claim","rewards","polkadot-js"],slug:"../learn-guides-staking-pools"},p=void 0,d={unversionedId:"learn/learn-guides-staking-pools",id:"learn/learn-guides-staking-pools",title:"Polkadot-JS Guides for Pool Creators",description:"Polkadot-JS Guides about Nomination Pools.",source:"@site/../docs/learn/learn-guides-staking-pools.md",sourceDirName:"learn",slug:"/learn-guides-staking-pools",permalink:"/docs/learn-guides-staking-pools",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-staking-pools.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-staking-pools",title:"Polkadot-JS Guides for Pool Creators",sidebar_label:"Nomination Pool Guides",description:"Polkadot-JS Guides about Nomination Pools.",keyword:["stake","staking","pools","create","destroy","claim","rewards","polkadot-js"],slug:"../learn-guides-staking-pools"},sidebar:"docs",previous:{title:"Nominator Guides",permalink:"/docs/learn-guides-nominator"},next:{title:"OpenGov Guides",permalink:"/docs/learn-guides-polkadot-opengov"}},c={},u=[{value:"Pool Creation with Polkadot-JS",id:"pool-creation-with-polkadot-js",level:2},{value:"Pool Upkeep with Polkadot-JS",id:"pool-upkeep-with-polkadot-js",level:2},{value:"Pool Destruction with Polkadot-JS",id:"pool-destruction-with-polkadot-js",level:2},{value:"Claim Rewards for Other Pool Members with Polkadot-JS",id:"claim-rewards-for-other-pool-members-with-polkadot-js",level:2}],k={toc:u},m="wrapper";function h(e){var t=e.components,l=(0,n.Z)(e,r);return(0,s.kt)(m,(0,a.Z)({},k,l,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("div",{className:"sticky",style:{zIndex:1}},(0,s.kt)("br",null),(0,s.kt)("p",null,(0,s.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,s.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,s.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,s.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,s.kt)("p",null,"See ",(0,s.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"this page")," to learn about nomination pools."),(0,s.kt)("h2",{id:"pool-creation-with-polkadot-js"},"Pool Creation with Polkadot-JS"),(0,s.kt)("admonition",{type:"info"},(0,s.kt)("p",{parentName:"admonition"},"You easily create a pool using the\n",(0,s.kt)("a",{parentName:"p",href:"/docs/staking-dashboard#pools"},"Polkadot Staking Dashboard"),". See\n",(0,s.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182388-staking-dashboard-how-to-create-a-nomination-pool#How-to-create-a-pool"},"this support article"),"\nfor more information.")),(0,s.kt)("p",null,"The depositor calls the ",(0,s.kt)("inlineCode",{parentName:"p"},"create")," extrinsic, setting the administrative roles and transferring some\nfunds to the pool to add themselves as the first member. As stated above, the depositor must always\nbe a member as long as the pool exists; they will be the last member to leave, ensuring they always\nhave some skin in the game. A significant stake from the depositor is always a good indicator of the\npool's credibility."),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"The current minimum bond to create a pool on"),"\n",(0,s.kt)("strong",{parentName:"p"},"Polkadot"),"","\n",(0,s.kt)("strong",{parentName:"p"},"is ",(0,s.kt)(i.Z,{network:"polkadot",path:"query.nominationPools.minCreateBond",defaultValue:5e12,filter:"humanReadable",mdxType:"RPC"}),"."),"\n",""),(0,s.kt)("p",null,"The pool\u2019s \u2018nominator role\u2019 selects validators with the nominate extrinsic. On Polkadot JS Apps UI,\nnavigate to Network > Staking > Pools and click on Add Pool button."),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"Create Nomination Pools",src:o(85209).Z,width:"1412",height:"638"})),(0,s.kt)("p",null,"The UI automatically assigns an ID to the pool and allows for entering the name of the pools and the\ndeposit to be bonded."),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"Create Nomination Pools - deposit",src:o(58732).Z,width:"1164",height:"458"})),(0,s.kt)("p",null,"When creating a pool using Polkadot JS Apps UI, all the roles are mapped to the Depositor account by\ndefault. If any of these roles need to be assigned to a different account, create the pool using\n",(0,s.kt)("inlineCode",{parentName:"p"},"create")," extrinsic available in\n",(0,s.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Developer > Extrinsics > nominationPools")," on Polkadot JS\nApps UI."),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"Nomination Pool Roles",src:o(12920).Z,width:"1426",height:"558"})),(0,s.kt)("h2",{id:"pool-upkeep-with-polkadot-js"},"Pool Upkeep with Polkadot-JS"),(0,s.kt)("p",null,"The nominator can update the pool\u2019s validator selection. On Polkadot JS Apps UI, navigate to\n",(0,s.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/actions"},"Network > Staking > Accounts page")," and click on\nPooled button. If you have any pooled accounts with the role of nominator, you will notice the\noption to set nominees. Select the validators to nominate like you would normally using a nominator\naccount."),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"Nominate validators",src:o(22455).Z,width:"1810",height:"786"})),(0,s.kt)("p",null,"The root and bouncer can update the pool\u2019s state to blocked through ",(0,s.kt)("inlineCode",{parentName:"p"},"setState")," extrinsic and kick\nmembers by calling ",(0,s.kt)("inlineCode",{parentName:"p"},"unbond")," and ",(0,s.kt)("inlineCode",{parentName:"p"},"withdrawUnbonded"),". (The state can also be toggled back to open)."),(0,s.kt)("h2",{id:"pool-destruction-with-polkadot-js"},"Pool Destruction with Polkadot-JS"),(0,s.kt)("admonition",{type:"info"},(0,s.kt)("p",{parentName:"admonition"},"As a pool admin, you can easily destroy a pool and permissionlessly remove all members using the\n",(0,s.kt)("a",{parentName:"p",href:"/docs/staking-dashboard#pools"},"Polkadot Staking Dashboard"),". See\n",(0,s.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182388-staking-dashboard-how-to-create-a-nomination-pool#How-to-destroy-a-pool"},"this support article"),"\nfor more information.")),(0,s.kt)("p",null,"A pool can be pushed into the \u201cdestroying\u201d state via one of:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"The root and bouncer set the pool to \u201cdestroying\u201d. This can be done by submitting the\n",(0,s.kt)("inlineCode",{parentName:"li"},"nominationPools.setState(poolId, state)")," extrinsic using the\n",(0,s.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/extrinsics"},"Polkadot-JS UI extrinsic tab"),". Where ",(0,s.kt)("inlineCode",{parentName:"li"},"poolId")," is the\nspecific ID of the pool and ",(0,s.kt)("inlineCode",{parentName:"li"},"state"),' is the pool\'s state that must be set to "destroying". Other\npossible states are "open" and "blocked".'),(0,s.kt)("li",{parentName:"ul"},"Any account can set the pool to destroying if over 90% of the pool's active bonded balance has\nbeen slashed.")),(0,s.kt)("p",null,"When a pool is in \u2018destroying\u2019 state, ",(0,s.kt)("inlineCode",{parentName:"p"},"unbond")," and ",(0,s.kt)("inlineCode",{parentName:"p"},"withdrawUnbonded")," become permissionless, so\nanyone can help all the members exit."),(0,s.kt)("p",null,"The pool is destroyed once the depositor withdraws, no members belong to the pool, and all the\npool\u2019s resources are wiped from the state."),(0,s.kt)("h2",{id:"claim-rewards-for-other-pool-members-with-polkadot-js"},"Claim Rewards for Other Pool Members with Polkadot-JS"),(0,s.kt)("p",null,"As a pool member you can claim rewards for any other members who set their\n",(0,s.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools#claim-permissions"},"claim permissions")," to one of the ",(0,s.kt)("em",{parentName:"p"},"permissionless"),"\noptions."),(0,s.kt)("p",null,"Let's take the example of ALICE setting the claim permissions to ",(0,s.kt)("inlineCode",{parentName:"p"},"PermissionlessAll"),". Another\naccount STASH can now claim ALICE's rewards (as a free balance or compound them to the existing\nbonded balance). To do so, STASH can go to the\n",(0,s.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Polkadot-JS UI Extrinsic Tab")," and issue the following\nextrisics:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"nominationPools.claimPayoutOthers")," extrinsic specifying ALICE's account. This will claim the\nrewards as a free balance on ALICE's account.")),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"pools-payoutOthers",src:o(51546).Z,width:"1499",height:"458"})),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"nominationPools.bondExtraOthers")," extrinsic specifying ALICE's account and the option to bond:",(0,s.kt)("ul",{parentName:"li"},(0,s.kt)("li",{parentName:"ul"},"the free balance currently available in ALICE's account (",(0,s.kt)("inlineCode",{parentName:"li"},"FreeBalance"),") or"),(0,s.kt)("li",{parentName:"ul"},"the pool rewards (",(0,s.kt)("inlineCode",{parentName:"li"},"Rewards"),") unclaimed by ALICE.")))),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"pools-bondExtraOthers",src:o(63547).Z,width:"1496",height:"643"})))}h.isMDXComponent=!0},63547:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/nomination-pools-bondExtraOthers-d4492df464bbc1cd2c04be211a78eb46.png"},51546:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/nomination-pools-payoutOthers-bfe1ad190e494f39c2c74d65e7edd12c.png"},85209:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/Nomination-Pools-1-98ee6b5592f6851aa57c9d427d70598f.png"},58732:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/Nomination-Pools-2-84da587a4d7591f2e2f79a4054214984.png"},22455:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/Nomination-Pools-5-9b16b01bde4e095d3c8fa71aa9a9a6ca.png"},12920:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/Nomination-Pools-7-74928d7825f19208592498e7b12dee5c.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/4f031749.a3ac851b.js b/assets/js/4f031749.a3ac851b.js deleted file mode 100644 index b6e5206bc4cf..000000000000 --- a/assets/js/4f031749.a3ac851b.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[2008],{47940:(e,t,o)=>{"use strict";o.d(t,{Z:()=>u});var a=o(74165),n=o(15861),s=o(67294),i=o(87152),r=o(14741),l=o(67425);function p(e,t,o){return d.apply(this,arguments)}function d(){return(d=(0,n.Z)((0,a.Z)().mark((function e(t,o,n){var s,l,p,d,c;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:s=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return s="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return s="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return s="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return s="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==s){e.next=18;break}return e.abrupt("return");case 18:return p=new i.U(s),e.next=21,r.G.create({provider:p});case 21:d=e.sent,(c=o.split(".")).forEach((function(e){e in d&&(d=d[e])})),e.t1=c[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=d.toString(),e.abrupt("break",35);case 29:return e.next=31,d();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+c[0]+") in "+o);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function c(e,t,o,a){switch(t){case"humanReadable":(0,l.HumanReadable)(e,o,a);break;case"precise":(0,l.Precise)(e,o,a);break;case"blocksToDays":(0,l.BlocksToDays)(e,a);break;case"erasToDays":(0,l.ErasToDays)(e,a,o);break;case"percentage":(0,l.Percentage)(e,a);break;case"permillToPercent":(0,l.PermillToPercent)(e,a);break;case"arrayLength":(0,l.ArrayLength)(e,a);break;default:return void console.log("Ignoring unknown filter type")}}const u=function(e){var t=e.network,o=e.path,i=e.defaultValue,r=e.filter,l=void 0===r?void 0:r,d=(0,s.useState)(""),u=d[0],k=d[1];return t=t.toLowerCase(),(0,s.useEffect)((function(){void 0!==l?c(i.toString(),l,t,k):k(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var s=function(){var e=(0,n.Z)((0,a.Z)().mark((function e(){var n;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,p(t,o,k);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?c(n,l,t,k):k(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{s()}catch(r){console.log(r)}}}),[]),u}},67425:e=>{var t="polkadot",o="kusama",a="statemine",n="statemint",s={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,r){var l=void 0;if(i===t||i===n)l=3;else{if(i!==o&&i!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),r((e=Number.isInteger(e/s[i].precision)?e/s[i].precision+" "+s[i].symbol:(e/s[i].precision).toFixed(l)+" "+s[i].symbol).toString())},Precise:function(e,t,o){o(e=(e=parseFloat(e))/s[t].precision+" "+s[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,s,i){var r=void 0;if(i===t||i===n)r=1;else{if(i!==o&&i!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");r=4}s((e/=r).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},44002:(e,t,o)=>{"use strict";o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>p,default:()=>h,frontMatter:()=>l,metadata:()=>d,toc:()=>u});var a=o(87462),n=o(63366),s=(o(67294),o(3905)),i=o(47940),r=["components"],l={id:"learn-guides-staking-pools",title:"Polkadot-JS Guides for Pool Creators",sidebar_label:"Nomination Pool Guides",description:"Polkadot-JS Guides about Nomination Pools.",keyword:["stake","staking","pools","create","destroy","claim","rewards","polkadot-js"],slug:"../learn-guides-staking-pools"},p=void 0,d={unversionedId:"learn/learn-guides-staking-pools",id:"learn/learn-guides-staking-pools",title:"Polkadot-JS Guides for Pool Creators",description:"Polkadot-JS Guides about Nomination Pools.",source:"@site/../docs/learn/learn-guides-staking-pools.md",sourceDirName:"learn",slug:"/learn-guides-staking-pools",permalink:"/docs/learn-guides-staking-pools",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-staking-pools.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710309813,formattedLastUpdatedAt:"Mar 13, 2024",frontMatter:{id:"learn-guides-staking-pools",title:"Polkadot-JS Guides for Pool Creators",sidebar_label:"Nomination Pool Guides",description:"Polkadot-JS Guides about Nomination Pools.",keyword:["stake","staking","pools","create","destroy","claim","rewards","polkadot-js"],slug:"../learn-guides-staking-pools"},sidebar:"docs",previous:{title:"Nominator Guides",permalink:"/docs/learn-guides-staking"},next:{title:"OpenGov Guides",permalink:"/docs/learn-guides-polkadot-opengov"}},c={},u=[{value:"Pool Creation with Polkadot-JS",id:"pool-creation-with-polkadot-js",level:2},{value:"Pool Upkeep with Polkadot-JS",id:"pool-upkeep-with-polkadot-js",level:2},{value:"Pool Destruction with Polkadot-JS",id:"pool-destruction-with-polkadot-js",level:2},{value:"Claim Rewards for Other Pool Members with Polkadot-JS",id:"claim-rewards-for-other-pool-members-with-polkadot-js",level:2}],k={toc:u},m="wrapper";function h(e){var t=e.components,l=(0,n.Z)(e,r);return(0,s.kt)(m,(0,a.Z)({},k,l,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("p",null,"See ",(0,s.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"this page")," to learn about nomination pools."),(0,s.kt)("h2",{id:"pool-creation-with-polkadot-js"},"Pool Creation with Polkadot-JS"),(0,s.kt)("admonition",{type:"info"},(0,s.kt)("p",{parentName:"admonition"},"You easily create a pool using the\n",(0,s.kt)("a",{parentName:"p",href:"/docs/staking-dashboard#pools"},"Polkadot Staking Dashboard"),". See\n",(0,s.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182388-staking-dashboard-how-to-create-a-nomination-pool#How-to-create-a-pool"},"this support article"),"\nfor more information.")),(0,s.kt)("p",null,"The depositor calls the ",(0,s.kt)("inlineCode",{parentName:"p"},"create")," extrinsic, setting the administrative roles and transferring some\nfunds to the pool to add themselves as the first member. As stated above, the depositor must always\nbe a member as long as the pool exists; they will be the last member to leave, ensuring they always\nhave some skin in the game. A significant stake from the depositor is always a good indicator of the\npool's credibility."),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"The current minimum bond to create a pool on"),"\n",(0,s.kt)("strong",{parentName:"p"},"Polkadot"),"","\n",(0,s.kt)("strong",{parentName:"p"},"is ",(0,s.kt)(i.Z,{network:"polkadot",path:"query.nominationPools.minCreateBond",defaultValue:5e12,filter:"humanReadable",mdxType:"RPC"}),"."),"\n",""),(0,s.kt)("p",null,"The pool\u2019s \u2018nominator role\u2019 selects validators with the nominate extrinsic. On Polkadot JS Apps UI,\nnavigate to Network > Staking > Pools and click on Add Pool button."),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"Create Nomination Pools",src:o(85209).Z,width:"1412",height:"638"})),(0,s.kt)("p",null,"The UI automatically assigns an ID to the pool and allows for entering the name of the pools and the\ndeposit to be bonded."),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"Create Nomination Pools - deposit",src:o(58732).Z,width:"1164",height:"458"})),(0,s.kt)("p",null,"When creating a pool using Polkadot JS Apps UI, all the roles are mapped to the Depositor account by\ndefault. If any of these roles need to be assigned to a different account, create the pool using\n",(0,s.kt)("inlineCode",{parentName:"p"},"create")," extrinsic available in\n",(0,s.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Developer > Extrinsics > nominationPools")," on Polkadot JS\nApps UI."),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"Nomination Pool Roles",src:o(12920).Z,width:"1426",height:"558"})),(0,s.kt)("h2",{id:"pool-upkeep-with-polkadot-js"},"Pool Upkeep with Polkadot-JS"),(0,s.kt)("p",null,"The nominator can update the pool\u2019s validator selection. On Polkadot JS Apps UI, navigate to\n",(0,s.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/actions"},"Network > Staking > Accounts page")," and click on\nPooled button. If you have any pooled accounts with the role of nominator, you will notice the\noption to set nominees. Select the validators to nominate like you would normally using a nominator\naccount."),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"Nominate validators",src:o(22455).Z,width:"1810",height:"786"})),(0,s.kt)("p",null,"The root and bouncer can update the pool\u2019s state to blocked through ",(0,s.kt)("inlineCode",{parentName:"p"},"setState")," extrinsic and kick\nmembers by calling ",(0,s.kt)("inlineCode",{parentName:"p"},"unbond")," and ",(0,s.kt)("inlineCode",{parentName:"p"},"withdrawUnbonded"),". (The state can also be toggled back to open)."),(0,s.kt)("h2",{id:"pool-destruction-with-polkadot-js"},"Pool Destruction with Polkadot-JS"),(0,s.kt)("admonition",{type:"info"},(0,s.kt)("p",{parentName:"admonition"},"As a pool admin, you can easily destroy a pool and permissionlessly remove all members using the\n",(0,s.kt)("a",{parentName:"p",href:"/docs/staking-dashboard#pools"},"Polkadot Staking Dashboard"),". See\n",(0,s.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182388-staking-dashboard-how-to-create-a-nomination-pool#How-to-destroy-a-pool"},"this support article"),"\nfor more information.")),(0,s.kt)("p",null,"A pool can be pushed into the \u201cdestroying\u201d state via one of:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"The root and bouncer set the pool to \u201cdestroying\u201d. This can be done by submitting the\n",(0,s.kt)("inlineCode",{parentName:"li"},"nominationPools.setState(poolId, state)")," extrinsic using the\n",(0,s.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/extrinsics"},"Polkadot-JS UI extrinsic tab"),". Where ",(0,s.kt)("inlineCode",{parentName:"li"},"poolId")," is the\nspecific ID of the pool and ",(0,s.kt)("inlineCode",{parentName:"li"},"state"),' is the pool\'s state that must be set to "destroying". Other\npossible states are "open" and "blocked".'),(0,s.kt)("li",{parentName:"ul"},"Any account can set the pool to destroying if over 90% of the pool's active bonded balance has\nbeen slashed.")),(0,s.kt)("p",null,"When a pool is in \u2018destroying\u2019 state, ",(0,s.kt)("inlineCode",{parentName:"p"},"unbond")," and ",(0,s.kt)("inlineCode",{parentName:"p"},"withdrawUnbonded")," become permissionless, so\nanyone can help all the members exit."),(0,s.kt)("p",null,"The pool is destroyed once the depositor withdraws, no members belong to the pool, and all the\npool\u2019s resources are wiped from the state."),(0,s.kt)("h2",{id:"claim-rewards-for-other-pool-members-with-polkadot-js"},"Claim Rewards for Other Pool Members with Polkadot-JS"),(0,s.kt)("p",null,"As a pool member you can claim rewards for any other members who set their\n",(0,s.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools#claim-permissions"},"claim permissions")," to one of the ",(0,s.kt)("em",{parentName:"p"},"permissionless"),"\noptions."),(0,s.kt)("p",null,"Let's take the example of ALICE setting the claim permissions to ",(0,s.kt)("inlineCode",{parentName:"p"},"PermissionlessAll"),". Another\naccount STASH can now claim ALICE's rewards (as a free balance or compound them to the existing\nbonded balance). To do so, STASH can go to the\n",(0,s.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Polkadot-JS UI Extrinsic Tab")," and issue the following\nextrisics:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"nominationPools.claimPayoutOthers")," extrinsic specifying ALICE's account. This will claim the\nrewards as a free balance on ALICE's account.")),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"pools-payoutOthers",src:o(51546).Z,width:"1499",height:"458"})),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"nominationPools.bondExtraOthers")," extrinsic specifying ALICE's account and the option to bond:",(0,s.kt)("ul",{parentName:"li"},(0,s.kt)("li",{parentName:"ul"},"the free balance currently available in ALICE's account (",(0,s.kt)("inlineCode",{parentName:"li"},"FreeBalance"),") or"),(0,s.kt)("li",{parentName:"ul"},"the pool rewards (",(0,s.kt)("inlineCode",{parentName:"li"},"Rewards"),") unclaimed by ALICE.")))),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"pools-bondExtraOthers",src:o(63547).Z,width:"1496",height:"643"})))}h.isMDXComponent=!0},63547:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/nomination-pools-bondExtraOthers-d4492df464bbc1cd2c04be211a78eb46.png"},51546:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/nomination-pools-payoutOthers-bfe1ad190e494f39c2c74d65e7edd12c.png"},85209:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/Nomination-Pools-1-98ee6b5592f6851aa57c9d427d70598f.png"},58732:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/Nomination-Pools-2-84da587a4d7591f2e2f79a4054214984.png"},22455:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/Nomination-Pools-5-9b16b01bde4e095d3c8fa71aa9a9a6ca.png"},12920:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/Nomination-Pools-7-74928d7825f19208592498e7b12dee5c.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/694672cd.026cdae7.js b/assets/js/694672cd.026cdae7.js new file mode 100644 index 000000000000..eb6ef06c053c --- /dev/null +++ b/assets/js/694672cd.026cdae7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8138],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},d=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=c(r),m=a,f=u["".concat(l,".").concat(m)]||u[m]||p[m]||i;return r?n.createElement(f,o(o({ref:t},d),{},{components:r})):n.createElement(f,o({ref:t},d))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=r.length,o=new Array(i);o[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:a,o[1]=s;for(var c=2;c{r.d(t,{Z:()=>k});var n=r(67294),a=r(86010),i=r(53438),o=r(39960),s=r(13919),l=r(95999);const c={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function d(e){var t=e.href,r=e.children;return n.createElement(o.Z,{href:t,className:(0,a.Z)("card padding--lg",c.cardContainer)},r)}function u(e){var t=e.href,r=e.icon,i=e.title,o=e.description;return n.createElement(d,{href:t},n.createElement("h2",{className:(0,a.Z)("text--truncate",c.cardTitle),title:i},r," ",i),o&&n.createElement("p",{className:(0,a.Z)("text--truncate",c.cardDescription),title:o},o))}function p(e){var t,r=e.item,a=(0,i.Wl)(r);return a?n.createElement(u,{href:a,icon:"\ud83d\uddc3\ufe0f",title:r.label,description:null!=(t=r.description)?t:(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:r.items.length})}):null}function m(e){var t,r,a=e.item,o=(0,s.Z)(a.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,i.xz)(null!=(t=a.docId)?t:void 0);return n.createElement(u,{href:a.href,icon:o,title:a.label,description:null!=(r=a.description)?r:null==l?void 0:l.description})}function f(e){var t=e.item;switch(t.type){case"link":return n.createElement(m,{item:t});case"category":return n.createElement(p,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}function g(e){var t=e.className,r=(0,i.jA)();return n.createElement(k,{items:r.items,className:t})}function k(e){var t=e.items,r=e.className;if(!t)return n.createElement(g,e);var o=(0,i.MN)(t);return n.createElement("section",{className:(0,a.Z)("row",r)},o.map((function(e,t){return n.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},n.createElement(f,{item:e}))})))}},29576:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>c,default:()=>g,frontMatter:()=>l,metadata:()=>d,toc:()=>p});var n=r(87462),a=r(63366),i=(r(67294),r(3905)),o=r(52991),s=["components"],l={id:"learn-guides-staking",title:"Polkadot-JS Guides about Staking",sidebar_label:"Staking Guides",description:"Polkadot-JS Guides about Staking.",keyword:["nominate","stake","staking","claim","rewards","polkadot-js","pools"],slug:"../learn-guides-staking"},c=void 0,d={unversionedId:"learn/learn-guides-staking",id:"learn/learn-guides-staking",title:"Polkadot-JS Guides about Staking",description:"Polkadot-JS Guides about Staking.",source:"@site/../docs/learn/learn-guides-staking.md",sourceDirName:"learn",slug:"/learn-guides-staking",permalink:"/docs/learn-guides-staking",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-staking.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-staking",title:"Polkadot-JS Guides about Staking",sidebar_label:"Staking Guides",description:"Polkadot-JS Guides about Staking.",keyword:["nominate","stake","staking","claim","rewards","polkadot-js","pools"],slug:"../learn-guides-staking"},sidebar:"docs",previous:{title:"Transfer Guides",permalink:"/docs/learn-guides-transfers"},next:{title:"Nominator Guides",permalink:"/docs/learn-guides-nominator"}},u={},p=[],m={toc:p},f="wrapper";function g(e){var t=e.components,r=(0,a.Z)(e,s);return(0,i.kt)(f,(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("div",{className:"sticky",style:{zIndex:1}},(0,i.kt)("br",null),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,i.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,i.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,i.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,i.kt)(o.Z,{mdxType:"DocCardList"}))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/694672cd.b5bf689a.js b/assets/js/694672cd.b5bf689a.js deleted file mode 100644 index a8e2ecc99104..000000000000 --- a/assets/js/694672cd.b5bf689a.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[8138],{47940:(t,e,a)=>{"use strict";a.d(e,{Z:()=>c});var o=a(74165),n=a(15861),i=a(67294),s=a(87152),r=a(14741),l=a(67425);function p(t,e,a){return d.apply(this,arguments)}function d(){return(d=(0,n.Z)((0,o.Z)().mark((function t(e,a,n){var i,l,p,d,u;return(0,o.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:i=void 0,l=void 0,t.t0=e,t.next="polkadot"===t.t0?5:"kusama"===t.t0?7:"statemine"===t.t0?9:"statemint"===t.t0?11:13;break;case 5:return i="wss://rpc.polkadot.io",t.abrupt("break",14);case 7:return i="wss://kusama-rpc.polkadot.io/",t.abrupt("break",14);case 9:return i="wss://statemine-rpc.polkadot.io/",t.abrupt("break",14);case 11:return i="wss://statemint-rpc.polkadot.io/",t.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==i){t.next=18;break}return t.abrupt("return");case 18:return p=new s.U(i),t.next=21,r.G.create({provider:p});case 21:d=t.sent,(u=a.split(".")).forEach((function(t){t in d&&(d=d[t])})),t.t1=u[0],t.next="consts"===t.t1?27:"query"===t.t1?29:34;break;case 27:return l=d.toString(),t.abrupt("break",35);case 29:return t.next=31,d();case 31:return l=(l=t.sent).toString(),t.abrupt("break",35);case 34:console.log("Unknown path prefix ("+u[0]+") in "+a);case 35:return t.abrupt("return",l);case 36:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function u(t,e,a,o){switch(e){case"humanReadable":(0,l.HumanReadable)(t,a,o);break;case"precise":(0,l.Precise)(t,a,o);break;case"blocksToDays":(0,l.BlocksToDays)(t,o);break;case"erasToDays":(0,l.ErasToDays)(t,o,a);break;case"percentage":(0,l.Percentage)(t,o);break;case"permillToPercent":(0,l.PermillToPercent)(t,o);break;case"arrayLength":(0,l.ArrayLength)(t,o);break;default:return void console.log("Ignoring unknown filter type")}}const c=function(t){var e=t.network,a=t.path,s=t.defaultValue,r=t.filter,l=void 0===r?void 0:r,d=(0,i.useState)(""),c=d[0],k=d[1];return e=e.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?u(s.toString(),l,e,k):k(s.toString());var t=void 0;switch(e){case"polkadot":t="wss://rpc.polkadot.io";break;case"kusama":t="wss://kusama-rpc.polkadot.io/";break;case"statemine":t="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":t="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+e)}if(void 0===t)console.log("Failed to connect to a valid websocket, applying default");else{var i=function(){var t=(0,n.Z)((0,o.Z)().mark((function t(){var n;return(0,o.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,p(e,a,k);case 2:if(void 0!==(n=t.sent)){t.next=7;break}return t.abrupt("return");case 7:void 0!==l?u(n,l,e,k):k(n);case 8:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}();try{i()}catch(r){console.log(r)}}}),[]),c}},67425:t=>{var e="polkadot",a="kusama",o="statemine",n="statemint",i={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};t.exports={HumanReadable:function(t,s,r){var l=void 0;if(s===e||s===n)l=3;else{if(s!==a&&s!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}t=parseFloat(t),r((t=Number.isInteger(t/i[s].precision)?t/i[s].precision+" "+i[s].symbol:(t/i[s].precision).toFixed(l)+" "+i[s].symbol).toString())},Precise:function(t,e,a){a(t=(t=parseFloat(t))/i[e].precision+" "+i[e].symbol)},BlocksToDays:function(t,e){e((t=6*t/86400).toString())},ErasToDays:function(t,i,s){var r=void 0;if(s===e||s===n)r=1;else{if(s!==a&&s!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");r=4}i((t/=r).toString())},Percentage:function(t,e){e((t/=1e7).toString())},PermillToPercent:function(t,e){e((t/=1e4).toString())},ArrayLength:function(t,e){e((t=t.split(",").length).toString())}}},29576:(t,e,a)=>{"use strict";a.r(e),a.d(e,{assets:()=>u,contentTitle:()=>p,default:()=>m,frontMatter:()=>l,metadata:()=>d,toc:()=>c});var o=a(87462),n=a(63366),i=(a(67294),a(3905)),s=a(47940),r=["components"],l={id:"learn-guides-staking",title:"Polkadot-JS Guides For Nominators",sidebar_label:"Nominator Guides",description:"Polkadot-JS Guides for Nominators.",keyword:["nominate","stake","staking","claim","rewards","polkadot-js"],slug:"../learn-guides-staking"},p=void 0,d={unversionedId:"learn/learn-guides-staking",id:"learn/learn-guides-staking",title:"Polkadot-JS Guides For Nominators",description:"Polkadot-JS Guides for Nominators.",source:"@site/../docs/learn/learn-guides-staking.md",sourceDirName:"learn",slug:"/learn-guides-staking",permalink:"/docs/learn-guides-staking",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-staking.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710760005,formattedLastUpdatedAt:"Mar 18, 2024",frontMatter:{id:"learn-guides-staking",title:"Polkadot-JS Guides For Nominators",sidebar_label:"Nominator Guides",description:"Polkadot-JS Guides for Nominators.",keyword:["nominate","stake","staking","claim","rewards","polkadot-js"],slug:"../learn-guides-staking"},sidebar:"docs",previous:{title:"Staking Guides",permalink:"/docs/learn-guides-staking-index"},next:{title:"Nomination Pool Guides",permalink:"/docs/learn-guides-staking-pools"}},u={},c=[{value:"Nominate Using Polkadot-JS",id:"nominate-using-polkadot-js",level:2},{value:"Bond your tokens",id:"bond-your-tokens",level:3},{value:"Nominate a validator",id:"nominate-a-validator",level:3},{value:"Stop nominating",id:"stop-nominating",level:3},{value:"Claiming Rewards with Polkadot-JS",id:"claiming-rewards-with-polkadot-js",level:2},{value:"Using Command-Line Interface (CLI)",id:"using-command-line-interface-cli",level:2},{value:"Step 1: Install @polkadot/api-cli",id:"step-1-install-polkadotapi-cli",level:3},{value:"Step 2: Bond Tokens",id:"step-2-bond-tokens",level:3},{value:"Step 3: Nominate a validator",id:"step-3-nominate-a-validator",level:3}],k={toc:c},h="wrapper";function m(t){var e=t.components,l=(0,n.Z)(t,r);return(0,i.kt)(h,(0,o.Z)({},k,l,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"this page")," to learn about staking."),(0,i.kt)("h2",{id:"nominate-using-polkadot-js"},"Nominate Using Polkadot-JS"),(0,i.kt)("admonition",{title:"Video Tutorials",type:"info"},(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://youtu.be/FCXC0CDhyS4?t=219"},"How to Nominate/Stake")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://youtu.be/7VlTncHCGPc"},"Staking with a Ledger device and Polkadot-JS")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=jL-N_IWiYVA"},"Staking with a Ledger device and Ledger Live")))),(0,i.kt)("h3",{id:"bond-your-tokens"},"Bond your tokens"),(0,i.kt)("admonition",{title:"Support Article",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Read the support article about\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000168057-polkadot-js-ui-how-do-i-stake-nominate-on-polkadot-"},"How to Bond Tokens and Nominate"),".")),(0,i.kt)("p",null,"On the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps"},"Polkadot-JS UI"),' navigate to the "Staking" tab (within the\n"Network" menu).'),(0,i.kt)("p",null,'The "Staking Overview" subsection will show you all the active validators and their information -\ntheir identities, the amount of KSM that are staking for them, amount that is their own provided\nstake, how much they charge in commission, the era points they\'ve earned in the current era, and the\nlast block number that they produced. If you click on the chart button it will take you to the\n"Validator Stats" page for that validator that shows you more detailed and historical information\nabout the validator\'s stake, rewards and slashes.'),(0,i.kt)("p",null,'The "Account actions" subsection (',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/actions"},"link"),") allows you\nto stake and nominate."),(0,i.kt)("p",null,'The "Payouts" subsection (',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/payouts"},"link"),") allows you to\nclaim rewards from staking."),(0,i.kt)("p",null,'The "Targets" subsection (',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/targets"},"link"),") will help you\nestimate your earnings and this is where it's good to start picking favorites."),(0,i.kt)("p",null,'The "Waiting" subsection (',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/waiting"},"link"),") lists all pending\nvalidators that are awaiting more nominations to enter the active validator set. Validators will\nstay in the waiting queue until they have enough KSM backing them (as allocated through the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"Phragm\xe9n election mechanism"),"). It is possible validator can remain in the\nqueue for a very long time if they never get enough backing."),(0,i.kt)("p",null,'The "Validator Stats" subsection (',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/query"},"link"),") allows you\nto query a validator's stash address and see historical charts on era points, elected stake,\nrewards, and slashes."),(0,i.kt)("p",null,'Pick "Account actions" underneath "Network" > "Staking", then click the "+ Nominator" button.'),(0,i.kt)("p",null,"You will see a modal window that looks like the below:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"nominator-update-1",src:a(86367).Z,width:"2194",height:"1170"})),(0,i.kt)("p",null,'Select a "value bonded" that is ',(0,i.kt)("strong",{parentName:"p"},"less")," than the total amount of KSM you have, so you have some\nleft over to pay transaction fees. Transaction fees are currently at least 0.01 KSM, but they are\ndynamic based on a variety of factors including the load of recent blocks."),(0,i.kt)("p",null,"Also be mindful of the reaping threshold - the amount that must remain in an account lest it be\nburned. That amount is 0.01 in Kusama, so it's recommended to keep at least 0.1 KSM in your account\nto be on the safe side."),(0,i.kt)("p",null,"Choose whatever payment destination that makes sense to you. If you're unsure, you can choose \"Stash\naccount (increase amount at stake)\" to simply accrue the rewards into the amount you're staking and\nearn compound interest."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Payout account selection dropdown with the custom account option highlighted",src:a(42394).Z,width:"742",height:"245"})),(0,i.kt)("h3",{id:"nominate-a-validator"},"Nominate a validator"),(0,i.kt)("admonition",{title:"Support Article",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Read the support article about\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000150130-how-do-i-know-which-validators-to-choose-"},"How to Select Validators"),".")),(0,i.kt)("p",null,"You are now bonded. Being bonded means your tokens are locked and could be\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking#slashing"},"slashed")," if the validators you nominate misbehave. All bonded funds\ncan now be distributed to up to 16 validators. Be\ncareful about the validators you choose since you will be slashed if your validator commits an\noffence."),(0,i.kt)("p",null,'Click on "Nominate" on an account you\'ve bonded and you will be presented with another popup asking\nyou to select some validators.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Nominating validators",src:a(47043).Z,width:"2208",height:"982"})),(0,i.kt)("p",null,"Select them, confirm the transaction, and you're done - you are now nominating. Your nominations\nwill become active in the next era. Eras last six hours on Kusama - depending on when you do this,\nyour nominations may become active almost immediately, or you may have to wait almost the entire six\nhours before your nominations are active. You can check how far along Kusama is in the current era\non the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking"},"Staking page"),"."),(0,i.kt)("p",null,"Assuming at least one of your nominations ends up in the active validator set, you will start to get\nrewards allocated to you. In order to claim them (i.e., add them to your account), you must manually\nclaim them. To initiate a claim, you can do it yourself or have the validator that you staked for\ninitiate a claim. This is to help optimize the effectiveness and storage of payouts on Kusama. See\nthe ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking#claiming-rewards"},"Claiming Rewards")," section of the Staking wiki page for\nmore details."),(0,i.kt)("h3",{id:"stop-nominating"},"Stop nominating"),(0,i.kt)("admonition",{title:"Support Article",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Read the support article about\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000167902-how-can-i-unstake-my-tokens-again-"},"How to Stop Nominating & Unbond Tokens"),".\nSee also the support article about\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000170241-polkadot-js-ui-how-to-rebond-tokens-during-the-unbonding-period"},"How to Rebond Tokens"),".")),(0,i.kt)("p",null,"At some point, you might decide to stop nominating one or more validators. You can always change who\nyou're nominating, but you cannot withdraw your tokens unless you unbond them."),(0,i.kt)("h2",{id:"claiming-rewards-with-polkadot-js"},"Claiming Rewards with Polkadot-JS"),(0,i.kt)("p",null,"Anyone can trigger a payout for any validator, as long as they are willing to pay the transaction\nfee. Someone must submit a transaction with a validator ID and an era index.\nPolkadot will automatically calculate that\nvalidator's reward, find the top\n",(0,i.kt)(s.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n","\nnominators for that era, and distribute the rewards pro rata."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"The Staking system only applies the highest\n",(0,i.kt)(s.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n","\nnominations to each validator to reduce the complexity of the staking set.")),(0,i.kt)("p",null,"These details are handled for you automatically if you use the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/payout"},"Polkadot-JS UI"),", which also allows you to submit\nbatches of eras at once."),(0,i.kt)("p",null,'To claim rewards on Polkadot-JS UI, you will need to be in the "Payouts" tab underneath "Staking",\nwhich will list all the pending payouts for your stashes.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"pending-payouts",src:a(26416).Z,width:"2876",height:"600"})),(0,i.kt)("p",null,'To then claim your reward, select the "Payout all" button. This will prompt you to select your stash\naccounts for payout.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"select-payouts",src:a(32348).Z,width:"2192",height:"624"})),(0,i.kt)("p",null,"Once you are done with payout, another screen will appear asking for you to sign and submit the\ntransaction."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"transaction-payouts",src:a(41083).Z,width:"2878",height:"818"})),(0,i.kt)("h2",{id:"using-command-line-interface-cli"},"Using Command-Line Interface (CLI)"),(0,i.kt)("p",null,"Apart from using the Polkadot-JS UI to participate in the staking, you can do all these things in\nCLI instead. The CLI approach allows you to interact with the\nPolkadot network without using Polkadot-JS."),(0,i.kt)("h3",{id:"step-1-install-polkadotapi-cli"},"Step 1: Install @polkadot/api-cli"),(0,i.kt)("p",null,"We assume you have installed ",(0,i.kt)("a",{parentName:"p",href:"https://nodejs.org"},"NodeJS with npm"),". Run the following command to\ninstall the ",(0,i.kt)("inlineCode",{parentName:"p"},"@polkadot/api-cli")," globally:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"npm install -g @polkadot/api-cli\n")),(0,i.kt)("h3",{id:"step-2-bond-tokens"},"Step 2: Bond Tokens"),(0,i.kt)("admonition",{title:"Controller accounts are deprecated",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Controller accounts are deprecated. For more information, see\n",(0,i.kt)("a",{parentName:"p",href:"https://forum.polkadot.network/t/staking-controller-deprecation-plan-staking-ui-leads-comms/2748"},"this discussion"),".")),(0,i.kt)("p",null,"Executing the following command:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'polkadot-js-api --seed "MNEMONIC_PHRASE" tx.staking.bond CONTROLLER_ADDRESS NUMBER_OF_TOKENS REWARD_DESTINATION --ws WEBSOCKET_ENDPOINT\n')),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"CONTROLLER_ADDRESS"),": An address you would like to bond to the stash account. (Controller accounts\nare now deprecated. Refer to\n",(0,i.kt)("a",{parentName:"p",href:"https://forum.polkadot.network/t/staking-controller-deprecation-plan-staking-ui-leads-comms/2748"},"this discussion"),"\nfor additional context)"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"NUMBER_OF_TOKENS"),": The number of DOT you would\nlike to stake to the network.\nDOT has ten decimal places and is always represented as an integer with zeroes at the end. So 1 DOT = 10_000_000_000 Plancks. For more information, see ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-DOT"},"this page"),"."),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"REWARD_DESTINATION"),":"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Staked")," - Pay into the stash account, increasing the amount at stake accordingly."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Stash")," - Pay into the stash account, not increasing the amount at stake."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Account")," - Pay into a custom account, like so:\n",(0,i.kt)("inlineCode",{parentName:"li"},"Account 1n8msHozaNxHicWFnRnNXzvqkYPWczkzUUkHhKw6o2BLBdo"),"","."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Controller")," - Pay into the controller account.")),(0,i.kt)("p",null,"Example for Kusama:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'polkadot-js-api --seed "xxxx xxxxx xxxx xxxxx" tx.staking.bond DMTHrNcmA8QbqRS4rBq8LXn8ipyczFoNMb1X4cY2WD9tdBX 1000000000000 Staked --ws wss://kusama-rpc.polkadot.io\n')),(0,i.kt)("p",null,"For wss endpoints see ",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-endpoints"},"this page"),"."),(0,i.kt)("p",null,"Result:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'...\n...\n "status": {\n "InBlock": "0x0ed1ec0ba69564e8f98958d69f826adef895b5617366a32a3aa384290e98514e"\n }\n')),(0,i.kt)("p",null,"You can check the transaction status by using the value of the ",(0,i.kt)("inlineCode",{parentName:"p"},"InBlock")," in\n",(0,i.kt)("a",{parentName:"p",href:"https://www.subscan.io/"},"Subscan"),". Also, you can verify the bonding state under the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/actions"},"Staking")," page on the Polkadot-JS UI."),(0,i.kt)("h3",{id:"step-3-nominate-a-validator"},"Step 3: Nominate a validator"),(0,i.kt)("p",null,"To nominate a validator, you can execute the following command:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'polkadot-js-api --seed "MNEMONIC_PHRASE" tx.staking.nominate \'["VALIDATOR_ADDRESS"]\' --ws WS_ENDPOINT\n')),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'polkadot-js-api --seed "xxxx xxxxx xxxx xxxxx" tx.staking.nominate \'["CmD9vaMYoiKe7HiFnfkftwvhKbxN9bhyjcDrfFRGbifJEG8","E457XaKbj2yTB2URy8N4UuzmyuFRkcdxYs67UvSgVr7HyFb"]\' --ws wss://kusama-rpc.polkadot.io\n')),(0,i.kt)("p",null,"After a few seconds, you should see the hash of the transaction, and if you would like to verify the\nnomination status, you can check that on the Polkadot-JS UI as well."))}m.isMDXComponent=!0},86367:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/kusama_nominator_popup-633f75e8b404699f33b7d78f5ad7fd34.png"},47043:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/kusama_nominator_selection-8e7c4058648339294ebce2e1ce0c58e8.png"},42394:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/01-cc60f0cb7494041501c0ed80e5dca352.png"},41083:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/polkadotjs_payout_complete-87ad124d5d70e50c16f1434074562d70.png"},26416:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/polkadotjs_payout_page-fc4f62399f71b542e9eaac01405ef528.png"},32348:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/polkadotjs_payout_popup-feb847cdfae64f3fa247cdb2beea4ba6.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/804b1e9f.fc9d38a4.js b/assets/js/804b1e9f.fc9d38a4.js new file mode 100644 index 000000000000..9cec72484b06 --- /dev/null +++ b/assets/js/804b1e9f.fc9d38a4.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[230],{47940:(t,e,a)=>{"use strict";a.d(e,{Z:()=>c});var o=a(74165),n=a(15861),i=a(67294),s=a(87152),r=a(14741),l=a(67425);function p(t,e,a){return d.apply(this,arguments)}function d(){return(d=(0,n.Z)((0,o.Z)().mark((function t(e,a,n){var i,l,p,d,u;return(0,o.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:i=void 0,l=void 0,t.t0=e,t.next="polkadot"===t.t0?5:"kusama"===t.t0?7:"statemine"===t.t0?9:"statemint"===t.t0?11:13;break;case 5:return i="wss://rpc.polkadot.io",t.abrupt("break",14);case 7:return i="wss://kusama-rpc.polkadot.io/",t.abrupt("break",14);case 9:return i="wss://statemine-rpc.polkadot.io/",t.abrupt("break",14);case 11:return i="wss://statemint-rpc.polkadot.io/",t.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==i){t.next=18;break}return t.abrupt("return");case 18:return p=new s.U(i),t.next=21,r.G.create({provider:p});case 21:d=t.sent,(u=a.split(".")).forEach((function(t){t in d&&(d=d[t])})),t.t1=u[0],t.next="consts"===t.t1?27:"query"===t.t1?29:34;break;case 27:return l=d.toString(),t.abrupt("break",35);case 29:return t.next=31,d();case 31:return l=(l=t.sent).toString(),t.abrupt("break",35);case 34:console.log("Unknown path prefix ("+u[0]+") in "+a);case 35:return t.abrupt("return",l);case 36:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function u(t,e,a,o){switch(e){case"humanReadable":(0,l.HumanReadable)(t,a,o);break;case"precise":(0,l.Precise)(t,a,o);break;case"blocksToDays":(0,l.BlocksToDays)(t,o);break;case"erasToDays":(0,l.ErasToDays)(t,o,a);break;case"percentage":(0,l.Percentage)(t,o);break;case"permillToPercent":(0,l.PermillToPercent)(t,o);break;case"arrayLength":(0,l.ArrayLength)(t,o);break;default:return void console.log("Ignoring unknown filter type")}}const c=function(t){var e=t.network,a=t.path,s=t.defaultValue,r=t.filter,l=void 0===r?void 0:r,d=(0,i.useState)(""),c=d[0],k=d[1];return e=e.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?u(s.toString(),l,e,k):k(s.toString());var t=void 0;switch(e){case"polkadot":t="wss://rpc.polkadot.io";break;case"kusama":t="wss://kusama-rpc.polkadot.io/";break;case"statemine":t="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":t="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+e)}if(void 0===t)console.log("Failed to connect to a valid websocket, applying default");else{var i=function(){var t=(0,n.Z)((0,o.Z)().mark((function t(){var n;return(0,o.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,p(e,a,k);case 2:if(void 0!==(n=t.sent)){t.next=7;break}return t.abrupt("return");case 7:void 0!==l?u(n,l,e,k):k(n);case 8:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}();try{i()}catch(r){console.log(r)}}}),[]),c}},67425:t=>{var e="polkadot",a="kusama",o="statemine",n="statemint",i={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};t.exports={HumanReadable:function(t,s,r){var l=void 0;if(s===e||s===n)l=3;else{if(s!==a&&s!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}t=parseFloat(t),r((t=Number.isInteger(t/i[s].precision)?t/i[s].precision+" "+i[s].symbol:(t/i[s].precision).toFixed(l)+" "+i[s].symbol).toString())},Precise:function(t,e,a){a(t=(t=parseFloat(t))/i[e].precision+" "+i[e].symbol)},BlocksToDays:function(t,e){e((t=6*t/86400).toString())},ErasToDays:function(t,i,s){var r=void 0;if(s===e||s===n)r=1;else{if(s!==a&&s!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");r=4}i((t/=r).toString())},Percentage:function(t,e){e((t/=1e7).toString())},PermillToPercent:function(t,e){e((t/=1e4).toString())},ArrayLength:function(t,e){e((t=t.split(",").length).toString())}}},46494:(t,e,a)=>{"use strict";a.r(e),a.d(e,{assets:()=>u,contentTitle:()=>p,default:()=>h,frontMatter:()=>l,metadata:()=>d,toc:()=>c});var o=a(87462),n=a(63366),i=(a(67294),a(3905)),s=a(47940),r=["components"],l={id:"learn-guides-nominator",title:"Polkadot-JS Guides For Nominators",sidebar_label:"Nominator Guides",description:"Polkadot-JS Guides for Nominators.",keyword:["nominate","stake","staking","claim","rewards","polkadot-js"],slug:"../learn-guides-nominator"},p=void 0,d={unversionedId:"learn/learn-guides-nominator",id:"learn/learn-guides-nominator",title:"Polkadot-JS Guides For Nominators",description:"Polkadot-JS Guides for Nominators.",source:"@site/../docs/learn/learn-guides-nominator.md",sourceDirName:"learn",slug:"/learn-guides-nominator",permalink:"/docs/learn-guides-nominator",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-nominator.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-nominator",title:"Polkadot-JS Guides For Nominators",sidebar_label:"Nominator Guides",description:"Polkadot-JS Guides for Nominators.",keyword:["nominate","stake","staking","claim","rewards","polkadot-js"],slug:"../learn-guides-nominator"},sidebar:"docs",previous:{title:"Staking Guides",permalink:"/docs/learn-guides-staking"},next:{title:"Nomination Pool Guides",permalink:"/docs/learn-guides-staking-pools"}},u={},c=[{value:"Nominate Using Polkadot-JS",id:"nominate-using-polkadot-js",level:2},{value:"Bond your tokens",id:"bond-your-tokens",level:3},{value:"Nominate a validator",id:"nominate-a-validator",level:3},{value:"Stop nominating",id:"stop-nominating",level:3},{value:"Claiming Rewards with Polkadot-JS",id:"claiming-rewards-with-polkadot-js",level:2},{value:"Using Command-Line Interface (CLI)",id:"using-command-line-interface-cli",level:2},{value:"Step 1: Install @polkadot/api-cli",id:"step-1-install-polkadotapi-cli",level:3},{value:"Step 2: Bond Tokens",id:"step-2-bond-tokens",level:3},{value:"Step 3: Nominate a validator",id:"step-3-nominate-a-validator",level:3}],k={toc:c},m="wrapper";function h(t){var e=t.components,l=(0,n.Z)(t,r);return(0,i.kt)(m,(0,o.Z)({},k,l,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("div",{className:"sticky",style:{zIndex:1}},(0,i.kt)("br",null),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,i.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,i.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,i.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"this page")," to learn about staking."),(0,i.kt)("h2",{id:"nominate-using-polkadot-js"},"Nominate Using Polkadot-JS"),(0,i.kt)("admonition",{title:"Video Tutorials",type:"info"},(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://youtu.be/FCXC0CDhyS4?t=219"},"How to Nominate/Stake")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://youtu.be/7VlTncHCGPc"},"Staking with a Ledger device and Polkadot-JS")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=jL-N_IWiYVA"},"Staking with a Ledger device and Ledger Live")))),(0,i.kt)("h3",{id:"bond-your-tokens"},"Bond your tokens"),(0,i.kt)("admonition",{title:"Support Article",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Read the support article about\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000168057-polkadot-js-ui-how-do-i-stake-nominate-on-polkadot-"},"How to Bond Tokens and Nominate"),".")),(0,i.kt)("p",null,"On the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps"},"Polkadot-JS UI"),' navigate to the "Staking" tab (within the\n"Network" menu).'),(0,i.kt)("p",null,'The "Staking Overview" subsection will show you all the active validators and their information -\ntheir identities, the amount of KSM that are staking for them, amount that is their own provided\nstake, how much they charge in commission, the era points they\'ve earned in the current era, and the\nlast block number that they produced. If you click on the chart button it will take you to the\n"Validator Stats" page for that validator that shows you more detailed and historical information\nabout the validator\'s stake, rewards and slashes.'),(0,i.kt)("p",null,'The "Account actions" subsection (',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/actions"},"link"),") allows you\nto stake and nominate."),(0,i.kt)("p",null,'The "Payouts" subsection (',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/payouts"},"link"),") allows you to\nclaim rewards from staking."),(0,i.kt)("p",null,'The "Targets" subsection (',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/targets"},"link"),") will help you\nestimate your earnings and this is where it's good to start picking favorites."),(0,i.kt)("p",null,'The "Waiting" subsection (',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/waiting"},"link"),") lists all pending\nvalidators that are awaiting more nominations to enter the active validator set. Validators will\nstay in the waiting queue until they have enough KSM backing them (as allocated through the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"Phragm\xe9n election mechanism"),"). It is possible validator can remain in the\nqueue for a very long time if they never get enough backing."),(0,i.kt)("p",null,'The "Validator Stats" subsection (',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/query"},"link"),") allows you\nto query a validator's stash address and see historical charts on era points, elected stake,\nrewards, and slashes."),(0,i.kt)("p",null,'Pick "Account actions" underneath "Network" > "Staking", then click the "+ Nominator" button.'),(0,i.kt)("p",null,"You will see a modal window that looks like the below:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"nominator-update-1",src:a(86367).Z,width:"2194",height:"1170"})),(0,i.kt)("p",null,'Select a "value bonded" that is ',(0,i.kt)("strong",{parentName:"p"},"less")," than the total amount of KSM you have, so you have some\nleft over to pay transaction fees. Transaction fees are currently at least 0.01 KSM, but they are\ndynamic based on a variety of factors including the load of recent blocks."),(0,i.kt)("p",null,"Also be mindful of the reaping threshold - the amount that must remain in an account lest it be\nburned. That amount is 0.01 in Kusama, so it's recommended to keep at least 0.1 KSM in your account\nto be on the safe side."),(0,i.kt)("p",null,"Choose whatever payment destination that makes sense to you. If you're unsure, you can choose \"Stash\naccount (increase amount at stake)\" to simply accrue the rewards into the amount you're staking and\nearn compound interest."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Payout account selection dropdown with the custom account option highlighted",src:a(42394).Z,width:"742",height:"245"})),(0,i.kt)("h3",{id:"nominate-a-validator"},"Nominate a validator"),(0,i.kt)("admonition",{title:"Support Article",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Read the support article about\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000150130-how-do-i-know-which-validators-to-choose-"},"How to Select Validators"),".")),(0,i.kt)("p",null,"You are now bonded. Being bonded means your tokens are locked and could be\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking#slashing"},"slashed")," if the validators you nominate misbehave. All bonded funds\ncan now be distributed to up to 16 validators. Be\ncareful about the validators you choose since you will be slashed if your validator commits an\noffence."),(0,i.kt)("p",null,'Click on "Nominate" on an account you\'ve bonded and you will be presented with another popup asking\nyou to select some validators.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Nominating validators",src:a(47043).Z,width:"2208",height:"982"})),(0,i.kt)("p",null,"Select them, confirm the transaction, and you're done - you are now nominating. Your nominations\nwill become active in the next era. Eras last six hours on Kusama - depending on when you do this,\nyour nominations may become active almost immediately, or you may have to wait almost the entire six\nhours before your nominations are active. You can check how far along Kusama is in the current era\non the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking"},"Staking page"),"."),(0,i.kt)("p",null,"Assuming at least one of your nominations ends up in the active validator set, you will start to get\nrewards allocated to you. In order to claim them (i.e., add them to your account), you must manually\nclaim them. To initiate a claim, you can do it yourself or have the validator that you staked for\ninitiate a claim. This is to help optimize the effectiveness and storage of payouts on Kusama. See\nthe ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking#claiming-rewards"},"Claiming Rewards")," section of the Staking wiki page for\nmore details."),(0,i.kt)("h3",{id:"stop-nominating"},"Stop nominating"),(0,i.kt)("admonition",{title:"Support Article",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Read the support article about\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000167902-how-can-i-unstake-my-tokens-again-"},"How to Stop Nominating & Unbond Tokens"),".\nSee also the support article about\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000170241-polkadot-js-ui-how-to-rebond-tokens-during-the-unbonding-period"},"How to Rebond Tokens"),".")),(0,i.kt)("p",null,"At some point, you might decide to stop nominating one or more validators. You can always change who\nyou're nominating, but you cannot withdraw your tokens unless you unbond them."),(0,i.kt)("h2",{id:"claiming-rewards-with-polkadot-js"},"Claiming Rewards with Polkadot-JS"),(0,i.kt)("p",null,"Anyone can trigger a payout for any validator, as long as they are willing to pay the transaction\nfee. Someone must submit a transaction with a validator ID and an era index.\nPolkadot will automatically calculate that\nvalidator's reward, find the top\n",(0,i.kt)(s.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n","\nnominators for that era, and distribute the rewards pro rata."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"The Staking system only applies the highest\n",(0,i.kt)(s.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n","\nnominations to each validator to reduce the complexity of the staking set.")),(0,i.kt)("p",null,"These details are handled for you automatically if you use the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/payout"},"Polkadot-JS UI"),", which also allows you to submit\nbatches of eras at once."),(0,i.kt)("p",null,'To claim rewards on Polkadot-JS UI, you will need to be in the "Payouts" tab underneath "Staking",\nwhich will list all the pending payouts for your stashes.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"pending-payouts",src:a(26416).Z,width:"2876",height:"600"})),(0,i.kt)("p",null,'To then claim your reward, select the "Payout all" button. This will prompt you to select your stash\naccounts for payout.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"select-payouts",src:a(32348).Z,width:"2192",height:"624"})),(0,i.kt)("p",null,"Once you are done with payout, another screen will appear asking for you to sign and submit the\ntransaction."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"transaction-payouts",src:a(41083).Z,width:"2878",height:"818"})),(0,i.kt)("h2",{id:"using-command-line-interface-cli"},"Using Command-Line Interface (CLI)"),(0,i.kt)("p",null,"Apart from using the Polkadot-JS UI to participate in the staking, you can do all these things in\nCLI instead. The CLI approach allows you to interact with the\nPolkadot network without using Polkadot-JS."),(0,i.kt)("h3",{id:"step-1-install-polkadotapi-cli"},"Step 1: Install @polkadot/api-cli"),(0,i.kt)("p",null,"We assume you have installed ",(0,i.kt)("a",{parentName:"p",href:"https://nodejs.org"},"NodeJS with npm"),". Run the following command to\ninstall the ",(0,i.kt)("inlineCode",{parentName:"p"},"@polkadot/api-cli")," globally:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"npm install -g @polkadot/api-cli\n")),(0,i.kt)("h3",{id:"step-2-bond-tokens"},"Step 2: Bond Tokens"),(0,i.kt)("admonition",{title:"Controller accounts are deprecated",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Controller accounts are deprecated. For more information, see\n",(0,i.kt)("a",{parentName:"p",href:"https://forum.polkadot.network/t/staking-controller-deprecation-plan-staking-ui-leads-comms/2748"},"this discussion"),".")),(0,i.kt)("p",null,"Executing the following command:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'polkadot-js-api --seed "MNEMONIC_PHRASE" tx.staking.bond CONTROLLER_ADDRESS NUMBER_OF_TOKENS REWARD_DESTINATION --ws WEBSOCKET_ENDPOINT\n')),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"CONTROLLER_ADDRESS"),": An address you would like to bond to the stash account. (Controller accounts\nare now deprecated. Refer to\n",(0,i.kt)("a",{parentName:"p",href:"https://forum.polkadot.network/t/staking-controller-deprecation-plan-staking-ui-leads-comms/2748"},"this discussion"),"\nfor additional context)"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"NUMBER_OF_TOKENS"),": The number of DOT you would\nlike to stake to the network.\nDOT has ten decimal places and is always represented as an integer with zeroes at the end. So 1 DOT = 10_000_000_000 Plancks. For more information, see ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-DOT"},"this page"),"."),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"REWARD_DESTINATION"),":"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Staked")," - Pay into the stash account, increasing the amount at stake accordingly."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Stash")," - Pay into the stash account, not increasing the amount at stake."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Account")," - Pay into a custom account, like so:\n",(0,i.kt)("inlineCode",{parentName:"li"},"Account 1n8msHozaNxHicWFnRnNXzvqkYPWczkzUUkHhKw6o2BLBdo"),"","."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Controller")," - Pay into the controller account.")),(0,i.kt)("p",null,"Example for Kusama:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'polkadot-js-api --seed "xxxx xxxxx xxxx xxxxx" tx.staking.bond DMTHrNcmA8QbqRS4rBq8LXn8ipyczFoNMb1X4cY2WD9tdBX 1000000000000 Staked --ws wss://kusama-rpc.polkadot.io\n')),(0,i.kt)("p",null,"For wss endpoints see ",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-endpoints"},"this page"),"."),(0,i.kt)("p",null,"Result:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'...\n...\n "status": {\n "InBlock": "0x0ed1ec0ba69564e8f98958d69f826adef895b5617366a32a3aa384290e98514e"\n }\n')),(0,i.kt)("p",null,"You can check the transaction status by using the value of the ",(0,i.kt)("inlineCode",{parentName:"p"},"InBlock")," in\n",(0,i.kt)("a",{parentName:"p",href:"https://www.subscan.io/"},"Subscan"),". Also, you can verify the bonding state under the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/actions"},"Staking")," page on the Polkadot-JS UI."),(0,i.kt)("h3",{id:"step-3-nominate-a-validator"},"Step 3: Nominate a validator"),(0,i.kt)("p",null,"To nominate a validator, you can execute the following command:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'polkadot-js-api --seed "MNEMONIC_PHRASE" tx.staking.nominate \'["VALIDATOR_ADDRESS"]\' --ws WS_ENDPOINT\n')),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'polkadot-js-api --seed "xxxx xxxxx xxxx xxxxx" tx.staking.nominate \'["CmD9vaMYoiKe7HiFnfkftwvhKbxN9bhyjcDrfFRGbifJEG8","E457XaKbj2yTB2URy8N4UuzmyuFRkcdxYs67UvSgVr7HyFb"]\' --ws wss://kusama-rpc.polkadot.io\n')),(0,i.kt)("p",null,"After a few seconds, you should see the hash of the transaction, and if you would like to verify the\nnomination status, you can check that on the Polkadot-JS UI as well."))}h.isMDXComponent=!0},86367:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/kusama_nominator_popup-633f75e8b404699f33b7d78f5ad7fd34.png"},47043:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/kusama_nominator_selection-8e7c4058648339294ebce2e1ce0c58e8.png"},42394:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/01-cc60f0cb7494041501c0ed80e5dca352.png"},41083:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/polkadotjs_payout_complete-87ad124d5d70e50c16f1434074562d70.png"},26416:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/polkadotjs_payout_page-fc4f62399f71b542e9eaac01405ef528.png"},32348:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/polkadotjs_payout_popup-feb847cdfae64f3fa247cdb2beea4ba6.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/84ede15a.4f745ebe.js b/assets/js/84ede15a.4f745ebe.js new file mode 100644 index 000000000000..b8dfdc164b0b --- /dev/null +++ b/assets/js/84ede15a.4f745ebe.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[4338],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>p});var n=a(74165),o=a(15861),r=a(67294),i=a(87152),s=a(14741),l=a(67425);function u(e,t,a){return c.apply(this,arguments)}function c(){return(c=(0,o.Z)((0,n.Z)().mark((function e(t,a,o){var r,l,u,c,d;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return r="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return r="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return r="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return r="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==r){e.next=18;break}return e.abrupt("return");case 18:return u=new i.U(r),e.next=21,s.G.create({provider:u});case 21:c=e.sent,(d=a.split(".")).forEach((function(e){e in c&&(c=c[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=c.toString(),e.abrupt("break",35);case 29:return e.next=31,c();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,a,n){switch(t){case"humanReadable":(0,l.HumanReadable)(e,a,n);break;case"precise":(0,l.Precise)(e,a,n);break;case"blocksToDays":(0,l.BlocksToDays)(e,n);break;case"erasToDays":(0,l.ErasToDays)(e,n,a);break;case"percentage":(0,l.Percentage)(e,n);break;case"permillToPercent":(0,l.PermillToPercent)(e,n);break;case"arrayLength":(0,l.ArrayLength)(e,n);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(e){var t=e.network,a=e.path,i=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,c=(0,r.useState)(""),p=c[0],h=c[1];return t=t.toLowerCase(),(0,r.useEffect)((function(){void 0!==l?d(i.toString(),l,t,h):h(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var r=function(){var e=(0,o.Z)((0,n.Z)().mark((function e(){var o;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,u(t,a,h);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(o,l,t,h):h(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{r()}catch(s){console.log(s)}}}),[]),p}},67425:e=>{var t="polkadot",a="kusama",n="statemine",o="statemint",r={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,s){var l=void 0;if(i===t||i===o)l=3;else{if(i!==a&&i!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),s((e=Number.isInteger(e/r[i].precision)?e/r[i].precision+" "+r[i].symbol:(e/r[i].precision).toFixed(l)+" "+r[i].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/r[t].precision+" "+r[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,r,i){var s=void 0;if(i===t||i===o)s=1;else{if(i!==a&&i!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}r((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},52991:(e,t,a)=>{"use strict";a.d(t,{Z:()=>m});var n=a(67294),o=a(86010),r=a(53438),i=a(39960),s=a(13919),l=a(95999);const u={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function c(e){var t=e.href,a=e.children;return n.createElement(i.Z,{href:t,className:(0,o.Z)("card padding--lg",u.cardContainer)},a)}function d(e){var t=e.href,a=e.icon,r=e.title,i=e.description;return n.createElement(c,{href:t},n.createElement("h2",{className:(0,o.Z)("text--truncate",u.cardTitle),title:r},a," ",r),i&&n.createElement("p",{className:(0,o.Z)("text--truncate",u.cardDescription),title:i},i))}function p(e){var t,a=e.item,o=(0,r.Wl)(a);return o?n.createElement(d,{href:o,icon:"\ud83d\uddc3\ufe0f",title:a.label,description:null!=(t=a.description)?t:(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:a.items.length})}):null}function h(e){var t,a,o=e.item,i=(0,s.Z)(o.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,r.xz)(null!=(t=o.docId)?t:void 0);return n.createElement(d,{href:o.href,icon:i,title:o.label,description:null!=(a=o.description)?a:null==l?void 0:l.description})}function k(e){var t=e.item;switch(t.type){case"link":return n.createElement(h,{item:t});case"category":return n.createElement(p,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}function f(e){var t=e.className,a=(0,r.jA)();return n.createElement(m,{items:a.items,className:t})}function m(e){var t=e.items,a=e.className;if(!t)return n.createElement(f,e);var i=(0,r.MN)(t);return n.createElement("section",{className:(0,o.Z)("row",a)},i.map((function(e,t){return n.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},n.createElement(k,{item:e}))})))}},85162:(e,t,a)=>{"use strict";a.d(t,{Z:()=>i});var n=a(67294),o=a(86010);const r={tabItem:"tabItem_Ymn6"};function i(e){var t=e.children,a=e.hidden,i=e.className;return n.createElement("div",{role:"tabpanel",className:(0,o.Z)(r.tabItem,i),hidden:a},t)}},74866:(e,t,a)=>{"use strict";a.d(t,{Z:()=>y});var n=a(87462),o=a(67294),r=a(86010),i=a(12466),s=a(16550),l=a(91980),u=a(67392),c=a(50012);function d(e){return function(e){var t,a;return null!=(t=null==(a=o.Children.map(e,(function(e){if(!e||(0,o.isValidElement)(e)&&(t=e.props)&&"object"==typeof t&&"value"in t)return e;var t;throw new Error("Docusaurus error: Bad child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:a.filter(Boolean))?t:[]}(e).map((function(e){var t=e.props;return{value:t.value,label:t.label,attributes:t.attributes,default:t.default}}))}function p(e){var t=e.values,a=e.children;return(0,o.useMemo)((function(){var e=null!=t?t:d(a);return function(e){var t=(0,u.l)(e,(function(e,t){return e.value===t.value}));if(t.length>0)throw new Error('Docusaurus error: Duplicate values "'+t.map((function(e){return e.value})).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[t,a])}function h(e){var t=e.value;return e.tabValues.some((function(e){return e.value===t}))}function k(e){var t=e.queryString,a=void 0!==t&&t,n=e.groupId,r=(0,s.k6)(),i=function(e){var t=e.queryString,a=void 0!==t&&t,n=e.groupId;if("string"==typeof a)return a;if(!1===a)return null;if(!0===a&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:a,groupId:n});return[(0,l._X)(i),(0,o.useCallback)((function(e){if(i){var t=new URLSearchParams(r.location.search);t.set(i,e),r.replace(Object.assign({},r.location,{search:t.toString()}))}}),[i,r])]}function f(e){var t,a,n,r,i=e.defaultValue,s=e.queryString,l=void 0!==s&&s,u=e.groupId,d=p(e),f=(0,o.useState)((function(){return function(e){var t,a=e.defaultValue,n=e.tabValues;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(a){if(!h({value:a,tabValues:n}))throw new Error('Docusaurus error: The has a defaultValue "'+a+'" but none of its children has the corresponding value. Available values are: '+n.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return a}var o=null!=(t=n.find((function(e){return e.default})))?t:n[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:i,tabValues:d})})),m=f[0],g=f[1],v=k({queryString:l,groupId:u}),b=v[0],w=v[1],y=(t=function(e){return e?"docusaurus.tab."+e:null}({groupId:u}.groupId),a=(0,c.Nk)(t),n=a[0],r=a[1],[n,(0,o.useCallback)((function(e){t&&r.set(e)}),[t,r])]),N=y[0],x=y[1],T=function(){var e=null!=b?b:N;return h({value:e,tabValues:d})?e:null}();return(0,o.useLayoutEffect)((function(){T&&g(T)}),[T]),{selectedValue:m,selectValue:(0,o.useCallback)((function(e){if(!h({value:e,tabValues:d}))throw new Error("Can't select invalid tab value="+e);g(e),w(e),x(e)}),[w,x,d]),tabValues:d}}var m=a(72389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function v(e){var t=e.className,a=e.block,s=e.selectedValue,l=e.selectValue,u=e.tabValues,c=[],d=(0,i.o5)().blockElementScrollPositionUntilNextRender,p=function(e){var t=e.currentTarget,a=c.indexOf(t),n=u[a].value;n!==s&&(d(t),l(n))},h=function(e){var t,a=null;switch(e.key){case"Enter":p(e);break;case"ArrowRight":var n,o=c.indexOf(e.currentTarget)+1;a=null!=(n=c[o])?n:c[0];break;case"ArrowLeft":var r,i=c.indexOf(e.currentTarget)-1;a=null!=(r=c[i])?r:c[c.length-1]}null==(t=a)||t.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t)},u.map((function(e){var t=e.value,a=e.label,i=e.attributes;return o.createElement("li",(0,n.Z)({role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,key:t,ref:function(e){return c.push(e)},onKeyDown:h,onClick:p},i,{className:(0,r.Z)("tabs__item",g.tabItem,null==i?void 0:i.className,{"tabs__item--active":s===t})}),null!=a?a:t)})))}function b(e){var t=e.lazy,a=e.children,n=e.selectedValue,r=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){var i=r.find((function(e){return e.props.value===n}));return i?(0,o.cloneElement)(i,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map((function(e,t){return(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})})))}function w(e){var t=f(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",g.tabList)},o.createElement(v,(0,n.Z)({},e,t)),o.createElement(b,(0,n.Z)({},e,t)))}function y(e){var t=(0,m.Z)();return o.createElement(w,(0,n.Z)({key:String(t)},e))}},6555:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>u,default:()=>f,frontMatter:()=>l,metadata:()=>c,toc:()=>p});var n=a(87462),o=a(63366),r=(a(67294),a(3905)),i=a(47940),s=(a(74866),a(85162),a(52991),["components"]),l={id:"learn-guides-transfers",title:"Polkadot-JS Guides about Transfers",sidebar_label:"Transfer Guides",description:"Polkadot-JS Guides about Balances Transfers.",keywords:["gides","advanced","polkadot-js","transfers"],slug:"../learn-guides-transfers"},u=void 0,c={unversionedId:"learn/learn-guides-transfers",id:"learn/learn-guides-transfers",title:"Polkadot-JS Guides about Transfers",description:"Polkadot-JS Guides about Balances Transfers.",source:"@site/../docs/learn/learn-guides-transfers.md",sourceDirName:"learn",slug:"/learn-guides-transfers",permalink:"/docs/learn-guides-transfers",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-transfers.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-transfers",title:"Polkadot-JS Guides about Transfers",sidebar_label:"Transfer Guides",description:"Polkadot-JS Guides about Balances Transfers.",keywords:["gides","advanced","polkadot-js","transfers"],slug:"../learn-guides-transfers"},sidebar:"docs",previous:{title:"Pure Proxy Guides",permalink:"/docs/learn-guides-accounts-proxy-pure"},next:{title:"Staking Guides",permalink:"/docs/learn-guides-staking"}},d={},p=[{value:"Metadata Updates with the Polkadot-JS Browser Extension",id:"metadata-updates-with-the-polkadot-js-browser-extension",level:2},{value:"Transfers using the Polkadot-JS UI and Browser Extension",id:"transfers-using-the-polkadot-js-ui-and-browser-extension",level:2},{value:"Verify Extrinsics with the Polkadot-JS Browser Extension",id:"verify-extrinsics-with-the-polkadot-js-browser-extension",level:3},{value:"Verify Extrinsics with the Polkadot-JS UI",id:"verify-extrinsics-with-the-polkadot-js-ui",level:3},{value:"Keep-Alive Checks with the Polkadot-JS UI",id:"keep-alive-checks-with-the-polkadot-js-ui",level:3},{value:"Vested Transfers with the Polkadot-JS UI",id:"vested-transfers-with-the-polkadot-js-ui",level:3},{value:"Lazy Vesting",id:"lazy-vesting",level:4},{value:"Calculating When Vesting DOT Will Be Available",id:"calculating-when-vesting-dot-will-be-available",level:4},{value:"Batch Transfers with the Polkadot-JS UI",id:"batch-transfers-with-the-polkadot-js-ui",level:3},{value:"Teleporting Tokens using the Polkadot-JS UI",id:"teleporting-tokens-using-the-polkadot-js-ui",level:3},{value:"Calculating Fees with Polkadot-JS",id:"calculating-fees-with-polkadot-js",level:2},{value:"Existing Reference Error",id:"existing-reference-error",level:2},{value:"Bonded Tokens",id:"bonded-tokens",level:3},{value:"Checking for Locks",id:"checking-for-locks",level:3},{value:"Purging Session Keys",id:"purging-session-keys",level:3},{value:"Existing Recovery Info",id:"existing-recovery-info",level:3},{value:"Existing Non-Native Assets",id:"existing-non-native-assets",level:3}],h={toc:p},k="wrapper";function f(e){var t=e.components,l=(0,o.Z)(e,s);return(0,r.kt)(k,(0,n.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"sticky",style:{zIndex:1}},(0,r.kt)("br",null),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,r.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,r.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,r.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,r.kt)("h2",{id:"metadata-updates-with-the-polkadot-js-browser-extension"},"Metadata Updates with the Polkadot-JS Browser Extension"),(0,r.kt)("p",null,"Before signing extrinsics with the Polkadot-JS Browser Extension, always check for metadata updates.\n",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/gbvrHzr4EDY?t=84"},(0,r.kt)("strong",{parentName:"a"},"This video tutorial"))," will explain how to do it."),(0,r.kt)("admonition",{title:"Polkadot Vault vs Polkadot-JS Browser Extension",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The Polkadot Vault app updates the full metadata through the QR fountain while the extension updates\nthe metadata index (the metadata is not loaded into it). As a consequence the process of updating\nmetadata is different in this two cases (you will notice that on the Vault app the update takes\nlonger for example). Having outdated metadata on the Vault app will prevent you from signing, while\non the extension you will be able to click the sign button but the extrinsic will likely fail\n(similarly of having an outdated Ledger app). In general, failing to update metadata will most\nlikely result in you not being able to sign extrinsics.")),(0,r.kt)("h2",{id:"transfers-using-the-polkadot-js-ui-and-browser-extension"},"Transfers using the Polkadot-JS UI and Browser Extension"),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=gbvrHzr4EDY"},"this video tutorial")," to learn how to send funds\nusing the Polkadot-JS UI and Browser Extension. See also the Polkadot Support pages for detailed\ninformation about signing transactions using\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181993-how-to-sign-a-transaction-directly-on-polkadot-js-ui"},"the Polkadot-JS UI"),"\nand\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181989"},"the Polkadot-JS browser extension"),"."),(0,r.kt)("h3",{id:"verify-extrinsics-with-the-polkadot-js-browser-extension"},"Verify Extrinsics with the Polkadot-JS Browser Extension"),(0,r.kt)("p",null,"Visit the\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000179161-how-can-i-verify-what-extrinsic-i-m-signing-#Verify-an-extrinsic-in-the-Polkadot-extension"},(0,r.kt)("strong",{parentName:"a"},"dedicated support page")),"\nand see ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/bxMs-9fBtFk?t=261"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," tutorial to learn about how to\nverify extrinsics before signing them. The video will also mention potential attacks that can happen\nto you while signing for transactions."),(0,r.kt)("h3",{id:"verify-extrinsics-with-the-polkadot-js-ui"},"Verify Extrinsics with the Polkadot-JS UI"),(0,r.kt)("p",null,"Visit the\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000179161-how-can-i-verify-what-extrinsic-i-m-signing-#Verify-an-extrinsic-in-the-Polkadot-JS-UI"},(0,r.kt)("strong",{parentName:"a"},"dedicated support page")),"\nand see ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/bxMs-9fBtFk?t=163"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," tutorial to learn about how to\nverify extrinsics before signing them. The video will also mention potential attacks that can happen\nto you while signing for transactions."),(0,r.kt)("h3",{id:"keep-alive-checks-with-the-polkadot-js-ui"},"Keep-Alive Checks with the Polkadot-JS UI"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/mgPHVztHJWk"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000168651-what-is-the-existential-deposit-"},(0,r.kt)("strong",{parentName:"a"},"this support page")),"\nto learn about keep-alive checks and existential deposit.")),(0,r.kt)("p",null,"In Polkadot there are two main ways to\ntransfer funds from one account to another:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"transfer keep-alive")," (default option) will not allow you to send an amount that would allow the\nsending account to be removed due to it going below the\n",(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000168651-what-is-the-existential-deposit-"},"existential deposit"),"\nof\n",(0,r.kt)(i.Z,{network:"polkadot",path:"consts.balances.existentialDeposit",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),".\n",""),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"transfer allow-death")," will allow you to send\nDOT regardless of the consequence. If the\nbalance drops below the existential deposit your account will be reaped. It may be that you do not\nwant to keep the account alive (for example, because you are moving all of your funds to a\ndifferent address). To switch the keep-alive check off visit\n",(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000169248"},"this support article"),".")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Attempting to send less than the existential deposit to an account with\n0 DOT will always fail, no matter if the\nkeep-alive check is on or not. For instance, attempting to transfer\n0.1 DOT to an account you just generated\n(and thus has no balance) will fail, since\n0.1 DOT is less than the existential\ndeposit of\n",(0,r.kt)(i.Z,{network:"polkadot",path:"consts.balances.existentialDeposit",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),"\n","\nand the account cannot be initialized with such a low balance."),(0,r.kt)("p",{parentName:"admonition"},"Even if the transfer fails due to a keep-alive check, the transaction fee will be deducted from the\nsending account if you attempt to transfer.")),(0,r.kt)("h3",{id:"vested-transfers-with-the-polkadot-js-ui"},"Vested Transfers with the Polkadot-JS UI"),(0,r.kt)("p",null,"You can watch ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/JVlwTQBwNGc"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," to understand how to do vested\ntransfers using the Polkadot-JS UI, including linear and cliff vesting. Note the tutorial uses the\nWestend Testnet, but the same applies to\nPolkadot."),(0,r.kt)("p",null,"There are two ways that vesting schedules can be created."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"One way is through an extrinsic type available in the Vesting pallet, ",(0,r.kt)("inlineCode",{parentName:"li"},"vested_transfer"),". The\nvested transfer function allows anyone to create a vesting schedule with a transfer of funds, as\nlong as the account for which the vesting schedule will be created does not already have one and\nthe transfer moves at least ",(0,r.kt)("inlineCode",{parentName:"li"},"MinVestedTransfer")," funds, which is specified as a chain constant."),(0,r.kt)("li",{parentName:"ul"},"A second way is as part of the genesis configuration of the chain. In the case of\nPolkadot, the chain specification genesis\nscript reads the state of the Claims contract that exists on the Ethereum blockchain and creates\nvesting schedules in genesis for all the allocations registered as being vested.")),(0,r.kt)("p",null,"Vesting schedules have three parameters:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"locked"),", the amount of tokens to be transferred in\n",(0,r.kt)("a",{parentName:"li",href:"../learn/learn-DOT#the-planck-unit"},"Planck units"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"per block"),", the number of tokens that are released per block"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"starting block"),", the block number after which the vesting schedule starts")),(0,r.kt)("p",null,"The configuration of these three fields dictates the amount of funds that are originally locked, the\nslope of the unlock line and the block number for when the unlocking begins."),(0,r.kt)("h4",{id:"lazy-vesting"},"Lazy Vesting"),(0,r.kt)("p",null,"Like ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced"},"simple payouts"),", vesting is ",(0,r.kt)("em",{parentName:"p"},"lazy"),", which means that someone must\nexplicitly call an extrinsic to update the lock that is placed on an account."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("inlineCode",{parentName:"li"},"vest")," extrinsic will update the lock that is placed on the caller."),(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("inlineCode",{parentName:"li"},"vest_other"),' will update the lock that is placed on another "target" account\'s funds.')),(0,r.kt)("p",null,"These extrinsics are exposed from the Vesting pallet."),(0,r.kt)("p",null,"If you are using the Polkadot-JS UI, when there are\nDOT available to vest for an account, then you\nwill have the ability to unlock DOT which has\nalready vested from the ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Accounts")," page."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"unbond",src:a(27152).Z,width:"241",height:"301"})),(0,r.kt)("h4",{id:"calculating-when-vesting-dot-will-be-available"},"Calculating When Vesting DOT Will Be Available"),(0,r.kt)("p",null,"Generally, you should be able to see from the ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Accounts"),' by\nlooking at your accounts and seeing when the vesting will finish. However, some DOT vest with\n"cliffs" - a single block where all the DOT are released, instead of vesting over time. In this\ncase, you will have to query the chain state directly to see when they will be available (since\ntechnically, the vesting has not yet started - all of the vesting will occur in a single block in\nthe future).'),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Navigate to the\n",(0,r.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.polkadot.io#/chainstate"},"Chain State")," page on\nPolkadot-JS."),(0,r.kt)("li",{parentName:"ol"},"Query chain state for ",(0,r.kt)("inlineCode",{parentName:"li"},"vesting.vesting(ACCOUNT_ID)")),(0,r.kt)("li",{parentName:"ol"},"Note the ",(0,r.kt)("inlineCode",{parentName:"li"},"startingBlock")," where the unlock starts, and how much DOT is unlocked per block\n(",(0,r.kt)("inlineCode",{parentName:"li"},"perBlock"),")."),(0,r.kt)("li",{parentName:"ol"},'You will have to calculate the result into \u201chuman time". To do this, remember that there are\napproximately 14\u2019400 blocks per day, and you can see what the latest block is shown on the\n',(0,r.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.polkadot.io#/explorer"},"Explorer")," page.")),(0,r.kt)("h3",{id:"batch-transfers-with-the-polkadot-js-ui"},"Batch Transfers with the Polkadot-JS UI"),(0,r.kt)("p",null,"Batch transfers are balances transfers to multiple accounts executed by one account. In order to\nconstruct a batch transfer you need to:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Create a ",(0,r.kt)("inlineCode",{parentName:"li"},"utility.batch(calls)")," extrinsic using the\n",(0,r.kt)("a",{parentName:"li",href:"https://paritytech.github.io/substrate/master/pallet_utility/index.html"},"utility pallet"),", and"),(0,r.kt)("li",{parentName:"ul"},"Within the batch call you can create multiple ",(0,r.kt)("inlineCode",{parentName:"li"},"balances.transferKeepAlive")," extrinsics using the\n",(0,r.kt)("a",{parentName:"li",href:"https://paritytech.github.io/substrate/master/pallet_balances/index.html"},"balances pallet"),". You\ncan specify as many receivers as you desire.")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"You can watch ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/uoUC2K8muvw"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," to learn how to do batch\ntransfers. Note the tutorial uses the Westend Testnet, but the same applies to both Polkadot and\nKusama.")),(0,r.kt)("h3",{id:"teleporting-tokens-using-the-polkadot-js-ui"},"Teleporting Tokens using the Polkadot-JS UI"),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/3tE9ouub5Tg"},"this video tutorial")," and\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181119-how-to-teleport-dot-or-ksm-between-statemint-or-statemine"},"this additional support article"),"\nto learn more about how to teleport tokens."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},'If you do not see "Accounts > Teleport" in the Polkadot-JS UI, the source chain that you have\nselected does not support teleportation yet.')),(0,r.kt)("h2",{id:"calculating-fees-with-polkadot-js"},"Calculating Fees with Polkadot-JS"),(0,r.kt)("p",null,"One useful utility for estimating transaction fees programmatically is the via the\n",(0,r.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/@polkadot/api"},"@polkadot/api"),". Check out the following script that\nlogs some relevant fee information:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js"},"// Estimate the fees as RuntimeDispatchInfo using the signer\nconst info = await api.tx.balances.transfer(recipient, 123).paymentInfo(sender);\n\n// Log relevant info, partialFee is Balance, estimated for current\nconsole.log(`\n class=${info.class.toString()},\n weight=${info.weight.toString()},\n partialFee=${info.partialFee.toHuman()}\n`);\n")),(0,r.kt)("p",null,"For additional information on interacting with the API, checkout\n",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs"},"Polkadot-JS"),"."),(0,r.kt)("h2",{id:"existing-reference-error"},"Existing Reference Error"),(0,r.kt)("p",null,"If you are trying to reap an account and you receive an error similar to\n",(0,r.kt)("inlineCode",{parentName:"p"},'"There is an existing reference count on the sender account. As such the account cannot be reaped from the state"'),",\nthen you have existing references to this account that must be first removed before it can be\nreaped. References may still exist from:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Bonded tokens (most likely)"),(0,r.kt)("li",{parentName:"ul"},"Unpurged session keys (if you were previously a validator)"),(0,r.kt)("li",{parentName:"ul"},"Token locks"),(0,r.kt)("li",{parentName:"ul"},"Existing recovery info"),(0,r.kt)("li",{parentName:"ul"},"Existing assets")),(0,r.kt)("h3",{id:"bonded-tokens"},"Bonded Tokens"),(0,r.kt)("p",null,"If you have tokens that are bonded, you will need to unbond them before you can reap your account.\nFollow the instructions at ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-guides-nominator#bond-your-tokens"},"Unbonding and Rebonding"),"\nto check if you have bonded tokens, stop nominating (if necessary) and unbond your tokens."),(0,r.kt)("h3",{id:"checking-for-locks"},"Checking for Locks"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/LHgY7ds_bZ0"},"this video tutorial")," and\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169437-why-can-t-i-transfer-tokens-"},"this support page"),"\nto learn how to check for locks and remove them.")),(0,r.kt)("p",null,"You can also check for locks by querying ",(0,r.kt)("inlineCode",{parentName:"p"},"system.account(AccountId)")," in\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/chainstate"},(0,r.kt)("inlineCode",{parentName:"a"},"Chain state")," tab under the ",(0,r.kt)("inlineCode",{parentName:"a"},"Developer")," drop-down menu in the Polkadot-JS UI"),'.\nSelect your account, then click the "+" button next to the dropdowns, and check the relative ',(0,r.kt)("inlineCode",{parentName:"p"},"data"),"\nJSON object. If you see a non-zero value for anything other than ",(0,r.kt)("inlineCode",{parentName:"p"},"free"),", you have locks on your\naccount that need to get resolved."),(0,r.kt)("h3",{id:"purging-session-keys"},"Purging Session Keys"),(0,r.kt)("p",null,"If you used this account to set up a validator and you did not purge your keys before unbonding your\ntokens, you need to purge your keys. You can do this by seeing the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-stop-validating"},"How to Stop Validating")," page. This can also\nbe checked by checking ",(0,r.kt)("inlineCode",{parentName:"p"},"session.nextKeys")," in the chain state for an existing key."),(0,r.kt)("h3",{id:"existing-recovery-info"},"Existing Recovery Info"),(0,r.kt)("p",null,"Currently, Polkadot does not use the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/blob/master/frame/recovery/"},"Recovery Pallet"),", so this is\nprobably not the reason for your tokens having existing references."),(0,r.kt)("p",null,"","","",""),(0,r.kt)("h3",{id:"existing-non-native-assets"},"Existing Non-Native Assets"),(0,r.kt)("p",null,"Currently, Polkadot does not use the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/tree/master/frame/assets"},"Assets Pallet"),", so this is\nprobably not the reason for your tokens having existing references."))}f.isMDXComponent=!0},27152:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/unlock-vesting-deefc0d6d9a08a91af1490a82e01069b.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/84ede15a.76e8fbbc.js b/assets/js/84ede15a.76e8fbbc.js deleted file mode 100644 index 54e9d86b8007..000000000000 --- a/assets/js/84ede15a.76e8fbbc.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[4338],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>p});var n=a(74165),o=a(15861),r=a(67294),i=a(87152),s=a(14741),l=a(67425);function u(e,t,a){return c.apply(this,arguments)}function c(){return(c=(0,o.Z)((0,n.Z)().mark((function e(t,a,o){var r,l,u,c,d;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return r="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return r="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return r="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return r="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==r){e.next=18;break}return e.abrupt("return");case 18:return u=new i.U(r),e.next=21,s.G.create({provider:u});case 21:c=e.sent,(d=a.split(".")).forEach((function(e){e in c&&(c=c[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=c.toString(),e.abrupt("break",35);case 29:return e.next=31,c();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,a,n){switch(t){case"humanReadable":(0,l.HumanReadable)(e,a,n);break;case"precise":(0,l.Precise)(e,a,n);break;case"blocksToDays":(0,l.BlocksToDays)(e,n);break;case"erasToDays":(0,l.ErasToDays)(e,n,a);break;case"percentage":(0,l.Percentage)(e,n);break;case"permillToPercent":(0,l.PermillToPercent)(e,n);break;case"arrayLength":(0,l.ArrayLength)(e,n);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(e){var t=e.network,a=e.path,i=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,c=(0,r.useState)(""),p=c[0],h=c[1];return t=t.toLowerCase(),(0,r.useEffect)((function(){void 0!==l?d(i.toString(),l,t,h):h(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var r=function(){var e=(0,o.Z)((0,n.Z)().mark((function e(){var o;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,u(t,a,h);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(o,l,t,h):h(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{r()}catch(s){console.log(s)}}}),[]),p}},67425:e=>{var t="polkadot",a="kusama",n="statemine",o="statemint",r={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,s){var l=void 0;if(i===t||i===o)l=3;else{if(i!==a&&i!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),s((e=Number.isInteger(e/r[i].precision)?e/r[i].precision+" "+r[i].symbol:(e/r[i].precision).toFixed(l)+" "+r[i].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/r[t].precision+" "+r[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,r,i){var s=void 0;if(i===t||i===o)s=1;else{if(i!==a&&i!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}r((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},52991:(e,t,a)=>{"use strict";a.d(t,{Z:()=>m});var n=a(67294),o=a(86010),r=a(53438),i=a(39960),s=a(13919),l=a(95999);const u={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function c(e){var t=e.href,a=e.children;return n.createElement(i.Z,{href:t,className:(0,o.Z)("card padding--lg",u.cardContainer)},a)}function d(e){var t=e.href,a=e.icon,r=e.title,i=e.description;return n.createElement(c,{href:t},n.createElement("h2",{className:(0,o.Z)("text--truncate",u.cardTitle),title:r},a," ",r),i&&n.createElement("p",{className:(0,o.Z)("text--truncate",u.cardDescription),title:i},i))}function p(e){var t,a=e.item,o=(0,r.Wl)(a);return o?n.createElement(d,{href:o,icon:"\ud83d\uddc3\ufe0f",title:a.label,description:null!=(t=a.description)?t:(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:a.items.length})}):null}function h(e){var t,a,o=e.item,i=(0,s.Z)(o.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,r.xz)(null!=(t=o.docId)?t:void 0);return n.createElement(d,{href:o.href,icon:i,title:o.label,description:null!=(a=o.description)?a:null==l?void 0:l.description})}function k(e){var t=e.item;switch(t.type){case"link":return n.createElement(h,{item:t});case"category":return n.createElement(p,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}function f(e){var t=e.className,a=(0,r.jA)();return n.createElement(m,{items:a.items,className:t})}function m(e){var t=e.items,a=e.className;if(!t)return n.createElement(f,e);var i=(0,r.MN)(t);return n.createElement("section",{className:(0,o.Z)("row",a)},i.map((function(e,t){return n.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},n.createElement(k,{item:e}))})))}},85162:(e,t,a)=>{"use strict";a.d(t,{Z:()=>i});var n=a(67294),o=a(86010);const r={tabItem:"tabItem_Ymn6"};function i(e){var t=e.children,a=e.hidden,i=e.className;return n.createElement("div",{role:"tabpanel",className:(0,o.Z)(r.tabItem,i),hidden:a},t)}},74866:(e,t,a)=>{"use strict";a.d(t,{Z:()=>y});var n=a(87462),o=a(67294),r=a(86010),i=a(12466),s=a(16550),l=a(91980),u=a(67392),c=a(50012);function d(e){return function(e){var t,a;return null!=(t=null==(a=o.Children.map(e,(function(e){if(!e||(0,o.isValidElement)(e)&&(t=e.props)&&"object"==typeof t&&"value"in t)return e;var t;throw new Error("Docusaurus error: Bad child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:a.filter(Boolean))?t:[]}(e).map((function(e){var t=e.props;return{value:t.value,label:t.label,attributes:t.attributes,default:t.default}}))}function p(e){var t=e.values,a=e.children;return(0,o.useMemo)((function(){var e=null!=t?t:d(a);return function(e){var t=(0,u.l)(e,(function(e,t){return e.value===t.value}));if(t.length>0)throw new Error('Docusaurus error: Duplicate values "'+t.map((function(e){return e.value})).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[t,a])}function h(e){var t=e.value;return e.tabValues.some((function(e){return e.value===t}))}function k(e){var t=e.queryString,a=void 0!==t&&t,n=e.groupId,r=(0,s.k6)(),i=function(e){var t=e.queryString,a=void 0!==t&&t,n=e.groupId;if("string"==typeof a)return a;if(!1===a)return null;if(!0===a&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:a,groupId:n});return[(0,l._X)(i),(0,o.useCallback)((function(e){if(i){var t=new URLSearchParams(r.location.search);t.set(i,e),r.replace(Object.assign({},r.location,{search:t.toString()}))}}),[i,r])]}function f(e){var t,a,n,r,i=e.defaultValue,s=e.queryString,l=void 0!==s&&s,u=e.groupId,d=p(e),f=(0,o.useState)((function(){return function(e){var t,a=e.defaultValue,n=e.tabValues;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(a){if(!h({value:a,tabValues:n}))throw new Error('Docusaurus error: The has a defaultValue "'+a+'" but none of its children has the corresponding value. Available values are: '+n.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return a}var o=null!=(t=n.find((function(e){return e.default})))?t:n[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:i,tabValues:d})})),m=f[0],g=f[1],v=k({queryString:l,groupId:u}),b=v[0],w=v[1],y=(t=function(e){return e?"docusaurus.tab."+e:null}({groupId:u}.groupId),a=(0,c.Nk)(t),n=a[0],r=a[1],[n,(0,o.useCallback)((function(e){t&&r.set(e)}),[t,r])]),N=y[0],x=y[1],T=function(){var e=null!=b?b:N;return h({value:e,tabValues:d})?e:null}();return(0,o.useLayoutEffect)((function(){T&&g(T)}),[T]),{selectedValue:m,selectValue:(0,o.useCallback)((function(e){if(!h({value:e,tabValues:d}))throw new Error("Can't select invalid tab value="+e);g(e),w(e),x(e)}),[w,x,d]),tabValues:d}}var m=a(72389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function v(e){var t=e.className,a=e.block,s=e.selectedValue,l=e.selectValue,u=e.tabValues,c=[],d=(0,i.o5)().blockElementScrollPositionUntilNextRender,p=function(e){var t=e.currentTarget,a=c.indexOf(t),n=u[a].value;n!==s&&(d(t),l(n))},h=function(e){var t,a=null;switch(e.key){case"Enter":p(e);break;case"ArrowRight":var n,o=c.indexOf(e.currentTarget)+1;a=null!=(n=c[o])?n:c[0];break;case"ArrowLeft":var r,i=c.indexOf(e.currentTarget)-1;a=null!=(r=c[i])?r:c[c.length-1]}null==(t=a)||t.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t)},u.map((function(e){var t=e.value,a=e.label,i=e.attributes;return o.createElement("li",(0,n.Z)({role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,key:t,ref:function(e){return c.push(e)},onKeyDown:h,onClick:p},i,{className:(0,r.Z)("tabs__item",g.tabItem,null==i?void 0:i.className,{"tabs__item--active":s===t})}),null!=a?a:t)})))}function b(e){var t=e.lazy,a=e.children,n=e.selectedValue,r=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){var i=r.find((function(e){return e.props.value===n}));return i?(0,o.cloneElement)(i,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map((function(e,t){return(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})})))}function w(e){var t=f(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",g.tabList)},o.createElement(v,(0,n.Z)({},e,t)),o.createElement(b,(0,n.Z)({},e,t)))}function y(e){var t=(0,m.Z)();return o.createElement(w,(0,n.Z)({key:String(t)},e))}},6555:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>u,default:()=>f,frontMatter:()=>l,metadata:()=>c,toc:()=>p});var n=a(87462),o=a(63366),r=(a(67294),a(3905)),i=a(47940),s=(a(74866),a(85162),a(52991),["components"]),l={id:"learn-guides-transfers",title:"Polkadot-JS Guides about Transfers",sidebar_label:"Transfer Guides",description:"Polkadot-JS Guides about Balances Transfers.",keywords:["gides","advanced","polkadot-js","transfers"],slug:"../learn-guides-transfers"},u=void 0,c={unversionedId:"learn/learn-guides-transfers",id:"learn/learn-guides-transfers",title:"Polkadot-JS Guides about Transfers",description:"Polkadot-JS Guides about Balances Transfers.",source:"@site/../docs/learn/learn-guides-transfers.md",sourceDirName:"learn",slug:"/learn-guides-transfers",permalink:"/docs/learn-guides-transfers",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-transfers.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710760005,formattedLastUpdatedAt:"Mar 18, 2024",frontMatter:{id:"learn-guides-transfers",title:"Polkadot-JS Guides about Transfers",sidebar_label:"Transfer Guides",description:"Polkadot-JS Guides about Balances Transfers.",keywords:["gides","advanced","polkadot-js","transfers"],slug:"../learn-guides-transfers"},sidebar:"docs",previous:{title:"Pure Proxy Guides",permalink:"/docs/learn-guides-accounts-proxy-pure"},next:{title:"Staking Guides",permalink:"/docs/learn-guides-staking-index"}},d={},p=[{value:"Metadata Updates with the Polkadot-JS Browser Extension",id:"metadata-updates-with-the-polkadot-js-browser-extension",level:2},{value:"Transfers using the Polkadot-JS UI and Browser Extension",id:"transfers-using-the-polkadot-js-ui-and-browser-extension",level:2},{value:"Verify Extrinsics with the Polkadot-JS Browser Extension",id:"verify-extrinsics-with-the-polkadot-js-browser-extension",level:3},{value:"Verify Extrinsics with the Polkadot-JS UI",id:"verify-extrinsics-with-the-polkadot-js-ui",level:3},{value:"Keep-Alive Checks with the Polkadot-JS UI",id:"keep-alive-checks-with-the-polkadot-js-ui",level:3},{value:"Vested Transfers with the Polkadot-JS UI",id:"vested-transfers-with-the-polkadot-js-ui",level:3},{value:"Lazy Vesting",id:"lazy-vesting",level:4},{value:"Calculating When Vesting DOT Will Be Available",id:"calculating-when-vesting-dot-will-be-available",level:4},{value:"Batch Transfers with the Polkadot-JS UI",id:"batch-transfers-with-the-polkadot-js-ui",level:3},{value:"Teleporting Tokens using the Polkadot-JS UI",id:"teleporting-tokens-using-the-polkadot-js-ui",level:3},{value:"Calculating Fees with Polkadot-JS",id:"calculating-fees-with-polkadot-js",level:2},{value:"Existing Reference Error",id:"existing-reference-error",level:2},{value:"Bonded Tokens",id:"bonded-tokens",level:3},{value:"Checking for Locks",id:"checking-for-locks",level:3},{value:"Purging Session Keys",id:"purging-session-keys",level:3},{value:"Existing Recovery Info",id:"existing-recovery-info",level:3},{value:"Existing Non-Native Assets",id:"existing-non-native-assets",level:3}],h={toc:p},k="wrapper";function f(e){var t=e.components,l=(0,o.Z)(e,s);return(0,r.kt)(k,(0,n.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"metadata-updates-with-the-polkadot-js-browser-extension"},"Metadata Updates with the Polkadot-JS Browser Extension"),(0,r.kt)("p",null,"Before signing extrinsics with the Polkadot-JS Browser Extension, always check for metadata updates.\n",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/gbvrHzr4EDY?t=84"},(0,r.kt)("strong",{parentName:"a"},"This video tutorial"))," will explain how to do it."),(0,r.kt)("admonition",{title:"Polkadot Vault vs Polkadot-JS Browser Extension",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The Polkadot Vault app updates the full metadata through the QR fountain while the extension updates\nthe metadata index (the metadata is not loaded into it). As a consequence the process of updating\nmetadata is different in this two cases (you will notice that on the Vault app the update takes\nlonger for example). Having outdated metadata on the Vault app will prevent you from signing, while\non the extension you will be able to click the sign button but the extrinsic will likely fail\n(similarly of having an outdated Ledger app). In general, failing to update metadata will most\nlikely result in you not being able to sign extrinsics.")),(0,r.kt)("h2",{id:"transfers-using-the-polkadot-js-ui-and-browser-extension"},"Transfers using the Polkadot-JS UI and Browser Extension"),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=gbvrHzr4EDY"},"this video tutorial")," to learn how to send funds\nusing the Polkadot-JS UI and Browser Extension. See also the Polkadot Support pages for detailed\ninformation about signing transactions using\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181993-how-to-sign-a-transaction-directly-on-polkadot-js-ui"},"the Polkadot-JS UI"),"\nand\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181989"},"the Polkadot-JS browser extension"),"."),(0,r.kt)("h3",{id:"verify-extrinsics-with-the-polkadot-js-browser-extension"},"Verify Extrinsics with the Polkadot-JS Browser Extension"),(0,r.kt)("p",null,"Visit the\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000179161-how-can-i-verify-what-extrinsic-i-m-signing-#Verify-an-extrinsic-in-the-Polkadot-extension"},(0,r.kt)("strong",{parentName:"a"},"dedicated support page")),"\nand see ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/bxMs-9fBtFk?t=261"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," tutorial to learn about how to\nverify extrinsics before signing them. The video will also mention potential attacks that can happen\nto you while signing for transactions."),(0,r.kt)("h3",{id:"verify-extrinsics-with-the-polkadot-js-ui"},"Verify Extrinsics with the Polkadot-JS UI"),(0,r.kt)("p",null,"Visit the\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000179161-how-can-i-verify-what-extrinsic-i-m-signing-#Verify-an-extrinsic-in-the-Polkadot-JS-UI"},(0,r.kt)("strong",{parentName:"a"},"dedicated support page")),"\nand see ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/bxMs-9fBtFk?t=163"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," tutorial to learn about how to\nverify extrinsics before signing them. The video will also mention potential attacks that can happen\nto you while signing for transactions."),(0,r.kt)("h3",{id:"keep-alive-checks-with-the-polkadot-js-ui"},"Keep-Alive Checks with the Polkadot-JS UI"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/mgPHVztHJWk"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000168651-what-is-the-existential-deposit-"},(0,r.kt)("strong",{parentName:"a"},"this support page")),"\nto learn about keep-alive checks and existential deposit.")),(0,r.kt)("p",null,"In Polkadot there are two main ways to\ntransfer funds from one account to another:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"transfer keep-alive")," (default option) will not allow you to send an amount that would allow the\nsending account to be removed due to it going below the\n",(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000168651-what-is-the-existential-deposit-"},"existential deposit"),"\nof\n",(0,r.kt)(i.Z,{network:"polkadot",path:"consts.balances.existentialDeposit",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),".\n",""),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"transfer allow-death")," will allow you to send\nDOT regardless of the consequence. If the\nbalance drops below the existential deposit your account will be reaped. It may be that you do not\nwant to keep the account alive (for example, because you are moving all of your funds to a\ndifferent address). To switch the keep-alive check off visit\n",(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000169248"},"this support article"),".")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Attempting to send less than the existential deposit to an account with\n0 DOT will always fail, no matter if the\nkeep-alive check is on or not. For instance, attempting to transfer\n0.1 DOT to an account you just generated\n(and thus has no balance) will fail, since\n0.1 DOT is less than the existential\ndeposit of\n",(0,r.kt)(i.Z,{network:"polkadot",path:"consts.balances.existentialDeposit",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),"\n","\nand the account cannot be initialized with such a low balance."),(0,r.kt)("p",{parentName:"admonition"},"Even if the transfer fails due to a keep-alive check, the transaction fee will be deducted from the\nsending account if you attempt to transfer.")),(0,r.kt)("h3",{id:"vested-transfers-with-the-polkadot-js-ui"},"Vested Transfers with the Polkadot-JS UI"),(0,r.kt)("p",null,"You can watch ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/JVlwTQBwNGc"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," to understand how to do vested\ntransfers using the Polkadot-JS UI, including linear and cliff vesting. Note the tutorial uses the\nWestend Testnet, but the same applies to\nPolkadot."),(0,r.kt)("p",null,"There are two ways that vesting schedules can be created."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"One way is through an extrinsic type available in the Vesting pallet, ",(0,r.kt)("inlineCode",{parentName:"li"},"vested_transfer"),". The\nvested transfer function allows anyone to create a vesting schedule with a transfer of funds, as\nlong as the account for which the vesting schedule will be created does not already have one and\nthe transfer moves at least ",(0,r.kt)("inlineCode",{parentName:"li"},"MinVestedTransfer")," funds, which is specified as a chain constant."),(0,r.kt)("li",{parentName:"ul"},"A second way is as part of the genesis configuration of the chain. In the case of\nPolkadot, the chain specification genesis\nscript reads the state of the Claims contract that exists on the Ethereum blockchain and creates\nvesting schedules in genesis for all the allocations registered as being vested.")),(0,r.kt)("p",null,"Vesting schedules have three parameters:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"locked"),", the amount of tokens to be transferred in\n",(0,r.kt)("a",{parentName:"li",href:"../learn/learn-DOT#the-planck-unit"},"Planck units"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"per block"),", the number of tokens that are released per block"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"starting block"),", the block number after which the vesting schedule starts")),(0,r.kt)("p",null,"The configuration of these three fields dictates the amount of funds that are originally locked, the\nslope of the unlock line and the block number for when the unlocking begins."),(0,r.kt)("h4",{id:"lazy-vesting"},"Lazy Vesting"),(0,r.kt)("p",null,"Like ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced"},"simple payouts"),", vesting is ",(0,r.kt)("em",{parentName:"p"},"lazy"),", which means that someone must\nexplicitly call an extrinsic to update the lock that is placed on an account."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("inlineCode",{parentName:"li"},"vest")," extrinsic will update the lock that is placed on the caller."),(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("inlineCode",{parentName:"li"},"vest_other"),' will update the lock that is placed on another "target" account\'s funds.')),(0,r.kt)("p",null,"These extrinsics are exposed from the Vesting pallet."),(0,r.kt)("p",null,"If you are using the Polkadot-JS UI, when there are\nDOT available to vest for an account, then you\nwill have the ability to unlock DOT which has\nalready vested from the ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Accounts")," page."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"unbond",src:a(27152).Z,width:"241",height:"301"})),(0,r.kt)("h4",{id:"calculating-when-vesting-dot-will-be-available"},"Calculating When Vesting DOT Will Be Available"),(0,r.kt)("p",null,"Generally, you should be able to see from the ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Accounts"),' by\nlooking at your accounts and seeing when the vesting will finish. However, some DOT vest with\n"cliffs" - a single block where all the DOT are released, instead of vesting over time. In this\ncase, you will have to query the chain state directly to see when they will be available (since\ntechnically, the vesting has not yet started - all of the vesting will occur in a single block in\nthe future).'),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Navigate to the\n",(0,r.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.polkadot.io#/chainstate"},"Chain State")," page on\nPolkadot-JS."),(0,r.kt)("li",{parentName:"ol"},"Query chain state for ",(0,r.kt)("inlineCode",{parentName:"li"},"vesting.vesting(ACCOUNT_ID)")),(0,r.kt)("li",{parentName:"ol"},"Note the ",(0,r.kt)("inlineCode",{parentName:"li"},"startingBlock")," where the unlock starts, and how much DOT is unlocked per block\n(",(0,r.kt)("inlineCode",{parentName:"li"},"perBlock"),")."),(0,r.kt)("li",{parentName:"ol"},'You will have to calculate the result into \u201chuman time". To do this, remember that there are\napproximately 14\u2019400 blocks per day, and you can see what the latest block is shown on the\n',(0,r.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.polkadot.io#/explorer"},"Explorer")," page.")),(0,r.kt)("h3",{id:"batch-transfers-with-the-polkadot-js-ui"},"Batch Transfers with the Polkadot-JS UI"),(0,r.kt)("p",null,"Batch transfers are balances transfers to multiple accounts executed by one account. In order to\nconstruct a batch transfer you need to:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Create a ",(0,r.kt)("inlineCode",{parentName:"li"},"utility.batch(calls)")," extrinsic using the\n",(0,r.kt)("a",{parentName:"li",href:"https://paritytech.github.io/substrate/master/pallet_utility/index.html"},"utility pallet"),", and"),(0,r.kt)("li",{parentName:"ul"},"Within the batch call you can create multiple ",(0,r.kt)("inlineCode",{parentName:"li"},"balances.transferKeepAlive")," extrinsics using the\n",(0,r.kt)("a",{parentName:"li",href:"https://paritytech.github.io/substrate/master/pallet_balances/index.html"},"balances pallet"),". You\ncan specify as many receivers as you desire.")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"You can watch ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/uoUC2K8muvw"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," to learn how to do batch\ntransfers. Note the tutorial uses the Westend Testnet, but the same applies to both Polkadot and\nKusama.")),(0,r.kt)("h3",{id:"teleporting-tokens-using-the-polkadot-js-ui"},"Teleporting Tokens using the Polkadot-JS UI"),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/3tE9ouub5Tg"},"this video tutorial")," and\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181119-how-to-teleport-dot-or-ksm-between-statemint-or-statemine"},"this additional support article"),"\nto learn more about how to teleport tokens."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},'If you do not see "Accounts > Teleport" in the Polkadot-JS UI, the source chain that you have\nselected does not support teleportation yet.')),(0,r.kt)("h2",{id:"calculating-fees-with-polkadot-js"},"Calculating Fees with Polkadot-JS"),(0,r.kt)("p",null,"One useful utility for estimating transaction fees programmatically is the via the\n",(0,r.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/@polkadot/api"},"@polkadot/api"),". Check out the following script that\nlogs some relevant fee information:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js"},"// Estimate the fees as RuntimeDispatchInfo using the signer\nconst info = await api.tx.balances.transfer(recipient, 123).paymentInfo(sender);\n\n// Log relevant info, partialFee is Balance, estimated for current\nconsole.log(`\n class=${info.class.toString()},\n weight=${info.weight.toString()},\n partialFee=${info.partialFee.toHuman()}\n`);\n")),(0,r.kt)("p",null,"For additional information on interacting with the API, checkout\n",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs"},"Polkadot-JS"),"."),(0,r.kt)("h2",{id:"existing-reference-error"},"Existing Reference Error"),(0,r.kt)("p",null,"If you are trying to reap an account and you receive an error similar to\n",(0,r.kt)("inlineCode",{parentName:"p"},'"There is an existing reference count on the sender account. As such the account cannot be reaped from the state"'),",\nthen you have existing references to this account that must be first removed before it can be\nreaped. References may still exist from:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Bonded tokens (most likely)"),(0,r.kt)("li",{parentName:"ul"},"Unpurged session keys (if you were previously a validator)"),(0,r.kt)("li",{parentName:"ul"},"Token locks"),(0,r.kt)("li",{parentName:"ul"},"Existing recovery info"),(0,r.kt)("li",{parentName:"ul"},"Existing assets")),(0,r.kt)("h3",{id:"bonded-tokens"},"Bonded Tokens"),(0,r.kt)("p",null,"If you have tokens that are bonded, you will need to unbond them before you can reap your account.\nFollow the instructions at ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-guides-staking#bond-your-tokens"},"Unbonding and Rebonding")," to\ncheck if you have bonded tokens, stop nominating (if necessary) and unbond your tokens."),(0,r.kt)("h3",{id:"checking-for-locks"},"Checking for Locks"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/LHgY7ds_bZ0"},"this video tutorial")," and\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169437-why-can-t-i-transfer-tokens-"},"this support page"),"\nto learn how to check for locks and remove them.")),(0,r.kt)("p",null,"You can also check for locks by querying ",(0,r.kt)("inlineCode",{parentName:"p"},"system.account(AccountId)")," in\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/chainstate"},(0,r.kt)("inlineCode",{parentName:"a"},"Chain state")," tab under the ",(0,r.kt)("inlineCode",{parentName:"a"},"Developer")," drop-down menu in the Polkadot-JS UI"),'.\nSelect your account, then click the "+" button next to the dropdowns, and check the relative ',(0,r.kt)("inlineCode",{parentName:"p"},"data"),"\nJSON object. If you see a non-zero value for anything other than ",(0,r.kt)("inlineCode",{parentName:"p"},"free"),", you have locks on your\naccount that need to get resolved."),(0,r.kt)("h3",{id:"purging-session-keys"},"Purging Session Keys"),(0,r.kt)("p",null,"If you used this account to set up a validator and you did not purge your keys before unbonding your\ntokens, you need to purge your keys. You can do this by seeing the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-stop-validating"},"How to Stop Validating")," page. This can also\nbe checked by checking ",(0,r.kt)("inlineCode",{parentName:"p"},"session.nextKeys")," in the chain state for an existing key."),(0,r.kt)("h3",{id:"existing-recovery-info"},"Existing Recovery Info"),(0,r.kt)("p",null,"Currently, Polkadot does not use the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/blob/master/frame/recovery/"},"Recovery Pallet"),", so this is\nprobably not the reason for your tokens having existing references."),(0,r.kt)("p",null,"","","",""),(0,r.kt)("h3",{id:"existing-non-native-assets"},"Existing Non-Native Assets"),(0,r.kt)("p",null,"Currently, Polkadot does not use the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/tree/master/frame/assets"},"Assets Pallet"),", so this is\nprobably not the reason for your tokens having existing references."))}f.isMDXComponent=!0},27152:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/unlock-vesting-deefc0d6d9a08a91af1490a82e01069b.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/89a76fd2.0e17b6e0.js b/assets/js/89a76fd2.0e17b6e0.js new file mode 100644 index 000000000000..564b36e54d9e --- /dev/null +++ b/assets/js/89a76fd2.0e17b6e0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9771],{3905:(e,t,n)=>{n.d(t,{Zo:()=>h,kt:()=>p});var o=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function r(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=o.createContext({}),d=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},h=function(e){var t=d(e.components);return o.createElement(s.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,h=l(e,["components","mdxType","originalType","parentName"]),c=d(n),m=a,p=c["".concat(s,".").concat(m)]||c[m]||u[m]||i;return n?o.createElement(p,r(r({ref:t},h),{},{components:n})):o.createElement(p,r({ref:t},h))}));function p(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,r=new Array(i);r[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:a,r[1]=l;for(var d=2;d{n.r(t),n.d(t,{assets:()=>h,contentTitle:()=>s,default:()=>p,frontMatter:()=>l,metadata:()=>d,toc:()=>c});var o=n(87462),a=n(63366),i=(n(67294),n(3905)),r=["components"],l={id:"learn-redenomination",title:"Redenomination of DOT",sidebar_label:"Redenomination of DOT",description:"Everything about the DOT Token Redenomination.",keywords:["DOT","redenomination"],slug:"../learn-redenomination"},s=void 0,d={unversionedId:"learn/archive/learn-redenomination",id:"learn/archive/learn-redenomination",title:"Redenomination of DOT",description:"Everything about the DOT Token Redenomination.",source:"@site/../docs/learn/archive/learn-redenomination.md",sourceDirName:"learn/archive",slug:"/learn/learn-redenomination",permalink:"/docs/learn/learn-redenomination",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/archive/learn-redenomination.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-redenomination",title:"Redenomination of DOT",sidebar_label:"Redenomination of DOT",description:"Everything about the DOT Token Redenomination.",keywords:["DOT","redenomination"],slug:"../learn-redenomination"},sidebar:"docs",previous:{title:"Polkadot Launch Phases",permalink:"/docs/learn/learn-launch"},next:{title:"Controller Accounts",permalink:"/docs/learn/learn-controller"}},h={},c=[{value:"Origins",id:"origins",level:2},{value:"The Vote",id:"the-vote",level:2},{value:"The Outcome",id:"the-outcome",level:2},{value:"What This Means for the Community",id:"what-this-means-for-the-community",level:3},{value:"What This Means for Builders of Tools",id:"what-this-means-for-builders-of-tools",level:3}],u={toc:c},m="wrapper";function p(e){var t=e.components,l=(0,a.Z)(e,r);return(0,i.kt)(m,(0,o.Z)({},u,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("div",{className:"sticky",style:{zIndex:1}},(0,i.kt)("br",null),(0,i.kt)("p",null,"The content on this page is archived.")),(0,i.kt)("p",null,"On August 21, 2020, the redenomination of DOT, the native token on Polkadot, occurred. From this\ndate, one DOT (old) equals 100 new DOT."),(0,i.kt)("admonition",{title:"Denomination Day",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The DOT redenomination took place on 21 August 2020, known as Denomination Day, at block number\n1_248_328.")),(0,i.kt)("p",null,"While ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-DOT"},"DOT"),' is the unit of currency on Polkadot that most people use when\ninteracting with the system, the smallest unit of account is the Planck. A Planck\'s relation to DOT\nis like the relation of a Satoshi to Bitcoin. Before 21 August, the DOT was denominated as 1e12\nPlancks, that is, twelve decimal places. After Denomination Day, DOT is denominated as 1e10 Plancks,\nas in, ten decimal places. DOT denominated to twelve decimal places is referred to as "DOT (old)"\nand DOT denominated to ten decimal places is generally referred to as "DOT". When the difference\nmust be made explicit, the current ten-decimal-denominated DOT is referred to as "',(0,i.kt)("em",{parentName:"p"},"New DOT"),'".'),(0,i.kt)("admonition",{title:"Redenomination Explainer",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Check out our\n",(0,i.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=xXIcnBV4uUE&list=PLOyWqupZ-WGuAuS00rK-pebTMAOxW41W8&index=22&ab_channel=Polkadot"},"technical explainer video that explains more of Redenomination"),".")),(0,i.kt)("p",null,"The change in denomination, henceforth referred to as the ",(0,i.kt)("em",{parentName:"p"},"redenomination"),", was voted on by the\ncommunity of DOT holders. The community decided between four options, to change the DOT denomination\nby a factor of ten, one hundred, one thousand, or not at all. The end result was to change the\ndenomination by a factor of one hundred."),(0,i.kt)("p",null,"The overall effect of this change was that the number of Polkadot's smallest unit, the Planck,\nremained constant, while the DOT balance for all holders was increased by a factor of one hundred.\nAs one can see from the example below, the number of Plancks a user has does not change, only the\nnumber of Plancks that constitute a single DOT. A user with 1_000_000_000_000 Plancks still has the\nsame number of Plancks but will have 100 DOT under the new denomination, as opposed to one DOT under\nthe old denomination."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"}," Before the change the decimal was here\n v\n 1.000000000000 DOT\n\n 100.0000000000 DOT\n ^\n After the change the decimal is here\n")),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"There are no state changes with redenomination. There are no transfers. The real change regards the\nsocial consensus around where to put the decimal place when we talk about what constitutes a DOT.")),(0,i.kt)("h2",{id:"origins"},"Origins"),(0,i.kt)("p",null,"The initial vote for redenomination occurred as a\n",(0,i.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/referendum/52"},"referendum")," on the Kusama blockchain. The referendum\nwas summarized as having four effects if approved by KSM holders."),(0,i.kt)("admonition",{title:"Referendum Summary",type:"info"},(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},"The total allocations of DOT will increase one hundred times from 10 million to 1 billion."),(0,i.kt)("li",{parentName:"ul"},"DOT allocation balances will increase by a factor of one hundred, such that 1 DOT will be 100 DOT."),(0,i.kt)("li",{parentName:"ul"},"The distribution of DOT does not change, and holders of DOT still own an equal share of the\nnetwork as before the change."),(0,i.kt)("li",{parentName:"ul"},"The precision of DOT will change from 12 decimal places to 10 decimal places."),(0,i.kt)("li",{parentName:"ul"},"The main benefit of this change is to avoid using small decimals when dealing with DOT and to\nachieve an easier calculation system."))),(0,i.kt)("p",null,"The initial referendum was proposed before the Polkadot genesis block, assuming that making a\nredenomination would be simpler before the Polkadot chain was live. However, many in the community\npointed out the disconnect between the two networks and how it was unfair for holders of DOT to be\nimpacted by a vote by a different token holder set. For this reason, Web3 Foundation\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/results-of-dot-redenomination-referendum/"},"decided to make a new vote on Polkadot"),"\nwhen it went live, although the Kusama vote ended with a majority in favor of the redenomination\nchange."),(0,i.kt)("p",null,"Web3 Foundation summarized the decision not to change:"),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"However, given the non-negligible amount of opposition, including from some within the ranks of Web3\nFoundation and Parity, ",(0,i.kt)("strong",{parentName:"p"},"the Foundation decided that we cannot, in good faith, sponsor the\nredenomination."))),(0,i.kt)("h2",{id:"the-vote"},"The Vote"),(0,i.kt)("p",null,"After the genesis block of Polkadot was created and the network was running with a decentralized\ncommunity of validators securing the network, Web3 Foundation decided to put the redenomination\ntopic up for a vote again. This time, the vote was explicitly binding ","\u2014"," meaning that it would\nbe executed if voted through. In comparison, the vote on Kusama was non-binding to capture a signal\nwithout a direct way to affect the Polkadot chain."),(0,i.kt)("p",null,"Based on the feedback received during the Kusama referendum, the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/the-first-polkadot-vote/"},"Polkadot vote")," was held as an approval vote,\nwith four available options. DOT holders could issue votes for any configuration of the four\noptions: no change, a change of 10x, a change of 100x, or a change of 1000x. The voting logic was\ncontained in a specially-built Substrate pallet included in Polkadot's runtime for this poll."),(0,i.kt)("admonition",{title:"Summary of the Vote",type:"info"},(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},"Any combination of the four options may have been approved by the voter. There was no need to\nselect only one option."),(0,i.kt)("li",{parentName:"ul"},"Approving all or none of the options was equivalent and did not affect the outcome."),(0,i.kt)("li",{parentName:"ul"},"All voters could alter their votes any number of times before the close of the poll."),(0,i.kt)("li",{parentName:"ul"},"No discretionary lock-voting was in place; all DOT used to vote counts the same."),(0,i.kt)("li",{parentName:"ul"},"Voting was made on a per-account basis; a single account must have voted the same way and could\nnot split its vote."),(0,i.kt)("li",{parentName:"ul"},"This vote did not affect any economics of the Polkadot platform. As in, staking rewards,\ninflation, effective market capitalization, and the underlying balances of every account remained\ncompletely unchanged. It was \u201cmerely\u201d about what units the network uses to denominate the balances\ninto \u201cDOT\u201d."))),(0,i.kt)("p",null,"With a voting period of two weeks set, the redenomination was now in the hands of the Polkadot\ncommunity for a final, binding decision."),(0,i.kt)("h2",{id:"the-outcome"},"The Outcome"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"redenomination",src:n(75421).Z,width:"2000",height:"1000"})),(0,i.kt)("p",null,"After two weeks of voting, the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/the-results-are-in/"},"results")," of the\nredenomination vote were tallied. About one-third of the total DOT in the network participated in\nthe vote. The redenomination proposal passed with 86% of the voters favoring a 100x factor increase\n(or two decimal places of precision loss)."),(0,i.kt)("p",null,"Polkadot's redenomination then took place on 21 August, now known as Denomination Day, at block\n#1_248_328."),(0,i.kt)("h3",{id:"what-this-means-for-the-community"},"What This Means for the Community"),(0,i.kt)("p",null,"If you are a DOT holder or user of the network, then you do not need to take any action. The DOT\nredenomination was a purely front-end change. You still hold the same amount of Plancks after the\nchange, but now it will appear that you hold 100x more DOT. This change applies proportionally to\nevery account."),(0,i.kt)("h3",{id:"what-this-means-for-builders-of-tools"},"What This Means for Builders of Tools"),(0,i.kt)("p",null,"If you are the builder of a tool that consumes the\n",(0,i.kt)("a",{parentName:"p",href:"https://yarnpkg.com/package/@polkadot/api"},(0,i.kt)("inlineCode",{parentName:"a"},"@polkadot/api"))," package ","\u2014"," then there should be no\nreal changes to be made in your application. The denomination is technically a cosmetic change, and\nevery value remains a constant amount of Plancks."),(0,i.kt)("p",null,"However ","\u2014"," if you are a builder of a tool that displays DOT balances to users (e.g. a wallet)\nor handles DOT balances in an off-chain or custodial way, then you will need to ensure that you\ndisplay the correct denomination of DOT to users."),(0,i.kt)("p",null,"Please see our\n",(0,i.kt)("a",{parentName:"p",href:"https://docs.google.com/document/d/1yAzoDh99PgR_7dYAKTWLMVu2Fy5Ga-J6t9lof4f4JUw/edit#"},"Ecosystem Redenomination Guide"),"\nfor recommendations."),(0,i.kt)("p",null,"Please reach out to ",(0,i.kt)("a",{parentName:"p",href:"mailto:support@polkadot.network"},"support@polkadot.network")," if you need any\nassistance in making sure your software is compatible with the redenomination."))}p.isMDXComponent=!0},75421:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/redenomination-49b0f06a8bd85c8944fb35b6fd864759.png"}}]); \ No newline at end of file diff --git a/assets/js/89a76fd2.4b6fb34d.js b/assets/js/89a76fd2.4b6fb34d.js deleted file mode 100644 index b44143888c68..000000000000 --- a/assets/js/89a76fd2.4b6fb34d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9771],{3905:(e,t,n)=>{n.d(t,{Zo:()=>h,kt:()=>p});var o=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function r(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=o.createContext({}),d=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},h=function(e){var t=d(e.components);return o.createElement(s.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,h=l(e,["components","mdxType","originalType","parentName"]),c=d(n),m=a,p=c["".concat(s,".").concat(m)]||c[m]||u[m]||i;return n?o.createElement(p,r(r({ref:t},h),{},{components:n})):o.createElement(p,r({ref:t},h))}));function p(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,r=new Array(i);r[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:a,r[1]=l;for(var d=2;d{n.r(t),n.d(t,{assets:()=>h,contentTitle:()=>s,default:()=>p,frontMatter:()=>l,metadata:()=>d,toc:()=>c});var o=n(87462),a=n(63366),i=(n(67294),n(3905)),r=["components"],l={id:"learn-redenomination",title:"Redenomination of DOT",sidebar_label:"Redenomination of DOT",description:"Everything about the DOT Token Redenomination.",keywords:["DOT","redenomination"],slug:"../learn-redenomination"},s=void 0,d={unversionedId:"learn/archive/learn-redenomination",id:"learn/archive/learn-redenomination",title:"Redenomination of DOT",description:"Everything about the DOT Token Redenomination.",source:"@site/../docs/learn/archive/learn-redenomination.md",sourceDirName:"learn/archive",slug:"/learn/learn-redenomination",permalink:"/docs/learn/learn-redenomination",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/archive/learn-redenomination.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710167319,formattedLastUpdatedAt:"Mar 11, 2024",frontMatter:{id:"learn-redenomination",title:"Redenomination of DOT",sidebar_label:"Redenomination of DOT",description:"Everything about the DOT Token Redenomination.",keywords:["DOT","redenomination"],slug:"../learn-redenomination"},sidebar:"docs",previous:{title:"Polkadot Launch Phases",permalink:"/docs/learn/learn-launch"},next:{title:"Controller Accounts",permalink:"/docs/learn/learn-controller"}},h={},c=[{value:"Origins",id:"origins",level:2},{value:"The Vote",id:"the-vote",level:2},{value:"The Outcome",id:"the-outcome",level:2},{value:"What This Means for the Community",id:"what-this-means-for-the-community",level:3},{value:"What This Means for Builders of Tools",id:"what-this-means-for-builders-of-tools",level:3}],u={toc:c},m="wrapper";function p(e){var t=e.components,l=(0,a.Z)(e,r);return(0,i.kt)(m,(0,o.Z)({},u,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("div",{className:"sticky"},(0,i.kt)("br",null),(0,i.kt)("p",null,"The content on this page is archived.")),(0,i.kt)("p",null,"On August 21, 2020, the redenomination of DOT, the native token on Polkadot, occurred. From this\ndate, one DOT (old) equals 100 new DOT."),(0,i.kt)("admonition",{title:"Denomination Day",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The DOT redenomination took place on 21 August 2020, known as Denomination Day, at block number\n1_248_328.")),(0,i.kt)("p",null,"While ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-DOT"},"DOT"),' is the unit of currency on Polkadot that most people use when\ninteracting with the system, the smallest unit of account is the Planck. A Planck\'s relation to DOT\nis like the relation of a Satoshi to Bitcoin. Before 21 August, the DOT was denominated as 1e12\nPlancks, that is, twelve decimal places. After Denomination Day, DOT is denominated as 1e10 Plancks,\nas in, ten decimal places. DOT denominated to twelve decimal places is referred to as "DOT (old)"\nand DOT denominated to ten decimal places is generally referred to as "DOT". When the difference\nmust be made explicit, the current ten-decimal-denominated DOT is referred to as "',(0,i.kt)("em",{parentName:"p"},"New DOT"),'".'),(0,i.kt)("admonition",{title:"Redenomination Explainer",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Check out our\n",(0,i.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=xXIcnBV4uUE&list=PLOyWqupZ-WGuAuS00rK-pebTMAOxW41W8&index=22&ab_channel=Polkadot"},"technical explainer video that explains more of Redenomination"),".")),(0,i.kt)("p",null,"The change in denomination, henceforth referred to as the ",(0,i.kt)("em",{parentName:"p"},"redenomination"),", was voted on by the\ncommunity of DOT holders. The community decided between four options, to change the DOT denomination\nby a factor of ten, one hundred, one thousand, or not at all. The end result was to change the\ndenomination by a factor of one hundred."),(0,i.kt)("p",null,"The overall effect of this change was that the number of Polkadot's smallest unit, the Planck,\nremained constant, while the DOT balance for all holders was increased by a factor of one hundred.\nAs one can see from the example below, the number of Plancks a user has does not change, only the\nnumber of Plancks that constitute a single DOT. A user with 1_000_000_000_000 Plancks still has the\nsame number of Plancks but will have 100 DOT under the new denomination, as opposed to one DOT under\nthe old denomination."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"}," Before the change the decimal was here\n v\n 1.000000000000 DOT\n\n 100.0000000000 DOT\n ^\n After the change the decimal is here\n")),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"There are no state changes with redenomination. There are no transfers. The real change regards the\nsocial consensus around where to put the decimal place when we talk about what constitutes a DOT.")),(0,i.kt)("h2",{id:"origins"},"Origins"),(0,i.kt)("p",null,"The initial vote for redenomination occurred as a\n",(0,i.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/referendum/52"},"referendum")," on the Kusama blockchain. The referendum\nwas summarized as having four effects if approved by KSM holders."),(0,i.kt)("admonition",{title:"Referendum Summary",type:"info"},(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},"The total allocations of DOT will increase one hundred times from 10 million to 1 billion."),(0,i.kt)("li",{parentName:"ul"},"DOT allocation balances will increase by a factor of one hundred, such that 1 DOT will be 100 DOT."),(0,i.kt)("li",{parentName:"ul"},"The distribution of DOT does not change, and holders of DOT still own an equal share of the\nnetwork as before the change."),(0,i.kt)("li",{parentName:"ul"},"The precision of DOT will change from 12 decimal places to 10 decimal places."),(0,i.kt)("li",{parentName:"ul"},"The main benefit of this change is to avoid using small decimals when dealing with DOT and to\nachieve an easier calculation system."))),(0,i.kt)("p",null,"The initial referendum was proposed before the Polkadot genesis block, assuming that making a\nredenomination would be simpler before the Polkadot chain was live. However, many in the community\npointed out the disconnect between the two networks and how it was unfair for holders of DOT to be\nimpacted by a vote by a different token holder set. For this reason, Web3 Foundation\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/results-of-dot-redenomination-referendum/"},"decided to make a new vote on Polkadot"),"\nwhen it went live, although the Kusama vote ended with a majority in favor of the redenomination\nchange."),(0,i.kt)("p",null,"Web3 Foundation summarized the decision not to change:"),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"However, given the non-negligible amount of opposition, including from some within the ranks of Web3\nFoundation and Parity, ",(0,i.kt)("strong",{parentName:"p"},"the Foundation decided that we cannot, in good faith, sponsor the\nredenomination."))),(0,i.kt)("h2",{id:"the-vote"},"The Vote"),(0,i.kt)("p",null,"After the genesis block of Polkadot was created and the network was running with a decentralized\ncommunity of validators securing the network, Web3 Foundation decided to put the redenomination\ntopic up for a vote again. This time, the vote was explicitly binding ","\u2014"," meaning that it would\nbe executed if voted through. In comparison, the vote on Kusama was non-binding to capture a signal\nwithout a direct way to affect the Polkadot chain."),(0,i.kt)("p",null,"Based on the feedback received during the Kusama referendum, the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/the-first-polkadot-vote/"},"Polkadot vote")," was held as an approval vote,\nwith four available options. DOT holders could issue votes for any configuration of the four\noptions: no change, a change of 10x, a change of 100x, or a change of 1000x. The voting logic was\ncontained in a specially-built Substrate pallet included in Polkadot's runtime for this poll."),(0,i.kt)("admonition",{title:"Summary of the Vote",type:"info"},(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},"Any combination of the four options may have been approved by the voter. There was no need to\nselect only one option."),(0,i.kt)("li",{parentName:"ul"},"Approving all or none of the options was equivalent and did not affect the outcome."),(0,i.kt)("li",{parentName:"ul"},"All voters could alter their votes any number of times before the close of the poll."),(0,i.kt)("li",{parentName:"ul"},"No discretionary lock-voting was in place; all DOT used to vote counts the same."),(0,i.kt)("li",{parentName:"ul"},"Voting was made on a per-account basis; a single account must have voted the same way and could\nnot split its vote."),(0,i.kt)("li",{parentName:"ul"},"This vote did not affect any economics of the Polkadot platform. As in, staking rewards,\ninflation, effective market capitalization, and the underlying balances of every account remained\ncompletely unchanged. It was \u201cmerely\u201d about what units the network uses to denominate the balances\ninto \u201cDOT\u201d."))),(0,i.kt)("p",null,"With a voting period of two weeks set, the redenomination was now in the hands of the Polkadot\ncommunity for a final, binding decision."),(0,i.kt)("h2",{id:"the-outcome"},"The Outcome"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"redenomination",src:n(75421).Z,width:"2000",height:"1000"})),(0,i.kt)("p",null,"After two weeks of voting, the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/the-results-are-in/"},"results")," of the\nredenomination vote were tallied. About one-third of the total DOT in the network participated in\nthe vote. The redenomination proposal passed with 86% of the voters favoring a 100x factor increase\n(or two decimal places of precision loss)."),(0,i.kt)("p",null,"Polkadot's redenomination then took place on 21 August, now known as Denomination Day, at block\n#1_248_328."),(0,i.kt)("h3",{id:"what-this-means-for-the-community"},"What This Means for the Community"),(0,i.kt)("p",null,"If you are a DOT holder or user of the network, then you do not need to take any action. The DOT\nredenomination was a purely front-end change. You still hold the same amount of Plancks after the\nchange, but now it will appear that you hold 100x more DOT. This change applies proportionally to\nevery account."),(0,i.kt)("h3",{id:"what-this-means-for-builders-of-tools"},"What This Means for Builders of Tools"),(0,i.kt)("p",null,"If you are the builder of a tool that consumes the\n",(0,i.kt)("a",{parentName:"p",href:"https://yarnpkg.com/package/@polkadot/api"},(0,i.kt)("inlineCode",{parentName:"a"},"@polkadot/api"))," package ","\u2014"," then there should be no\nreal changes to be made in your application. The denomination is technically a cosmetic change, and\nevery value remains a constant amount of Plancks."),(0,i.kt)("p",null,"However ","\u2014"," if you are a builder of a tool that displays DOT balances to users (e.g. a wallet)\nor handles DOT balances in an off-chain or custodial way, then you will need to ensure that you\ndisplay the correct denomination of DOT to users."),(0,i.kt)("p",null,"Please see our\n",(0,i.kt)("a",{parentName:"p",href:"https://docs.google.com/document/d/1yAzoDh99PgR_7dYAKTWLMVu2Fy5Ga-J6t9lof4f4JUw/edit#"},"Ecosystem Redenomination Guide"),"\nfor recommendations."),(0,i.kt)("p",null,"Please reach out to ",(0,i.kt)("a",{parentName:"p",href:"mailto:support@polkadot.network"},"support@polkadot.network")," if you need any\nassistance in making sure your software is compatible with the redenomination."))}p.isMDXComponent=!0},75421:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/redenomination-49b0f06a8bd85c8944fb35b6fd864759.png"}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.124ce993.js b/assets/js/935f2afb.124ce993.js new file mode 100644 index 000000000000..40cd508eec89 --- /dev/null +++ b/assets/js/935f2afb.124ce993.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[53],{22624:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"category","label":"Explore","description":"Wallets and Apps in the Polkadot Ecosystem.","items":[{"type":"link","label":"Getting Started","href":"/docs/getting-started","docId":"general/getting-started"},{"type":"category","label":"Wallets","description":"Beginner friendly wallets with advanced features.","items":[{"type":"link","label":"Wallets and Extensions","href":"/docs/wallets-and-extensions","docId":"general/wallets-and-extensions"},{"type":"link","label":"Ledger","href":"/docs/ledger","docId":"general/ledger"},{"type":"link","label":"Polkadot Vault","href":"/docs/polkadot-vault","docId":"general/polkadot-vault"}],"collapsed":true,"collapsible":true,"href":"/docs/wallets-index"},{"type":"category","label":"Apps","description":"Apps for Staking, Governance, Multisigs, NFTs and many more use cases.","items":[{"type":"link","label":"Polkadot Ecosystem Apps","description":"Apps listed on official Polkadot website.","href":"https://polkadot.network/ecosystem/dapps/"},{"type":"link","label":"DotAppStore","description":"Apps upvoted by the community.","href":"https://dotappstore.com/"},{"type":"link","label":"Staking Apps","href":"/docs/staking-apps","docId":"general/staking-apps"},{"type":"link","label":"Governance Apps","href":"/docs/governance-apps","docId":"general/governance-apps"},{"type":"link","label":"Multisig Apps","href":"/docs/multisig-apps","docId":"general/multisig-apps"},{"type":"link","label":"NFT Projects","href":"/docs/learn-nft-projects","docId":"learn/learn-nft-projects"},{"type":"link","label":"Parachain Apps","href":"/docs/parachains-apps","docId":"general/parachains-apps"}],"collapsed":true,"collapsible":true,"href":"/docs/apps-index"},{"type":"category","label":"Dashboards","description":"Dashboards in the Polkadot Ecosystem.","items":[{"type":"link","label":"Staking Dashboard","href":"/docs/staking-dashboard","docId":"general/staking-dashboard"}],"collapsed":true,"collapsible":true,"href":"/docs/dashboards-index"},{"type":"category","label":"Community & Contributors","description":"Polkadot Community and Wiki Contributors.","items":[{"type":"link","label":"Community","href":"/docs/community","docId":"general/community"},{"type":"link","label":"Contributing to the Wiki","href":"/docs/contributing","docId":"general/contributing"},{"type":"link","label":"Contributors","href":"/docs/contributors","docId":"general/contributors"}],"collapsed":true,"collapsible":true,"href":"/docs/community-index"},{"type":"category","label":"Programs","description":"Programs for Grants, Bounties, Ambassadors and many more inititatives.","items":[{"type":"link","label":"Decentralized Futures","href":"/docs/decentralized-futures","docId":"general/decentralized-futures"},{"type":"link","label":"Decentralized Voices","href":"/docs/decentralized-voices","docId":"general/decentralized-voices"},{"type":"link","label":"Grants","href":"/docs/grants","docId":"general/grants"},{"type":"link","label":"Bug Bounty","href":"/docs/bug-bounty","docId":"general/bug-bounty"},{"type":"link","label":"Polkadot Ambassadors","href":"/docs/ambassadors","docId":"general/ambassadors"},{"type":"link","label":"Alpha Program","href":"/docs/alpha-program","docId":"general/alpha-program"},{"type":"link","label":"Thousand Validators","href":"/docs/thousand-validators","docId":"general/doc-thousand-validators"},{"type":"link","label":"Thousand Contributors","href":"/docs/thousand-contributors","docId":"general/doc-thousand-contributors"},{"type":"link","label":"Developer Heroes","href":"/docs/dev-heroes","docId":"general/dev-heroes"}],"collapsed":true,"collapsible":true,"href":"/docs/programs-index"},{"type":"link","label":"Metadata Explorer","href":"/docs/metadata","docId":"general/metadata"}],"collapsed":true,"collapsible":true,"href":"/docs/explore-index"},{"type":"category","label":"Learn","items":[{"type":"category","label":"General","description":"General Information to get started with Polkadot and Web3.","items":[{"type":"link","label":"Web3 and Polkadot","href":"/docs/web3-and-polkadot","docId":"general/web3-and-polkadot"},{"type":"category","label":"Polkadot Vision","description":"Polkadot\'s Vision revealed by Gavin Wood at Decoded 2023.","items":[{"type":"link","label":"Polkadot 1.0","href":"/docs/polkadot-v1","docId":"general/polkadot-v1"},{"type":"link","label":"Polkadot Direction","href":"/docs/polkadot-direction","docId":"general/polkadot-direction"}],"collapsed":true,"collapsible":true,"href":"/docs/polkadot-vision-index"},{"type":"category","label":"Stay Safe","description":"Good-practices to Stay Safe while Surfing in Web3.","items":[{"type":"link","label":"Do Your Own Research","href":"/docs/how-to-dyor","docId":"general/how-to-dyor"},{"type":"link","label":"Scam Protection","href":"/docs/learn-scams","docId":"general/scams"},{"type":"link","label":"Transaction Verification","href":"/docs/transaction-attacks","docId":"general/transaction-attacks"}],"collapsed":true,"collapsible":true,"href":"/docs/stay-safe-index"},{"type":"link","label":"Build on Polkadot","href":"/docs/start-building","docId":"general/start-building"},{"type":"link","label":"Research Pages","href":"/docs/research","docId":"general/research"},{"type":"link","label":"FAQ","href":"/docs/faq","docId":"general/faq"},{"type":"link","label":"Glossary","href":"/docs/glossary","docId":"general/glossary"}],"collapsed":true,"collapsible":true,"href":"/docs/general-index"},{"type":"category","label":"Basics","description":"Staking, Accounts, Transactions, Tokens and NFTs, and Governance.","items":[{"type":"category","label":"Accounts","description":"Basic Accounts, Identity, Multi-signature, and Proxies.","items":[{"type":"link","label":"Account Abstraction","href":"/docs/learn-account-abstraction","docId":"learn/learn-account-abstraction"},{"type":"link","label":"Account Identity","href":"/docs/learn-identity","docId":"learn/learn-identity"},{"type":"link","label":"Multi-Signature Accounts","href":"/docs/learn-account-multisig","docId":"learn/learn-account-multisig"},{"type":"link","label":"Proxy Accounts","href":"/docs/learn-proxies","docId":"learn/learn-proxies"},{"type":"link","label":"Pure Proxy Accounts","href":"/docs/learn-proxies-pure","docId":"learn/learn-proxies-pure"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-accounts"},{"type":"category","label":"Transactions","description":"Extrinsics, Balance Transfers, and Fees.","items":[{"type":"link","label":"Transaction Fees","href":"/docs/learn-transaction-fees","docId":"learn/learn-transaction-fees"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-transactions"},{"type":"category","label":"Staking","description":"Mechanics of Staking.","items":[{"type":"link","label":"Introduction to Staking","href":"/docs/learn-staking","docId":"learn/learn-staking"},{"type":"link","label":"Nomination Pools","href":"/docs/learn-nomination-pools","docId":"learn/learn-nomination-pools"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-staking-index"},{"type":"category","label":"Polkadot OpenGov","description":"Everything about Polkadot OpenGov.","items":[{"type":"link","label":"Polkadot OpenGov","href":"/docs/learn-polkadot-opengov","docId":"learn/learn-polkadot-opengov"},{"type":"link","label":"OpenGov Origins","href":"/docs/learn-polkadot-opengov-origins","docId":"learn/learn-polkadot-opengov-origins"},{"type":"link","label":"Technical Fellowship","href":"/docs/learn-polkadot-technical-fellowship","docId":"learn/learn-polkadot-technical-fellowship"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-polkadot-opengov-index"},{"type":"link","label":"Treasury","href":"/docs/learn-polkadot-opengov-treasury","docId":"learn/learn-polkadot-opengov-treasury"},{"type":"category","label":"Tokens and Assets","description":"DOT Token, Asset Hub, and Teleports.","items":[{"type":"link","label":"Asset Hub","href":"/docs/learn-assets","docId":"learn/learn-assets"},{"type":"link","label":"DOT","href":"/docs/learn-DOT","docId":"learn/learn-DOT"},{"type":"link","label":"Token Inflation","href":"/docs/learn-inflation","docId":"learn/learn-inflation"},{"type":"link","label":"Teleporting Assets","href":"/docs/learn-teleport","docId":"learn/learn-teleport"},{"type":"link","label":"Introduction to NFTs","href":"/docs/learn-nft","docId":"learn/learn-nft"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-assets-index"},{"type":"category","label":"Components","description":"OpenGov, Treasury, WASM, Runtime Upgrades, and more.","items":[{"type":"link","label":"Polkadot Host","href":"/docs/learn-polkadot-host","docId":"learn/learn-polkadot-host"},{"type":"link","label":"WebAssembly (Wasm)","href":"/docs/learn-wasm","docId":"learn/learn-wasm"},{"type":"link","label":"Runtime Upgrades","href":"/docs/learn-runtime-upgrades","docId":"learn/learn-runtime-upgrades"},{"type":"link","label":"Consensus","href":"/docs/learn-consensus","docId":"learn/learn-consensus"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-components-index"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-basics-index"},{"type":"category","label":"Advanced","description":"Advanced Concepts & Guides about Accounts, Staking, and NFTs.","items":[{"type":"category","label":"Polkadot-JS","description":"Overview of Polkadot-JS.","items":[{"type":"link","label":"Polkadot-JS Tooling","href":"/docs/polkadotjs","docId":"general/polkadotjs"},{"type":"link","label":"Polkadot-JS UI","href":"/docs/polkadotjs-ui","docId":"general/polkadotjs-ui"},{"type":"category","label":"Polkadot-JS Guides","description":"Polkadot-JS Guides about Staking, Asset Hub, Vault App, and more.","items":[{"type":"category","label":"Account Guides","description":"Polkadot-JS Guides about Accounts.","items":[{"type":"link","label":"Multisig Guides","href":"/docs/learn-guides-accounts-multisig","docId":"learn/learn-guides-accounts-multisig"},{"type":"link","label":"Proxy Guides","href":"/docs/learn-guides-accounts-proxy","docId":"learn/learn-guides-accounts-proxy"},{"type":"link","label":"Pure Proxy Guides","href":"/docs/learn-guides-accounts-proxy-pure","docId":"learn/learn-guides-accounts-proxy-pure"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-guides-accounts"},{"type":"link","label":"Transfer Guides","href":"/docs/learn-guides-transfers","docId":"learn/learn-guides-transfers"},{"type":"category","label":"Staking Guides","description":"Polkadot-JS Guides about Staking.","items":[{"type":"link","label":"Nominator Guides","href":"/docs/learn-guides-nominator","docId":"learn/learn-guides-nominator"},{"type":"link","label":"Nomination Pool Guides","href":"/docs/learn-guides-staking-pools","docId":"learn/learn-guides-staking-pools"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-guides-staking"},{"type":"link","label":"OpenGov Guides","href":"/docs/learn-guides-polkadot-opengov","docId":"learn/learn-guides-polkadot-opengov"},{"type":"link","label":"Treasury Guides","href":"/docs/learn-guides-treasury","docId":"learn/learn-guides-treasury"},{"type":"link","label":"Bounty Guides","href":"/docs/learn-guides-bounties","docId":"learn/learn-guides-bounties"},{"type":"link","label":"Identity Guides","href":"/docs/learn-guides-identity","docId":"learn/learn-guides-identity"},{"type":"link","label":"Ledger Guides","href":"/docs/learn-guides-ledger","docId":"learn/learn-guides-ledger"},{"type":"link","label":"Polkadot Vault Guides","href":"/docs/learn-guides-vault","docId":"learn/learn-guides-vault"},{"type":"category","label":"Asset Hub Guides","description":"Polkadot-JS Guides about Asset Hub.","items":[{"type":"link","label":"Create Asset Guides","href":"/docs/learn-guides-assets-create","docId":"learn/learn-guides-assets-create"},{"type":"link","label":"Asset Hub Ledger Guides","href":"/docs/learn-guides-assets-ledger","docId":"learn/learn-guides-assets-ledger"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-guides-assets"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-polkadot-js-guides"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-polkadotjs-index"},{"type":"category","label":"Architecture","description":"Nominators, Validators, Collators, Parachains, and more.","items":[{"type":"link","label":"Architecture","href":"/docs/learn-architecture","docId":"learn/learn-architecture"},{"type":"category","label":"Network Participants","description":"Participants in the Polkadot Ecosystem.","items":[{"type":"link","label":"Collator","href":"/docs/learn-collator","docId":"learn/learn-collator"},{"type":"link","label":"Nominator","href":"/docs/learn-nominator","docId":"learn/learn-nominator"},{"type":"link","label":"Validator","href":"/docs/learn-validator","docId":"learn/learn-validator"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-participants-index"},{"type":"category","label":"Parachains","description":"Parachains\' Protocol, Auctions, Crowdloans, and more.","items":[{"type":"link","label":"Introduction to Parachains","href":"/docs/learn-parachains","docId":"learn/learn-parachains"},{"type":"link","label":"Protocol Overview","href":"/docs/learn-parachains-protocol","docId":"learn/learn-parachains-protocol"},{"type":"link","label":"System Parachains","href":"/docs/learn-system-chains","docId":"learn/learn-system-chains"},{"type":"link","label":"Parachain Slot Auctions","href":"/docs/learn-auction","docId":"learn/learn-auction"},{"type":"link","label":"Parachain Crowdloans","href":"/docs/learn-crowdloans","docId":"learn/learn-crowdloans"},{"type":"link","label":"Parachains FAQ","href":"/docs/learn-parachains-faq","docId":"learn/learn-parachains-faq"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-parachains-index"},{"type":"link","label":"Bridges","href":"/docs/learn-bridges","docId":"learn/learn-bridges"},{"type":"category","label":"Cross Consensus Messaging (XCM)","description":"Polkadot\'s Cross-Consensus Messaging Format (XCM).","items":[{"type":"link","label":"Cross-Consensus Message Format (XCM)","href":"/docs/learn-xcm","docId":"learn/learn-xcm"},{"type":"link","label":"XCM Pallet","href":"/docs/learn-xcm-pallet","docId":"learn/learn-xcm-pallet"},{"type":"link","label":"XCM Use-cases","href":"/docs/learn-xcm-usecases","docId":"learn/learn-xcm-usecases"},{"type":"link","label":"XCM Transport","href":"/docs/learn-xcm-transport","docId":"learn/learn-xcm-transport"},{"type":"link","label":"XCM Virtual Machine (XCVM)","href":"/docs/learn-xcvm","docId":"learn/learn-xcvm"},{"type":"link","label":"XCM Instructions","href":"/docs/learn-xcm-instructions","docId":"learn/learn-xcm-instructions"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-xcm-index"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-architecture-index"},{"type":"link","label":"Accounts","href":"/docs/learn-account-advanced","docId":"learn/learn-account-advanced"},{"type":"link","label":"Advanced Staking Concepts","href":"/docs/learn-staking-advanced","docId":"learn/learn-staking-advanced"},{"type":"link","label":"NFT Pallets","href":"/docs/learn-nft-pallets","docId":"learn/learn-nft-pallets"},{"type":"link","label":"Cryptography","href":"/docs/learn-cryptography","docId":"learn/learn-cryptography"},{"type":"link","label":"NPoS Election Algorithms","href":"/docs/learn-phragmen","docId":"learn/learn-phragmen"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-advanced-index"},{"type":"category","label":"XCM Docs","description":"In-depth documentation about the Polkadot\'s Cross-Chain Messaging (XCM).","items":[{"type":"link","label":"XCM: Cross-Consensus Messaging","href":"/docs/learn/xcm/introduction","docId":"learn/xcm/learn-xcm-docs-intro"},{"type":"category","label":"Overview","description":"Overview of the XCM Documentation.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/overview-summary","docId":"learn/xcm/overview/learn-xcm-docs-overview-summary"},{"type":"link","label":"Introduction","href":"/docs/learn/xcm/overview-intro","docId":"learn/xcm/overview/learn-xcm-docs-overview-intro"},{"type":"link","label":"A Format, not a Protocol","href":"/docs/learn/xcm/overview-format","docId":"learn/xcm/overview/learn-xcm-docs-overview-format"},{"type":"link","label":"The XCVM","href":"/docs/learn/xcm/overview-xcvm","docId":"learn/xcm/overview/learn-xcm-docs-overview-xcvm"},{"type":"link","label":"Architecture","href":"/docs/learn/xcm/overview-architecture","docId":"learn/xcm/overview/learn-xcm-docs-overview-architecture"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/overview"},{"type":"category","label":"Quickstart","description":"Start Diving into XCM.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/quickstart-summary","docId":"learn/xcm/quickstart/learn-xcm-docs-quickstart-summary"},{"type":"link","label":"XCM Simulator","href":"/docs/learn/xcm/quickstart-simulator","docId":"learn/xcm/quickstart/learn-xcm-docs-quickstart-simulator"},{"type":"link","label":"First Look at an XCM","href":"/docs/learn/xcm/quickstart-first-look","docId":"learn/xcm/quickstart/learn-xcm-docs-quickstart-first-look"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/quickstart"},{"type":"category","label":"Fundamentals","description":"Fundamental Concepts about XCM.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/fundamentals-summary","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-summary"},{"type":"category","label":"MultiLocation","description":"The MultiLocation Type.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/fundamentals/multilocation-summary","docId":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-summary"},{"type":"link","label":"Junction(s)","href":"/docs/learn/xcm/fundamentals/multilocation-junctions","docId":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-junctions"},{"type":"link","label":"Example","href":"/docs/learn/xcm/fundamentals/multilocation-example","docId":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-example"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/fundamentals/multilocation"},{"type":"link","label":"MultiAsset","href":"/docs/learn/xcm/fundamentals-multiasset","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-multiasset"},{"type":"link","label":"XCVM","href":"/docs/learn/xcm/fundamentals-xcvm","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-xcvm"},{"type":"link","label":"Weight and Fees","href":"/docs/learn/xcm/fundamentals-fees","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-fees"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/fundamentals"},{"type":"category","label":"A Journey through XCM","description":"A Practical Introduction to the XCM Features","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/journey-summary","docId":"learn/xcm/journey/learn-xcm-docs-journey-summary"},{"type":"category","label":"Transfers","description":"Transferring Assets between Consensus Systems with XCM.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/journey/transfers-summary","docId":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-summary"},{"type":"link","label":"Asset Teleportation","href":"/docs/learn/xcm/journey/transfers-teleport","docId":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-teleport"},{"type":"link","label":"Reserve-backed Transfers","href":"/docs/learn/xcm/journey/transfers-reserve","docId":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-reserve"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/journey/transfers"},{"type":"link","label":"Fee Handling","href":"/docs/learn/xcm/journey-fees","docId":"learn/xcm/journey/learn-xcm-docs-journey-fees"},{"type":"link","label":"Transact: A General Solution","href":"/docs/learn/xcm/journey-transact","docId":"learn/xcm/journey/learn-xcm-docs-journey-transact"},{"type":"link","label":"Origin Manipulation","href":"/docs/learn/xcm/journey-origin","docId":"learn/xcm/journey/learn-xcm-docs-journey-origin"},{"type":"link","label":"More Register Modifiers","href":"/docs/learn/xcm/journey-register","docId":"learn/xcm/journey/learn-xcm-docs-journey-register"},{"type":"link","label":"More Holding Modifiers","href":"/docs/learn/xcm/journey-holding","docId":"learn/xcm/journey/learn-xcm-docs-journey-holding"},{"type":"link","label":"Trap and Claim Assets","href":"/docs/learn/xcm/journey-assets","docId":"learn/xcm/journey/learn-xcm-docs-journey-assets"},{"type":"link","label":"Expectations","href":"/docs/learn/xcm/journey-expectations","docId":"learn/xcm/journey/learn-xcm-docs-journey-expectations"},{"type":"link","label":"Queries","href":"/docs/learn/xcm/journey-queries","docId":"learn/xcm/journey/learn-xcm-docs-journey-queries"},{"type":"link","label":"Version Subscription","href":"/docs/learn/xcm/journey-version","docId":"learn/xcm/journey/learn-xcm-docs-journey-version"},{"type":"link","label":"Locks","href":"/docs/learn/xcm/journey-locks","docId":"learn/xcm/journey/locks/learn-xcm-docs-journey-locks"},{"type":"link","label":"Channels and Bridges","href":"/docs/learn/xcm/journey-channels","docId":"learn/xcm/journey/learn-xcm-docs-journey-channels"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/journey"},{"type":"link","label":"Executor Configuration","href":"/docs/learn/xcm/config-deep-dive","docId":"learn/xcm/executor_config/learn-xcm-docs-config-deep-dive"},{"type":"link","label":"Testing","href":"/docs/learn/xcm/testing","docId":"learn/xcm/learn-xcm-docs-testing"},{"type":"category","label":"References","description":"XCVM Registers and Glossary","items":[{"type":"link","label":"All XCVM Registers","href":"/docs/learn/xcm/reference-xcvm-registers","docId":"learn/xcm/reference/learn-xcm-docs-reference-xcvm-registers"},{"type":"link","label":"Glossary","href":"/docs/learn/xcm/reference-glossary","docId":"learn/xcm/reference/learn-xcm-docs-reference-glossary"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/references"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm"},{"type":"category","label":"Polkadot Comparisons","description":"Comparison between Polkadot and other Networks. ","items":[{"type":"link","label":"Kusama","href":"/docs/learn-comparisons-kusama","docId":"learn/learn-comparisons-kusama"},{"type":"link","label":"Ethereum","href":"/docs/learn-comparisons-ethereum-2","docId":"learn/learn-comparisons-ethereum-2"},{"type":"link","label":"Cosmos","href":"/docs/learn-comparisons-cosmos","docId":"learn/learn-comparisons-cosmos"},{"type":"link","label":"Avalanche","href":"/docs/learn-comparisons-avalanche","docId":"learn/learn-comparisons-avalanche"},{"type":"link","label":"Other Comparisons","href":"/docs/learn-comparisons","docId":"learn/learn-comparisons"},{"type":"link","label":"Layer Two and Rollups","href":"/docs/learn-comparisons-rollups","docId":"learn/learn-comparisons-rollups"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-comparisons-index"},{"type":"link","label":"Videos","href":"/docs/learn-video-tutorials","docId":"learn/learn-video-tutorials"},{"type":"category","label":"Future Implementations","description":"Implementations that will be deployed on Polkadot.","items":[{"type":"link","label":"SPREE","href":"/docs/learn-spree","docId":"learn/learn-spree"},{"type":"link","label":"Parathreads","href":"/docs/learn-parathreads","docId":"learn/learn-parathreads"},{"type":"link","label":"Asynchronous Backing","href":"/docs/learn-async-backing","docId":"learn/learn-async-backing"},{"type":"link","label":"SASSAFRAS","href":"/docs/learn-sassafras","docId":"learn/learn-sassafras"},{"type":"link","label":"Hyperbridge","href":"/docs/learn-hyperbridge","docId":"learn/learn-hyperbridge"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-future-implementations-index"},{"type":"category","label":"Archive","description":"Implementations no longer live on Polkadot.","items":[{"type":"link","label":"Governance V1","href":"/docs/learn/learn-governance","docId":"learn/archive/learn-governance"},{"type":"link","label":"Gov1 Treasury","href":"/docs/learn/learn-treasury","docId":"learn/archive/learn-treasury"},{"type":"link","label":"Polkadot Launch Phases","href":"/docs/learn/learn-launch","docId":"learn/archive/learn-launch"},{"type":"link","label":"Redenomination of DOT","href":"/docs/learn/learn-redenomination","docId":"learn/archive/learn-redenomination"},{"type":"link","label":"Controller Accounts","href":"/docs/learn/learn-controller","docId":"learn/archive/learn-controller"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-archive"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-index"},{"type":"category","label":"Build","items":[{"type":"category","label":"Client-side Development","items":[{"type":"link","label":"Building dApps","href":"/docs/build-dapp","docId":"build/build-dapp"},{"type":"link","label":"Oracles","href":"/docs/build-oracle","docId":"build/build-oracle"},{"type":"link","label":"Using Light Clients","href":"/docs/build-light-clients","docId":"build/build-light-clients"},{"type":"link","label":"Decentralized Storage","href":"/docs/build-storage","docId":"build/build-storage"},{"type":"link","label":"Transaction Construction","href":"/docs/build-transaction-construction","docId":"build/build-transaction-construction"},{"type":"link","label":"Node Interaction","href":"/docs/build-node-interaction","docId":"build/build-node-interaction"}],"collapsed":true,"collapsible":true,"href":"/docs/build-client-index"},{"type":"link","label":"Smart Contracts","href":"/docs/build-smart-contracts","docId":"build/build-smart-contracts"},{"type":"category","label":"Protocol Development","items":[{"type":"link","label":"Polkadot Protocol","href":"/docs/build-protocol-info","docId":"build/build-protocol-info"},{"type":"link","label":"Parachain Development","href":"/docs/build-pdk","docId":"build/build-parachains"},{"type":"link","label":"Integrating Assets","href":"/docs/build-integrate-assets","docId":"build/build-integrate-assets"},{"type":"link","label":"Opening HRMP Channels","href":"/docs/build-hrmp-channels","docId":"build/build-hrmp-channels"}],"collapsed":true,"collapsible":true,"href":"/docs/build-protocol-index"},{"type":"category","label":"Development Networks & Node Management","items":[{"type":"link","label":"Networks Overview","href":"/docs/build-network-overview","docId":"build/build-network-overview"},{"type":"link","label":"Integration Initiation","href":"/docs/build-integration","docId":"build/build-integration"},{"type":"link","label":"Node Management","href":"/docs/build-node-management","docId":"build/build-node-management"}],"collapsed":true,"collapsible":true,"href":"/docs/build-network-index"},{"type":"category","label":"Tooling","items":[{"type":"link","label":"Explorer, Data, & Indexing Tools","href":"/docs/build-data","docId":"build/build-data"},{"type":"link","label":"Open Source Stack","href":"/docs/build-open-source","docId":"build/build-open-source"}],"collapsed":true,"collapsible":true,"href":"/docs/build-tools-index"},{"type":"link","label":"Hackathons","href":"/docs/build-hackathon","docId":"build/build-hackathon"}],"collapsed":true,"collapsible":true,"href":"/docs/build-guide"},{"type":"category","label":"Maintain","items":[{"type":"link","label":"Parameters","href":"/docs/maintain-polkadot-parameters","docId":"maintain/maintain-polkadot-parameters"},{"type":"category","label":"Nodes and Dapps","description":"Learn how to set up a node.","items":[{"type":"link","label":"Node Endpoints","href":"/docs/maintain-endpoints","docId":"maintain/maintain-endpoints"},{"type":"link","label":"Set up a Full Node","href":"/docs/maintain-sync","docId":"maintain/maintain-sync"},{"type":"link","label":"Set up a Boot Node","href":"/docs/maintain-bootnode","docId":"maintain/maintain-bootnode"},{"type":"link","label":"Set up a RPC node","href":"/docs/maintain-rpc","docId":"maintain/maintain-rpc"},{"type":"link","label":"Secure the WebSocket","href":"/docs/maintain-wss","docId":"maintain/maintain-wss"},{"type":"link","label":"Networks","href":"/docs/maintain-networks","docId":"maintain/maintain-networks"},{"type":"link","label":"Resolving Errors","href":"/docs/maintain-errors","docId":"maintain/maintain-errors"}],"collapsed":true,"collapsible":true,"href":"/docs/maintain-node-index"},{"type":"category","label":"Collator Guides","description":"Guides for Collator Nodes.","items":[{"type":"link","label":"Async Backing Upgrade","href":"/docs/maintain-guides-async-backing","docId":"maintain/maintain-guides-async-backing"}],"collapsed":true,"collapsible":true,"href":"/docs/maintain-collator-index"},{"type":"category","label":"Validator Guides","description":"Guides for Validator Nodes.","items":[{"type":"link","label":"How to run a Validator on Polkadot","href":"/docs/maintain-guides-how-to-validate-polkadot","docId":"maintain/maintain-guides-how-to-validate-polkadot"},{"type":"link","label":"Validator Payout Overview","href":"/docs/maintain-guides-validator-payout","docId":"maintain/maintain-guides-validator-payout"},{"type":"link","label":"Using systemd for a Validator Node","href":"/docs/maintain-guides-how-to-systemd","docId":"maintain/maintain-guides-how-to-systemd"},{"type":"link","label":"Secure Validator","href":"/docs/maintain-guides-secure-validator","docId":"maintain/maintain-guides-secure-validator"},{"type":"link","label":"How to Upgrade Your Validator","href":"/docs/maintain-guides-how-to-upgrade","docId":"maintain/maintain-guides-how-to-upgrade"},{"type":"link","label":"Monitor your node","href":"/docs/maintain-guides-how-to-monitor-your-node","docId":"maintain/maintain-guides-how-to-monitor-your-node"},{"type":"link","label":"How to Chill","href":"/docs/maintain-guides-how-to-chill","docId":"maintain/maintain-guides-how-to-chill"},{"type":"link","label":"How to Stop Validating","href":"/docs/maintain-guides-how-to-stop-validating","docId":"maintain/maintain-guides-how-to-stop-validating"},{"type":"link","label":"Validator Community Overview","href":"/docs/maintain-guides-validator-community","docId":"maintain/doc-maintain-guides-validator-community"},{"type":"link","label":"Validator Best Practices","href":"/docs/maintain-guides-avoid-slashing","docId":"maintain/maintain-guides-avoid-slashing"}],"collapsed":true,"collapsible":true,"href":"/docs/maintain-validator-index"},{"type":"category","label":"Archive","description":"Basic Accounts, Identity, Multi-signature, and Proxies.","items":[{"type":"link","label":"Participate in Democracy","href":"/docs/maintain/maintain-guides-democracy","docId":"maintain/archive/maintain-guides-democracy"},{"type":"link","label":"Join the Council","href":"/docs/maintain/maintain-guides-how-to-join-council","docId":"maintain/archive/maintain-guides-how-to-join-council"},{"type":"link","label":"Voting for Councillors","href":"/docs/maintain/maintain-guides-how-to-vote-councillor","docId":"maintain/archive/maintain-guides-how-to-vote-councillor"}],"collapsed":true,"collapsible":true,"href":"/docs/maintain-archive"}],"collapsed":true,"collapsible":true,"href":"/docs/maintain-index"}]},"docs":{"build/build-dapp":{"id":"build/build-dapp","title":"Building dApps","description":"An overview about building dApps on Polkadot","sidebar":"docs"},"build/build-data":{"id":"build/build-data","title":"Explorer, Data, & Indexing Tools","description":"An overview about building with data analytics","sidebar":"docs"},"build/build-guide":{"id":"build/build-guide","title":"Polkadot Developer Portal","description":"Start building with Polkadot/Kusama.","sidebar":"docs"},"build/build-hackathon":{"id":"build/build-hackathon","title":"Hackathons","description":"Join or host a Hackathon.","sidebar":"docs"},"build/build-hrmp-channels":{"id":"build/build-hrmp-channels","title":"Opening HRMP Channels","description":"Steps on how to open HRMP channels between parachains.","sidebar":"docs"},"build/build-index":{"id":"build/build-index","title":"Builder\'s Guides","description":"Reference point for the Polkadot builder guides."},"build/build-integrate-assets":{"id":"build/build-integrate-assets","title":"Assets on Polkadot","description":"Tools that you can use to integrating assets.","sidebar":"docs"},"build/build-integration":{"id":"build/build-integration","title":"Polkadot Integration Guide","description":"Reference point for the Polkadot integration guides.","sidebar":"docs"},"build/build-light-clients":{"id":"build/build-light-clients","title":"Using Light Clients","description":"Information about light client options.","sidebar":"docs"},"build/build-network-overview":{"id":"build/build-network-overview","title":"Networks Overview","description":"An overview of the different networks on Polkadot","sidebar":"docs"},"build/build-node-interaction":{"id":"build/build-node-interaction","title":"Node Interaction","description":"Tools for node interaction.","sidebar":"docs"},"build/build-node-management":{"id":"build/build-node-management","title":"Node Management","description":"Steps on how to manage your Polkadot node.","sidebar":"docs"},"build/build-open-source":{"id":"build/build-open-source","title":"Open Source Stack","description":"Overview of the open source Polkadot/Kusama Tech Stack","sidebar":"docs"},"build/build-oracle":{"id":"build/build-oracle","title":"Oracles","description":"Information about building with oracles.","sidebar":"docs"},"build/build-parachains":{"id":"build/build-parachains","title":"Parachain Development","description":"A guide on what it means to become a Parachain and the steps to do so.","sidebar":"docs"},"build/build-protocol-info":{"id":"build/build-protocol-info","title":"Polkadot Protocol Information","description":"Characteristics about the Polkadot protocol, and what you need to consider when building.","sidebar":"docs"},"build/build-smart-contracts":{"id":"build/build-smart-contracts","title":"Smart Contracts","description":"How smart contracts play their role in the Polkadot ecosystem.","sidebar":"docs"},"build/build-storage":{"id":"build/build-storage","title":"Decentralized Storage","description":"Information about building with decentralized storage.","sidebar":"docs"},"build/build-tools-index":{"id":"build/build-tools-index","title":"Tool Index","description":"Reference point for a list of tools to support your development.","sidebar":"docs"},"build/build-transaction-construction":{"id":"build/build-transaction-construction","title":"Transaction Construction and Signing","description":"Information about how transactions are constructed on Polkadot.","sidebar":"docs"},"general/alpha-program":{"id":"general/alpha-program","title":"Polkadot Alpha Program","description":"The Polkadot Alpha Program and How it can Support your Development.","sidebar":"docs"},"general/ambassadors":{"id":"general/ambassadors","title":"Polkadot Ambassador Program","description":"The Polkadot\'s Ambassador Program and How you can Participate in It.","sidebar":"docs"},"general/bug-bounty":{"id":"general/bug-bounty","title":"Bug Bounty Program","description":"An Overview of How you can Help Catch Bugs.","sidebar":"docs"},"general/community":{"id":"general/community","title":"Community","description":"Connect and stay updated with the Polkadot Community.","sidebar":"docs"},"general/contributing":{"id":"general/contributing","title":"Contributing to the Polkadot Wiki","description":"Contribute to the Polkadot Wiki.","sidebar":"docs"},"general/contributors":{"id":"general/contributors","title":"Contributors","description":"Get to know your Wiki-slayers.","sidebar":"docs"},"general/decentralized-futures":{"id":"general/decentralized-futures","title":"Decentralized Futures Program","description":"Learn about the Decentralized Futures Program.","sidebar":"docs"},"general/decentralized-voices":{"id":"general/decentralized-voices","title":"Decentralized Voices Program","description":"Learn about the Decentralized Voices Program.","sidebar":"docs"},"general/dev-heroes":{"id":"general/dev-heroes","title":"Developer Heroes Program","description":"More Power to Polkadot\'s Developers.","sidebar":"docs"},"general/doc-thousand-contributors":{"id":"general/doc-thousand-contributors","title":"Thousand Contributors Program","description":"The Thousand Contributors Program and How it can Support your Contributions.","sidebar":"docs"},"general/doc-thousand-validators":{"id":"general/doc-thousand-validators","title":"Thousand Validators Programme","description":"The Thousand Validators Program and How it can Support your Validator Endeavors.","sidebar":"docs"},"general/faq":{"id":"general/faq","title":"Frequently Asked Questions (FAQs)","description":"FAQs to Help you Navigate on Polkadot.","sidebar":"docs"},"general/getting-started":{"id":"general/getting-started","title":"Getting Started","description":"Get started with Polkadot and Web3.","sidebar":"docs"},"general/glossary":{"id":"general/glossary","title":"Glossary","description":"Common Terms and Concepts in the Polkadot Ecosystem.","sidebar":"docs"},"general/governance-apps":{"id":"general/governance-apps","title":"Polkadot Governance Apps","description":"Governance Apps in the Polkadot Ecosystem.","sidebar":"docs"},"general/grants":{"id":"general/grants","title":"Grants Program","description":"The Grant Programs in the Polkadot Ecosystem.","sidebar":"docs"},"general/how-to-dyor":{"id":"general/how-to-dyor","title":"How to Do Your Own Research (DYOR)","description":"Importance of Doing Your Own Research (DYOR).","sidebar":"docs"},"general/kusama/kusama-adversarial-cheatsheet":{"id":"general/kusama/kusama-adversarial-cheatsheet","title":"Adversarial Cheatsheet","description":"A cheatsheet to help you create chaos."},"general/kusama/kusama-bug-bounty":{"id":"general/kusama/kusama-bug-bounty","title":"Bug Bounty","description":"An overview of how you can help catch bugs."},"general/kusama/kusama-claims":{"id":"general/kusama/kusama-claims","title":"Kusama Claims","description":"Step-by-step guide on how to claim your KSM tokens."},"general/kusama/kusama-coc":{"id":"general/kusama/kusama-coc","title":"Kusama Code of Conduct","description":"Kusama\'s Code of Conduct to sustain chaos."},"general/kusama/kusama-community":{"id":"general/kusama/kusama-community","title":"Kusama Community","description":"Stay in-touch and keep up-to-date by interacting and engaging in the Kusama community."},"general/kusama/kusama-getting-started":{"id":"general/kusama/kusama-getting-started","title":"Interact with Kusama","description":"Reference point for Kusama content."},"general/kusama/kusama-index":{"id":"general/kusama/kusama-index","title":"Kusama","description":"Legacy link to Kusama Wiki document"},"general/kusama/kusama-parameters":{"id":"general/kusama/kusama-parameters","title":"Kusama Parameters","description":"Learn about common Kusama parameters"},"general/kusama/kusama-social-recovery":{"id":"general/kusama/kusama-social-recovery","title":"Social Recovery","description":"Steps on how to perform account recovery on Kusama."},"general/kusama/kusama-timeline":{"id":"general/kusama/kusama-timeline","title":"Kusama Timeline","description":"Stay up-to-date with the latest action on Kusama."},"general/ledger":{"id":"general/ledger","title":"Using the Polkadot & Kusama Ledger Applications","description":"Use the Polkadot Ledger Application.","sidebar":"docs"},"general/metadata":{"id":"general/metadata","title":"Metadata Explorer","description":"Visualize Metadata and related Documentation.","sidebar":"docs"},"general/multisig-apps":{"id":"general/multisig-apps","title":"Polkadot Multisig Apps","description":"Multisig Apps in the Polkadot Ecosystem.","sidebar":"docs"},"general/parachains-apps":{"id":"general/parachains-apps","title":"Polkadot Parachain Apps","description":"Polkadot\'s Parachain Apps.","sidebar":"docs"},"general/polkadot-direction":{"id":"general/polkadot-direction","title":"Polkadot Direction","description":"Polkadot as a Decentralized and Secure Ubiquitous Computer.","sidebar":"docs"},"general/polkadot-v1":{"id":"general/polkadot-v1","title":"Polkadot 1.0","description":"Polkadot\'s 1.0, Blockspace, Decentralization and Resilience.","sidebar":"docs"},"general/polkadot-vault":{"id":"general/polkadot-vault","title":"Polkadot Vault (formerly Parity Signer)","description":"Your old Smartphone as an Air-gapped Wallet.","sidebar":"docs"},"general/polkadotjs":{"id":"general/polkadotjs","title":"Polkadot-JS Tooling","description":"The Polkadot-JS Tool Collection.","sidebar":"docs"},"general/polkadotjs-ui":{"id":"general/polkadotjs-ui","title":"Polkadot-JS UI (Wallet)","description":"A Wallet for Power-users and Developers.","sidebar":"docs"},"general/research":{"id":"general/research","title":"Research Pages","description":"Latest Research Developments on Polkadot.","sidebar":"docs"},"general/scams":{"id":"general/scams","title":"How to Protect Yourself from Scams","description":"How to Protect yourself against Scams.","sidebar":"docs"},"general/staking-apps":{"id":"general/staking-apps","title":"Polkadot Staking Apps","description":"Staking Apps in the Polkadot Ecosystem.","sidebar":"docs"},"general/staking-dashboard":{"id":"general/staking-dashboard","title":"Polkadot Staking Dashboard","description":"Everything about the Polkadot Staking Dashboard.","sidebar":"docs"},"general/start-building":{"id":"general/start-building","title":"Build on Polkadot","description":"Start Building with the Polkadot SDK.","sidebar":"docs"},"general/transaction-attacks":{"id":"general/transaction-attacks","title":"Why Verify Transactions?","description":"How to Prevent from being a Victim of an Attack","sidebar":"docs"},"general/wallets-and-extensions":{"id":"general/wallets-and-extensions","title":"Wallets and Extensions","description":"An Overview of Wallets and Browser Extensions in the Polkadot Ecosystem.","sidebar":"docs"},"general/web3-and-polkadot":{"id":"general/web3-and-polkadot","title":"Web3 and Polkadot","description":"Introduction to Web3 and Polkadot\'s Role in shaping the Web3 Vision.","sidebar":"docs"},"learn/archive/learn-controller":{"id":"learn/archive/learn-controller","title":"Controller Accounts","description":"Controller Accounts used in Staking.","sidebar":"docs"},"learn/archive/learn-governance":{"id":"learn/archive/learn-governance","title":"Governance V1","description":"Polkadot\'s First Governance Model.","sidebar":"docs"},"learn/archive/learn-launch":{"id":"learn/archive/learn-launch","title":"Polkadot Launch Phases","description":"Polkadot\'s Launch Process and its Individual Phases.","sidebar":"docs"},"learn/archive/learn-redenomination":{"id":"learn/archive/learn-redenomination","title":"Redenomination of DOT","description":"Everything about the DOT Token Redenomination.","sidebar":"docs"},"learn/archive/learn-treasury":{"id":"learn/archive/learn-treasury","title":"Governance v1 Treasury","description":"The Polkadot\'s On-chain Treasury during Gov1.","sidebar":"docs"},"learn/learn-account-abstraction":{"id":"learn/learn-account-abstraction","title":"Polkadot\'s Account Abstraction","description":"Polkadot\'s Native Account Abstraction.","sidebar":"docs"},"learn/learn-account-advanced":{"id":"learn/learn-account-advanced","title":"Polkadot Accounts In-Depth","description":"Advanced Concepts about Polkadot\'s Accounts.","sidebar":"docs"},"learn/learn-account-multisig":{"id":"learn/learn-account-multisig","title":"Multi-Signature Accounts","description":"Multi-signature Accounts on Polkadot.","sidebar":"docs"},"learn/learn-accounts":{"id":"learn/learn-accounts","title":"Polkadot Accounts","description":"Polkadot Accounts, Account Identity, and Account Reaping.","sidebar":"docs"},"learn/learn-architecture":{"id":"learn/learn-architecture","title":"Architecture","description":"Key Components to Polkadot\'s Architecture.","sidebar":"docs"},"learn/learn-archive":{"id":"learn/learn-archive","title":"Learn Archive","description":"Archive for the Learn Section.","sidebar":"docs"},"learn/learn-assets":{"id":"learn/learn-assets","title":"Asset Hub","description":"Fungible Tokens and NFTs on Polkadot.","sidebar":"docs"},"learn/learn-async-backing":{"id":"learn/learn-async-backing","title":"Asynchronous Backing","description":"A brief overview of asynchronous backing, and how it affects Polkadot\'s scalability.","sidebar":"docs"},"learn/learn-auction":{"id":"learn/learn-auction","title":"Parachain Slot Auctions","description":"Polkadot\'s Parachain Slot Auction Mechanism.","sidebar":"docs"},"learn/learn-bridges":{"id":"learn/learn-bridges","title":"Bridges","description":"Bridges and Examples of Common Bridges.","sidebar":"docs"},"learn/learn-collator":{"id":"learn/learn-collator","title":"Collator","description":"Role of Collators within the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-comparisons":{"id":"learn/learn-comparisons","title":"Polkadot Comparisons","description":"Comparison between Polkadot and ETH 1.0 and BSC.","sidebar":"docs"},"learn/learn-comparisons-avalanche":{"id":"learn/learn-comparisons-avalanche","title":"Polkadot vs. Avalanche","description":"Comparison between Polkadot and Avalanche.","sidebar":"docs"},"learn/learn-comparisons-cosmos":{"id":"learn/learn-comparisons-cosmos","title":"Polkadot vs. Cosmos","description":"Comparison between Polkadot and Cosmos.","sidebar":"docs"},"learn/learn-comparisons-ethereum-2":{"id":"learn/learn-comparisons-ethereum-2","title":"Polkadot vs. Ethereum","description":"Comparison between Polkadot and Ethereum.","sidebar":"docs"},"learn/learn-comparisons-kusama":{"id":"learn/learn-comparisons-kusama","title":"Polkadot vs. Kusama","description":"Comparing the cousins.","sidebar":"docs"},"learn/learn-comparisons-rollups":{"id":"learn/learn-comparisons-rollups","title":"Layer Two and Rollups","description":"Comparison between various Rollup and L2 Protocols.","sidebar":"docs"},"learn/learn-consensus":{"id":"learn/learn-consensus","title":"Polkadot Consensus","description":"The Consensus Mechanism of Polkadot.","sidebar":"docs"},"learn/learn-crowdloans":{"id":"learn/learn-crowdloans","title":"Parachain Crowdloans","description":"Polkadot\'s Crowdloans and How to Participate.","sidebar":"docs"},"learn/learn-cryptography":{"id":"learn/learn-cryptography","title":"Cryptography on Polkadot","description":"Cryptographic Functions used in Polkadot.","sidebar":"docs"},"learn/learn-DOT":{"id":"learn/learn-DOT","title":"DOT","description":"Tokenomics of Polkadot\'s Native Token DOT.","sidebar":"docs"},"learn/learn-guides-accounts":{"id":"learn/learn-guides-accounts","title":"Polkadot-JS Guides about Accounts","description":"Polkadot-JS Guides about Accounts","sidebar":"docs"},"learn/learn-guides-accounts-multisig":{"id":"learn/learn-guides-accounts-multisig","title":"Polkadot-JS Guides about Multi-signature Accounts","description":"Polkadot-JS Guides about Multi-signature Accounts","sidebar":"docs"},"learn/learn-guides-accounts-proxy":{"id":"learn/learn-guides-accounts-proxy","title":"Polkadot-JS Guides about Proxy Accounts","description":"Polkadot-JS Guides about Proxy Accounts","sidebar":"docs"},"learn/learn-guides-accounts-proxy-pure":{"id":"learn/learn-guides-accounts-proxy-pure","title":"Polkadot-JS Guides about Pure Proxy Accounts","description":"Polkadot-JS Guides about Pure Proxy Accounts","sidebar":"docs"},"learn/learn-guides-assets":{"id":"learn/learn-guides-assets","title":"Polkadot-JS Guides about Asset Hub","description":"Polkadot-JS Guides about Asset Hub.","sidebar":"docs"},"learn/learn-guides-assets-create":{"id":"learn/learn-guides-assets-create","title":"Polkadot-JS Guides about Creating Assets","description":"Polkadot-JS Guides about Creating Assets.","sidebar":"docs"},"learn/learn-guides-assets-ledger":{"id":"learn/learn-guides-assets-ledger","title":"Polkadot-JS Guides about Asset Hub Ledger App","description":"Polkadot-JS Guides about Ledger and the Asset Hub.","sidebar":"docs"},"learn/learn-guides-bounties":{"id":"learn/learn-guides-bounties","title":"Polkadot-JS Guides about Bounties","description":"Polkadot-JS Guides for Bounties","sidebar":"docs"},"learn/learn-guides-identity":{"id":"learn/learn-guides-identity","title":"Polkadot-JS Guides about Identity","description":"Polkadot-JS Guides about Identity.","sidebar":"docs"},"learn/learn-guides-ledger":{"id":"learn/learn-guides-ledger","title":"Polkadot-JS Guides for Ledger Devices","description":"Polkadot-JS Guides for Ledger Devices.","sidebar":"docs"},"learn/learn-guides-nominator":{"id":"learn/learn-guides-nominator","title":"Polkadot-JS Guides For Nominators","description":"Polkadot-JS Guides for Nominators.","sidebar":"docs"},"learn/learn-guides-polkadot-opengov":{"id":"learn/learn-guides-polkadot-opengov","title":"Polkadot-JS Guides about OpenGov","description":"Polkadot-JS Guides about Polkadot OpenGov.","sidebar":"docs"},"learn/learn-guides-staking":{"id":"learn/learn-guides-staking","title":"Polkadot-JS Guides about Staking","description":"Polkadot-JS Guides about Staking.","sidebar":"docs"},"learn/learn-guides-staking-pools":{"id":"learn/learn-guides-staking-pools","title":"Polkadot-JS Guides for Pool Creators","description":"Polkadot-JS Guides about Nomination Pools.","sidebar":"docs"},"learn/learn-guides-transfers":{"id":"learn/learn-guides-transfers","title":"Polkadot-JS Guides about Transfers","description":"Polkadot-JS Guides about Balances Transfers.","sidebar":"docs"},"learn/learn-guides-treasury":{"id":"learn/learn-guides-treasury","title":"Polkadot-JS Guides about the Treasury","description":"Polkadot-JS Guides about the Polkadot Treasury.","sidebar":"docs"},"learn/learn-guides-vault":{"id":"learn/learn-guides-vault","title":"Polkadot-JS Guides about the Vault App","description":"Polkadot-JS Guides about Polkadot Vault.","sidebar":"docs"},"learn/learn-hyperbridge":{"id":"learn/learn-hyperbridge","title":"Hyperbridge","description":"Polkadot\'s Bridge to Ethereum.","sidebar":"docs"},"learn/learn-identity":{"id":"learn/learn-identity","title":"Account Identity","description":"On-chain Identity, Judgements and Registrars.","sidebar":"docs"},"learn/learn-implementations":{"id":"learn/learn-implementations","title":"Polkadot Implementations","description":"Learn about the different Polkadot implementations."},"learn/learn-inflation":{"id":"learn/learn-inflation","title":"Token Inflation","description":"Explanation of Token\'s Inflation in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-nft":{"id":"learn/learn-nft","title":"NFTs","description":"The NFT Landscape of the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-nft-pallets":{"id":"learn/learn-nft-pallets","title":"NFT Pallets","description":"Functionalities of the NFT Pallets in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-nft-projects":{"id":"learn/learn-nft-projects","title":"NFT projects on Polkadot and Kusama","description":"NFT Projects in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-nomination-pools":{"id":"learn/learn-nomination-pools","title":"Nomination Pools","description":"Staking through Polkadot\'s Nomination Pools.","sidebar":"docs"},"learn/learn-nominator":{"id":"learn/learn-nominator","title":"Nominator","description":"Role of Nominators in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-parachains":{"id":"learn/learn-parachains","title":"Parachains","description":"An Introduction to Polkadot\'s Parachains.","sidebar":"docs"},"learn/learn-parachains-faq":{"id":"learn/learn-parachains-faq","title":"Parachains FAQ","description":"Parachains FAQ.","sidebar":"docs"},"learn/learn-parachains-protocol":{"id":"learn/learn-parachains-protocol","title":"Parachains\' Protocol Overview","description":"Actors and Protocols involved in Polkadot and its Parachains\' Block Finality.","sidebar":"docs"},"learn/learn-parathreads":{"id":"learn/learn-parathreads","title":"Parathreads","description":"An Introductory Guide to Parathreads.","sidebar":"docs"},"learn/learn-phragmen":{"id":"learn/learn-phragmen","title":"NPoS Election Algorithms","description":"The Election Methods used in Polkadot\'s NPoS Mechanism.","sidebar":"docs"},"learn/learn-polkadot-host":{"id":"learn/learn-polkadot-host","title":"Polkadot Host (PH)","description":"The Polkadot Host and its Components.","sidebar":"docs"},"learn/learn-polkadot-js-guides":{"id":"learn/learn-polkadot-js-guides","title":"Polkadot-JS Guides","description":"Guides about Polkadot-JS.","sidebar":"docs"},"learn/learn-polkadot-opengov":{"id":"learn/learn-polkadot-opengov","title":"Introduction to Polkadot OpenGov","description":"Polkadot\u2019s Latest Model for Decentralized Governance.","sidebar":"docs"},"learn/learn-polkadot-opengov-origins":{"id":"learn/learn-polkadot-opengov-origins","title":"Polkadot OpenGov Origins","description":"All Origins for Polkadot\'s OpenGov.","sidebar":"docs"},"learn/learn-polkadot-opengov-treasury":{"id":"learn/learn-polkadot-opengov-treasury","title":"Treasury","description":"Polkadot\'s On-chain Treasury.","sidebar":"docs"},"learn/learn-polkadot-technical-fellowship":{"id":"learn/learn-polkadot-technical-fellowship","title":"Polkadot Technical Fellowship","description":"Self-governing body of experts and developers of the Polkadot protocol.","sidebar":"docs"},"learn/learn-proxies":{"id":"learn/learn-proxies","title":"Proxy Accounts","description":"Proxy Accounts on Polkadot.","sidebar":"docs"},"learn/learn-proxies-pure":{"id":"learn/learn-proxies-pure","title":"Pure Proxy Accounts","description":"Pure Proxy Accounts on Polkadot.","sidebar":"docs"},"learn/learn-runtime-upgrades":{"id":"learn/learn-runtime-upgrades","title":"Runtime Upgrades","description":"Forkless Runtime Upgrades on Polkadot.","sidebar":"docs"},"learn/learn-sassafras":{"id":"learn/learn-sassafras","title":"Polkadot Block Production: SASSAFRAS","description":"The Consensus Mechanism of Polkadot.","sidebar":"docs"},"learn/learn-spree":{"id":"learn/learn-spree","title":"SPREE","description":"Fundamentals of SPREE.","sidebar":"docs"},"learn/learn-staking":{"id":"learn/learn-staking","title":"Introduction to Staking","description":"Overview of Staking and NPoS on Polkadot.","sidebar":"docs"},"learn/learn-staking-advanced":{"id":"learn/learn-staking-advanced","title":"Advanced Staking Concepts","description":"Advanced Concepts about Staking on Polkadot.","sidebar":"docs"},"learn/learn-system-chains":{"id":"learn/learn-system-chains","title":"System Parachains","description":"System Parachains currently deployed on Polkadot.","sidebar":"docs"},"learn/learn-teleport":{"id":"learn/learn-teleport","title":"Teleporting Assets","description":"Teleport Assets between Parachains and Relay Chain.","sidebar":"docs"},"learn/learn-transaction-fees":{"id":"learn/learn-transaction-fees","title":"Transaction Fees","description":"How Transaction Fees are Calculated and Handled.","sidebar":"docs"},"learn/learn-transactions":{"id":"learn/learn-transactions","title":"Types of Transactions (a.k.a. Extrinsics)","description":"Types of Transactions on Polkadot.","sidebar":"docs"},"learn/learn-validator":{"id":"learn/learn-validator","title":"Validator","description":"Role of Validators within the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-video-tutorials":{"id":"learn/learn-video-tutorials","title":"Videos about Polkadot","description":"Videos about Polkadot and Related Topics.","sidebar":"docs"},"learn/learn-wasm":{"id":"learn/learn-wasm","title":"WebAssembly (Wasm)","description":"WASM and its Role in Polkadot\'s Runtime.","sidebar":"docs"},"learn/learn-xcm":{"id":"learn/learn-xcm","title":"Introduction to Cross-Consensus Message Format (XCM)","description":"XCM, The Messaging Format at the Forefront of Interoperability.","sidebar":"docs"},"learn/learn-xcm-instructions":{"id":"learn/learn-xcm-instructions","title":"XCM Instructions & Register Specification","description":"Specification for Instructions and Registers for the XCM Format.","sidebar":"docs"},"learn/learn-xcm-pallet":{"id":"learn/learn-xcm-pallet","title":"XCM FRAME Pallet Overview","description":"Mechanics of the XCM Pallet and its role in Polkadot\'s Ecosystem.","sidebar":"docs"},"learn/learn-xcm-transport":{"id":"learn/learn-xcm-transport","title":"XCM Transport Methods (XCMP, HRMP, VMP)","description":"Methods to send XCM Messages across Networks.","sidebar":"docs"},"learn/learn-xcm-usecases":{"id":"learn/learn-xcm-usecases","title":"XCM Use-cases & Examples","description":"Cross-consensus Interactions and the XCM Format.","sidebar":"docs"},"learn/learn-xcvm":{"id":"learn/learn-xcvm","title":"XCM Virtual Machine (XCVM) & XCM Executor","description":"Design of the XCM Executor and Mechanics of the XCM Virtual Machine.","sidebar":"docs"},"learn/xcm/executor_config/learn-xcm-docs-config-deep-dive":{"id":"learn/xcm/executor_config/learn-xcm-docs-config-deep-dive","title":"Executor Configuration","description":"Deep Dive into the Configuration of the XCM-Executor.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-fees":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-fees","title":"Weight and Fees","description":"Weight and Fees in XCM.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-multiasset":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-multiasset","title":"MultiAsset","description":"The MultiAsset Datatype.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-summary":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-summary","title":"Fundamentals","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-xcvm":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-xcvm","title":"XCVM","description":"Deep Dive into XCVM.","sidebar":"docs"},"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-example":{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-example","title":"Example","description":"A MultiLocation Example.","sidebar":"docs"},"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-junctions":{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-junctions","title":"Junction(s)","description":"The Junction Type in a MultiLocation Struct.","sidebar":"docs"},"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-summary":{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-summary","title":"MultiLocation","description":"Learn about XCM fundamentals.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-assets":{"id":"learn/xcm/journey/learn-xcm-docs-journey-assets","title":"Trap and Claim Assets","description":"Instructions to Trap and Claim Assets.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-channels":{"id":"learn/xcm/journey/learn-xcm-docs-journey-channels","title":"Channels and Bridges","description":"Establishment of HRMP Channels between Parachains.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-expectations":{"id":"learn/xcm/journey/learn-xcm-docs-journey-expectations","title":"Expectations","description":"Expect Instructions to Check if a Condition is Valid.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-fees":{"id":"learn/xcm/journey/learn-xcm-docs-journey-fees","title":"Fee Handling","description":"How Fees for XCM Transfers are Handled.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-holding":{"id":"learn/xcm/journey/learn-xcm-docs-journey-holding","title":"More Holding Modifiers","description":"More Instructions to Alter the Holding Register.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-origin":{"id":"learn/xcm/journey/learn-xcm-docs-journey-origin","title":"Origin Manipulation","description":"Manipulating the Origin of XCM.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-queries":{"id":"learn/xcm/journey/learn-xcm-docs-journey-queries","title":"Queries","description":"Query Information from another Consensus System.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-register":{"id":"learn/xcm/journey/learn-xcm-docs-journey-register","title":"Register Modifiers","description":"More Instructions to Change the XCVM Registers.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-summary":{"id":"learn/xcm/journey/learn-xcm-docs-journey-summary","title":"A Journey through XCM","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-transact":{"id":"learn/xcm/journey/learn-xcm-docs-journey-transact","title":"Transact","description":"The Transact Instruction to Execute XCM Calls.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-version":{"id":"learn/xcm/journey/learn-xcm-docs-journey-version","title":"Version Subscription","description":"Get Notified about XCM Version Updates.","sidebar":"docs"},"learn/xcm/journey/locks/learn-xcm-docs-journey-locks":{"id":"learn/xcm/journey/locks/learn-xcm-docs-journey-locks","title":"Locks","description":"Restrict Transfer or Withdrawal of Assets.","sidebar":"docs"},"learn/xcm/journey/transfers/learn-xcm-docs-transfers-reserve":{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-reserve","title":"Reserve-backed Transfers","description":"Reserve-backed Transfers: Third-party Reserve to store Assets.","sidebar":"docs"},"learn/xcm/journey/transfers/learn-xcm-docs-transfers-summary":{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-summary","title":"Transfers","description":"Summary about XCM Transfers.","sidebar":"docs"},"learn/xcm/journey/transfers/learn-xcm-docs-transfers-teleport":{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-teleport","title":"Asset Teleportation","description":"Teleportation: Sending Assets Across Chains.","sidebar":"docs"},"learn/xcm/learn-xcm-docs-intro":{"id":"learn/xcm/learn-xcm-docs-intro","title":"XCM: Cross-Consensus Messaging","description":"Introduction to the XCM Documentation.","sidebar":"docs"},"learn/xcm/learn-xcm-docs-testing":{"id":"learn/xcm/learn-xcm-docs-testing","title":"Testing","description":"Testing XCM-powered Solutions.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-architecture":{"id":"learn/xcm/overview/learn-xcm-docs-overview-architecture","title":"The XCM Architecture","description":"The XCM Architecture.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-format":{"id":"learn/xcm/overview/learn-xcm-docs-overview-format","title":"XCM is a Format, not a Protocol","description":"XCM is a Format, not a Protocol.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-intro":{"id":"learn/xcm/overview/learn-xcm-docs-overview-intro","title":"Introduction","description":"An Introduction to XCM.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-summary":{"id":"learn/xcm/overview/learn-xcm-docs-overview-summary","title":"XCM: Cross-Consensus Messaging","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-xcvm":{"id":"learn/xcm/overview/learn-xcm-docs-overview-xcvm","title":"The XCVM","description":"The Cross-Consensus Virtual Machine.","sidebar":"docs"},"learn/xcm/quickstart/learn-xcm-docs-quickstart-first-look":{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-first-look","title":"First Look at an XCM","description":"First Look at an XCM.","sidebar":"docs"},"learn/xcm/quickstart/learn-xcm-docs-quickstart-simulator":{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-simulator","title":"XCM Simulator","description":"Test XCM using a Simulated Environment.","sidebar":"docs"},"learn/xcm/quickstart/learn-xcm-docs-quickstart-summary":{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-summary","title":"Quickstart","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/reference/learn-xcm-docs-reference-glossary":{"id":"learn/xcm/reference/learn-xcm-docs-reference-glossary","title":"Glossary","description":"Glossary.","sidebar":"docs"},"learn/xcm/reference/learn-xcm-docs-reference-xcvm-registers":{"id":"learn/xcm/reference/learn-xcm-docs-reference-xcvm-registers","title":"All XCVM Registers","description":"All XCVM Registers.","sidebar":"docs"},"maintain/archive/maintain-guides-democracy":{"id":"maintain/archive/maintain-guides-democracy","title":"Participate in Democracy","description":"Steps on how to participate in democracy.","sidebar":"docs"},"maintain/archive/maintain-guides-how-to-join-council":{"id":"maintain/archive/maintain-guides-how-to-join-council","title":"Join the Council","description":"Steps on how to join the official on-chain council.","sidebar":"docs"},"maintain/archive/maintain-guides-how-to-vote-councillor":{"id":"maintain/archive/maintain-guides-how-to-vote-councillor","title":"Voting for Councillors","description":"Steps on how to vote for councillors.","sidebar":"docs"},"maintain/doc-maintain-guides-validator-community":{"id":"maintain/doc-maintain-guides-validator-community","title":"Validator Community Overview","description":"An extensive guide to help you start and build a validator community.","sidebar":"docs"},"maintain/kusama/maintain-guides-how-to-validate-kusama":{"id":"maintain/kusama/maintain-guides-how-to-validate-kusama","title":"Run a Validator (Kusama)","description":"The fundamentals for running a Kusama validator."},"maintain/kusama/maintain-guides-society-kusama":{"id":"maintain/kusama/maintain-guides-society-kusama","title":"Kappa Sigma Mu","description":"Learn about the Kappa Sigma Mu society and join as a member."},"maintain/maintain-archive":{"id":"maintain/maintain-archive","title":"Maintain Archive","description":"Archive for the Maintain Section.","sidebar":"docs"},"maintain/maintain-bootnode":{"id":"maintain/maintain-bootnode","title":"Set up a Boot Node","description":"Steps on setting up a boot node.","sidebar":"docs"},"maintain/maintain-endpoints":{"id":"maintain/maintain-endpoints","title":"Node Endpoints","description":"List of node endpoints and examples of use.","sidebar":"docs"},"maintain/maintain-errors":{"id":"maintain/maintain-errors","title":"Errors and How to Resolve Them","description":"Common errors you might encounter and how they can be resolved.","sidebar":"docs"},"maintain/maintain-guides-async-backing":{"id":"maintain/maintain-guides-async-backing","title":"Upgrade Parachain for Asynchronous Backing Compatibility","description":"Steps on how to upgrade a parachain to be compatible with the relay chain\'s async backing feature.","sidebar":"docs"},"maintain/maintain-guides-avoid-slashing":{"id":"maintain/maintain-guides-avoid-slashing","title":"Validator Best Practices","description":"Best practices to avoid slashing.","sidebar":"docs"},"maintain/maintain-guides-how-to-chill":{"id":"maintain/maintain-guides-how-to-chill","title":"How to Chill","description":"Steps on chilling as a network participant.","sidebar":"docs"},"maintain/maintain-guides-how-to-monitor-your-node":{"id":"maintain/maintain-guides-how-to-monitor-your-node","title":"Monitor your node","description":"This guide will walk you through how to set up Prometheus with","sidebar":"docs"},"maintain/maintain-guides-how-to-stop-validating":{"id":"maintain/maintain-guides-how-to-stop-validating","title":"How to Stop Validating","description":"Steps on how to stop validating.","sidebar":"docs"},"maintain/maintain-guides-how-to-systemd":{"id":"maintain/maintain-guides-how-to-systemd","title":"Using systemd for a Validator Node","description":"Using a service manager for your validator node.","sidebar":"docs"},"maintain/maintain-guides-how-to-upgrade":{"id":"maintain/maintain-guides-how-to-upgrade","title":"How to Upgrade Your Validator","description":"Validators perform critical functions for the network, and as such, have strict uptime requirements.","sidebar":"docs"},"maintain/maintain-guides-how-to-validate-polkadot":{"id":"maintain/maintain-guides-how-to-validate-polkadot","title":"Run a Validator (Polkadot)","description":"The fundamentals for running a Polkadot validator.","sidebar":"docs"},"maintain/maintain-guides-secure-validator":{"id":"maintain/maintain-guides-secure-validator","title":"Secure Validator","description":"Tips for running a secure validator.","sidebar":"docs"},"maintain/maintain-guides-validator-payout":{"id":"maintain/maintain-guides-validator-payout","title":"Validator Payout Overview","description":"How validator payout works on the network and what you should expect.","sidebar":"docs"},"maintain/maintain-index":{"id":"maintain/maintain-index","title":"Network Maintainers","description":"Reference point for network maintenance guides.","sidebar":"docs"},"maintain/maintain-networks":{"id":"maintain/maintain-networks","title":"Networks","description":"Information about the different networks of the Polkadot ecosystem.","sidebar":"docs"},"maintain/maintain-polkadot-parameters":{"id":"maintain/maintain-polkadot-parameters","title":"Polkadot Parameters","description":"A description about fundamental Polkadot parameters.","sidebar":"docs"},"maintain/maintain-rpc":{"id":"maintain/maintain-rpc","title":"Set up a RPC node","description":"Steps on setting up a RPC node.","sidebar":"docs"},"maintain/maintain-sync":{"id":"maintain/maintain-sync","title":"Set up a Full Node","description":"Steps on how to set up a full node.","sidebar":"docs"},"maintain/maintain-wss":{"id":"maintain/maintain-wss","title":"Secure the WebSocket","description":"Steps on setting up a secure socket for remote connections.","sidebar":"docs"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.36e87c6d.js b/assets/js/935f2afb.36e87c6d.js deleted file mode 100644 index f0b4905fc0a7..000000000000 --- a/assets/js/935f2afb.36e87c6d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[53],{22624:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"category","label":"Explore","description":"Wallets and Apps in the Polkadot Ecosystem.","items":[{"type":"link","label":"Getting Started","href":"/docs/getting-started","docId":"general/getting-started"},{"type":"category","label":"Wallets","description":"Beginner friendly wallets with advanced features.","items":[{"type":"link","label":"Wallets and Extensions","href":"/docs/wallets-and-extensions","docId":"general/wallets-and-extensions"},{"type":"link","label":"Ledger","href":"/docs/ledger","docId":"general/ledger"},{"type":"link","label":"Polkadot Vault","href":"/docs/polkadot-vault","docId":"general/polkadot-vault"}],"collapsed":true,"collapsible":true,"href":"/docs/wallets-index"},{"type":"category","label":"Apps","description":"Apps for Staking, Governance, Multisigs, NFTs and many more use cases.","items":[{"type":"link","label":"Polkadot Ecosystem Apps","description":"Apps listed on official Polkadot website.","href":"https://polkadot.network/ecosystem/dapps/"},{"type":"link","label":"DotAppStore","description":"Apps upvoted by the community.","href":"https://dotappstore.com/"},{"type":"link","label":"Staking Apps","href":"/docs/staking-apps","docId":"general/staking-apps"},{"type":"link","label":"Governance Apps","href":"/docs/governance-apps","docId":"general/governance-apps"},{"type":"link","label":"Multisig Apps","href":"/docs/multisig-apps","docId":"general/multisig-apps"},{"type":"link","label":"NFT Projects","href":"/docs/learn-nft-projects","docId":"learn/learn-nft-projects"},{"type":"link","label":"Parachain Apps","href":"/docs/parachains-apps","docId":"general/parachains-apps"}],"collapsed":true,"collapsible":true,"href":"/docs/apps-index"},{"type":"category","label":"Dashboards","description":"Dashboards in the Polkadot Ecosystem.","items":[{"type":"link","label":"Staking Dashboard","href":"/docs/staking-dashboard","docId":"general/staking-dashboard"}],"collapsed":true,"collapsible":true,"href":"/docs/dashboards-index"},{"type":"category","label":"Community & Contributors","description":"Polkadot Community and Wiki Contributors.","items":[{"type":"link","label":"Community","href":"/docs/community","docId":"general/community"},{"type":"link","label":"Contributing to the Wiki","href":"/docs/contributing","docId":"general/contributing"},{"type":"link","label":"Contributors","href":"/docs/contributors","docId":"general/contributors"}],"collapsed":true,"collapsible":true,"href":"/docs/community-index"},{"type":"category","label":"Programs","description":"Programs for Grants, Bounties, Ambassadors and many more inititatives.","items":[{"type":"link","label":"Decentralized Futures","href":"/docs/decentralized-futures","docId":"general/decentralized-futures"},{"type":"link","label":"Decentralized Voices","href":"/docs/decentralized-voices","docId":"general/decentralized-voices"},{"type":"link","label":"Grants","href":"/docs/grants","docId":"general/grants"},{"type":"link","label":"Bug Bounty","href":"/docs/bug-bounty","docId":"general/bug-bounty"},{"type":"link","label":"Polkadot Ambassadors","href":"/docs/ambassadors","docId":"general/ambassadors"},{"type":"link","label":"Alpha Program","href":"/docs/alpha-program","docId":"general/alpha-program"},{"type":"link","label":"Thousand Validators","href":"/docs/thousand-validators","docId":"general/doc-thousand-validators"},{"type":"link","label":"Thousand Contributors","href":"/docs/thousand-contributors","docId":"general/doc-thousand-contributors"},{"type":"link","label":"Developer Heroes","href":"/docs/dev-heroes","docId":"general/dev-heroes"}],"collapsed":true,"collapsible":true,"href":"/docs/programs-index"},{"type":"link","label":"Metadata Explorer","href":"/docs/metadata","docId":"general/metadata"}],"collapsed":true,"collapsible":true,"href":"/docs/explore-index"},{"type":"category","label":"Learn","items":[{"type":"category","label":"General","description":"General Information to get started with Polkadot and Web3.","items":[{"type":"link","label":"Web3 and Polkadot","href":"/docs/web3-and-polkadot","docId":"general/web3-and-polkadot"},{"type":"category","label":"Polkadot Vision","description":"Polkadot\'s Vision revealed by Gavin Wood at Decoded 2023.","items":[{"type":"link","label":"Polkadot 1.0","href":"/docs/polkadot-v1","docId":"general/polkadot-v1"},{"type":"link","label":"Polkadot Direction","href":"/docs/polkadot-direction","docId":"general/polkadot-direction"}],"collapsed":true,"collapsible":true,"href":"/docs/polkadot-vision-index"},{"type":"category","label":"Stay Safe","description":"Good-practices to Stay Safe while Surfing in Web3.","items":[{"type":"link","label":"Do Your Own Research","href":"/docs/how-to-dyor","docId":"general/how-to-dyor"},{"type":"link","label":"Scam Protection","href":"/docs/learn-scams","docId":"general/scams"},{"type":"link","label":"Transaction Verification","href":"/docs/transaction-attacks","docId":"general/transaction-attacks"}],"collapsed":true,"collapsible":true,"href":"/docs/stay-safe-index"},{"type":"link","label":"Build on Polkadot","href":"/docs/start-building","docId":"general/start-building"},{"type":"link","label":"Research Pages","href":"/docs/research","docId":"general/research"},{"type":"link","label":"FAQ","href":"/docs/faq","docId":"general/faq"},{"type":"link","label":"Glossary","href":"/docs/glossary","docId":"general/glossary"}],"collapsed":true,"collapsible":true,"href":"/docs/general-index"},{"type":"category","label":"Basics","description":"Staking, Accounts, Transactions, Tokens and NFTs, and Governance.","items":[{"type":"category","label":"Accounts","description":"Basic Accounts, Identity, Multi-signature, and Proxies.","items":[{"type":"link","label":"Account Abstraction","href":"/docs/learn-account-abstraction","docId":"learn/learn-account-abstraction"},{"type":"link","label":"Account Identity","href":"/docs/learn-identity","docId":"learn/learn-identity"},{"type":"link","label":"Multi-Signature Accounts","href":"/docs/learn-account-multisig","docId":"learn/learn-account-multisig"},{"type":"link","label":"Proxy Accounts","href":"/docs/learn-proxies","docId":"learn/learn-proxies"},{"type":"link","label":"Pure Proxy Accounts","href":"/docs/learn-proxies-pure","docId":"learn/learn-proxies-pure"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-accounts"},{"type":"category","label":"Transactions","description":"Extrinsics, Balance Transfers, and Fees.","items":[{"type":"link","label":"Transaction Fees","href":"/docs/learn-transaction-fees","docId":"learn/learn-transaction-fees"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-transactions"},{"type":"category","label":"Staking","description":"Mechanics of Staking.","items":[{"type":"link","label":"Introduction to Staking","href":"/docs/learn-staking","docId":"learn/learn-staking"},{"type":"link","label":"Nomination Pools","href":"/docs/learn-nomination-pools","docId":"learn/learn-nomination-pools"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-staking-index"},{"type":"category","label":"Polkadot OpenGov","description":"Everything about Polkadot OpenGov.","items":[{"type":"link","label":"Polkadot OpenGov","href":"/docs/learn-polkadot-opengov","docId":"learn/learn-polkadot-opengov"},{"type":"link","label":"OpenGov Origins","href":"/docs/learn-polkadot-opengov-origins","docId":"learn/learn-polkadot-opengov-origins"},{"type":"link","label":"Technical Fellowship","href":"/docs/learn-polkadot-technical-fellowship","docId":"learn/learn-polkadot-technical-fellowship"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-polkadot-opengov-index"},{"type":"link","label":"Treasury","href":"/docs/learn-polkadot-opengov-treasury","docId":"learn/learn-polkadot-opengov-treasury"},{"type":"category","label":"Tokens and Assets","description":"DOT Token, Asset Hub, and Teleports.","items":[{"type":"link","label":"Asset Hub","href":"/docs/learn-assets","docId":"learn/learn-assets"},{"type":"link","label":"DOT","href":"/docs/learn-DOT","docId":"learn/learn-DOT"},{"type":"link","label":"Token Inflation","href":"/docs/learn-inflation","docId":"learn/learn-inflation"},{"type":"link","label":"Teleporting Assets","href":"/docs/learn-teleport","docId":"learn/learn-teleport"},{"type":"link","label":"Introduction to NFTs","href":"/docs/learn-nft","docId":"learn/learn-nft"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-assets-index"},{"type":"category","label":"Components","description":"OpenGov, Treasury, WASM, Runtime Upgrades, and more.","items":[{"type":"link","label":"Polkadot Host","href":"/docs/learn-polkadot-host","docId":"learn/learn-polkadot-host"},{"type":"link","label":"WebAssembly (Wasm)","href":"/docs/learn-wasm","docId":"learn/learn-wasm"},{"type":"link","label":"Runtime Upgrades","href":"/docs/learn-runtime-upgrades","docId":"learn/learn-runtime-upgrades"},{"type":"link","label":"Consensus","href":"/docs/learn-consensus","docId":"learn/learn-consensus"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-components-index"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-basics-index"},{"type":"category","label":"Advanced","description":"Advanced Concepts & Guides about Accounts, Staking, and NFTs.","items":[{"type":"category","label":"Polkadot-JS","description":"Overview of Polkadot-JS.","items":[{"type":"link","label":"Polkadot-JS Tooling","href":"/docs/polkadotjs","docId":"general/polkadotjs"},{"type":"link","label":"Polkadot-JS UI","href":"/docs/polkadotjs-ui","docId":"general/polkadotjs-ui"},{"type":"category","label":"Polkadot-JS Guides","description":"Polkadot-JS Guides about Staking, Asset Hub, Vault App, and more.","items":[{"type":"category","label":"Account Guides","description":"Polkadot-JS Guides about Accounts.","items":[{"type":"link","label":"Multisig Guides","href":"/docs/learn-guides-accounts-multisig","docId":"learn/learn-guides-accounts-multisig"},{"type":"link","label":"Proxy Guides","href":"/docs/learn-guides-accounts-proxy","docId":"learn/learn-guides-accounts-proxy"},{"type":"link","label":"Pure Proxy Guides","href":"/docs/learn-guides-accounts-proxy-pure","docId":"learn/learn-guides-accounts-proxy-pure"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-guides-accounts"},{"type":"link","label":"Transfer Guides","href":"/docs/learn-guides-transfers","docId":"learn/learn-guides-transfers"},{"type":"category","label":"Staking Guides","description":"Polkadot-JS Guides about Staking.","items":[{"type":"link","label":"Nominator Guides","href":"/docs/learn-guides-staking","docId":"learn/learn-guides-staking"},{"type":"link","label":"Nomination Pool Guides","href":"/docs/learn-guides-staking-pools","docId":"learn/learn-guides-staking-pools"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-guides-staking-index"},{"type":"link","label":"OpenGov Guides","href":"/docs/learn-guides-polkadot-opengov","docId":"learn/learn-guides-polkadot-opengov"},{"type":"link","label":"Treasury Guides","href":"/docs/learn-guides-treasury","docId":"learn/learn-guides-treasury"},{"type":"link","label":"Bounty Guides","href":"/docs/learn-guides-bounties","docId":"learn/learn-guides-bounties"},{"type":"link","label":"Identity Guides","href":"/docs/learn-guides-identity","docId":"learn/learn-guides-identity"},{"type":"link","label":"Ledger Guides","href":"/docs/learn-guides-ledger","docId":"learn/learn-guides-ledger"},{"type":"link","label":"Polkadot Vault Guides","href":"/docs/learn-guides-vault","docId":"learn/learn-guides-vault"},{"type":"category","label":"Asset Hub Guides","description":"Polkadot-JS Guides about the Asset Hub.","items":[{"type":"link","label":"Asset Guides","href":"/docs/learn-guides-assets-create","docId":"learn/learn-guides-assets-create"},{"type":"link","label":"Asset Hub Ledger Guides","href":"/docs/learn-guides-assets-ledger","docId":"learn/learn-guides-assets-ledger"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-guides-assets-index"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-polkadot-js-guides"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-polkadotjs-index"},{"type":"category","label":"Architecture","description":"Nominators, Validators, Collators, Parachains, and more.","items":[{"type":"link","label":"Architecture","href":"/docs/learn-architecture","docId":"learn/learn-architecture"},{"type":"category","label":"Network Participants","description":"Participants in the Polkadot Ecosystem.","items":[{"type":"link","label":"Collator","href":"/docs/learn-collator","docId":"learn/learn-collator"},{"type":"link","label":"Nominator","href":"/docs/learn-nominator","docId":"learn/learn-nominator"},{"type":"link","label":"Validator","href":"/docs/learn-validator","docId":"learn/learn-validator"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-participants-index"},{"type":"category","label":"Parachains","description":"Parachains\' Protocol, Auctions, Crowdloans, and more.","items":[{"type":"link","label":"Introduction to Parachains","href":"/docs/learn-parachains","docId":"learn/learn-parachains"},{"type":"link","label":"Protocol Overview","href":"/docs/learn-parachains-protocol","docId":"learn/learn-parachains-protocol"},{"type":"link","label":"System Parachains","href":"/docs/learn-system-chains","docId":"learn/learn-system-chains"},{"type":"link","label":"Parachain Slot Auctions","href":"/docs/learn-auction","docId":"learn/learn-auction"},{"type":"link","label":"Parachain Crowdloans","href":"/docs/learn-crowdloans","docId":"learn/learn-crowdloans"},{"type":"link","label":"Parachains FAQ","href":"/docs/learn-parachains-faq","docId":"learn/learn-parachains-faq"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-parachains-index"},{"type":"link","label":"Bridges","href":"/docs/learn-bridges","docId":"learn/learn-bridges"},{"type":"category","label":"Cross Consensus Messaging (XCM)","description":"Polkadot\'s Cross-Consensus Messaging Format (XCM).","items":[{"type":"link","label":"Cross-Consensus Message Format (XCM)","href":"/docs/learn-xcm","docId":"learn/learn-xcm"},{"type":"link","label":"XCM Pallet","href":"/docs/learn-xcm-pallet","docId":"learn/learn-xcm-pallet"},{"type":"link","label":"XCM Use-cases","href":"/docs/learn-xcm-usecases","docId":"learn/learn-xcm-usecases"},{"type":"link","label":"XCM Transport","href":"/docs/learn-xcm-transport","docId":"learn/learn-xcm-transport"},{"type":"link","label":"XCM Virtual Machine (XCVM)","href":"/docs/learn-xcvm","docId":"learn/learn-xcvm"},{"type":"link","label":"XCM Instructions","href":"/docs/learn-xcm-instructions","docId":"learn/learn-xcm-instructions"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-xcm-index"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-architecture-index"},{"type":"link","label":"Accounts","href":"/docs/learn-account-advanced","docId":"learn/learn-account-advanced"},{"type":"link","label":"Advanced Staking Concepts","href":"/docs/learn-staking-advanced","docId":"learn/learn-staking-advanced"},{"type":"link","label":"NFT Pallets","href":"/docs/learn-nft-pallets","docId":"learn/learn-nft-pallets"},{"type":"link","label":"Cryptography","href":"/docs/learn-cryptography","docId":"learn/learn-cryptography"},{"type":"link","label":"NPoS Election Algorithms","href":"/docs/learn-phragmen","docId":"learn/learn-phragmen"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-advanced-index"},{"type":"category","label":"XCM Docs","description":"In-depth documentation about the Polkadot\'s Cross-Chain Messaging (XCM).","items":[{"type":"link","label":"XCM: Cross-Consensus Messaging","href":"/docs/learn/xcm/introduction","docId":"learn/xcm/learn-xcm-docs-intro"},{"type":"category","label":"Overview","description":"Overview of the XCM Documentation.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/overview-summary","docId":"learn/xcm/overview/learn-xcm-docs-overview-summary"},{"type":"link","label":"Introduction","href":"/docs/learn/xcm/overview-intro","docId":"learn/xcm/overview/learn-xcm-docs-overview-intro"},{"type":"link","label":"A Format, not a Protocol","href":"/docs/learn/xcm/overview-format","docId":"learn/xcm/overview/learn-xcm-docs-overview-format"},{"type":"link","label":"The XCVM","href":"/docs/learn/xcm/overview-xcvm","docId":"learn/xcm/overview/learn-xcm-docs-overview-xcvm"},{"type":"link","label":"Architecture","href":"/docs/learn/xcm/overview-architecture","docId":"learn/xcm/overview/learn-xcm-docs-overview-architecture"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/overview"},{"type":"category","label":"Quickstart","description":"Start Diving into XCM.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/quickstart-summary","docId":"learn/xcm/quickstart/learn-xcm-docs-quickstart-summary"},{"type":"link","label":"XCM Simulator","href":"/docs/learn/xcm/quickstart-simulator","docId":"learn/xcm/quickstart/learn-xcm-docs-quickstart-simulator"},{"type":"link","label":"First Look at an XCM","href":"/docs/learn/xcm/quickstart-first-look","docId":"learn/xcm/quickstart/learn-xcm-docs-quickstart-first-look"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/quickstart"},{"type":"category","label":"Fundamentals","description":"Fundamental Concepts about XCM.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/fundamentals-summary","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-summary"},{"type":"category","label":"MultiLocation","description":"The MultiLocation Type.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/fundamentals/multilocation-summary","docId":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-summary"},{"type":"link","label":"Junction(s)","href":"/docs/learn/xcm/fundamentals/multilocation-junctions","docId":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-junctions"},{"type":"link","label":"Example","href":"/docs/learn/xcm/fundamentals/multilocation-example","docId":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-example"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/fundamentals/multilocation"},{"type":"link","label":"MultiAsset","href":"/docs/learn/xcm/fundamentals-multiasset","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-multiasset"},{"type":"link","label":"XCVM","href":"/docs/learn/xcm/fundamentals-xcvm","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-xcvm"},{"type":"link","label":"Weight and Fees","href":"/docs/learn/xcm/fundamentals-fees","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-fees"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/fundamentals"},{"type":"category","label":"A Journey through XCM","description":"A Practical Introduction to the XCM Features","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/journey-summary","docId":"learn/xcm/journey/learn-xcm-docs-journey-summary"},{"type":"category","label":"Transfers","description":"Transferring Assets between Consensus Systems with XCM.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/journey/transfers-summary","docId":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-summary"},{"type":"link","label":"Asset Teleportation","href":"/docs/learn/xcm/journey/transfers-teleport","docId":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-teleport"},{"type":"link","label":"Reserve-backed Transfers","href":"/docs/learn/xcm/journey/transfers-reserve","docId":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-reserve"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/journey/transfers"},{"type":"link","label":"Fee Handling","href":"/docs/learn/xcm/journey-fees","docId":"learn/xcm/journey/learn-xcm-docs-journey-fees"},{"type":"link","label":"Transact: A General Solution","href":"/docs/learn/xcm/journey-transact","docId":"learn/xcm/journey/learn-xcm-docs-journey-transact"},{"type":"link","label":"Origin Manipulation","href":"/docs/learn/xcm/journey-origin","docId":"learn/xcm/journey/learn-xcm-docs-journey-origin"},{"type":"link","label":"More Register Modifiers","href":"/docs/learn/xcm/journey-register","docId":"learn/xcm/journey/learn-xcm-docs-journey-register"},{"type":"link","label":"More Holding Modifiers","href":"/docs/learn/xcm/journey-holding","docId":"learn/xcm/journey/learn-xcm-docs-journey-holding"},{"type":"link","label":"Trap and Claim Assets","href":"/docs/learn/xcm/journey-assets","docId":"learn/xcm/journey/learn-xcm-docs-journey-assets"},{"type":"link","label":"Expectations","href":"/docs/learn/xcm/journey-expectations","docId":"learn/xcm/journey/learn-xcm-docs-journey-expectations"},{"type":"link","label":"Queries","href":"/docs/learn/xcm/journey-queries","docId":"learn/xcm/journey/learn-xcm-docs-journey-queries"},{"type":"link","label":"Version Subscription","href":"/docs/learn/xcm/journey-version","docId":"learn/xcm/journey/learn-xcm-docs-journey-version"},{"type":"link","label":"Locks","href":"/docs/learn/xcm/journey-locks","docId":"learn/xcm/journey/locks/learn-xcm-docs-journey-locks"},{"type":"link","label":"Channels and Bridges","href":"/docs/learn/xcm/journey-channels","docId":"learn/xcm/journey/learn-xcm-docs-journey-channels"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/journey"},{"type":"link","label":"Executor Configuration","href":"/docs/learn/xcm/config-deep-dive","docId":"learn/xcm/executor_config/learn-xcm-docs-config-deep-dive"},{"type":"link","label":"Testing","href":"/docs/learn/xcm/testing","docId":"learn/xcm/learn-xcm-docs-testing"},{"type":"category","label":"References","description":"XCVM Registers and Glossary","items":[{"type":"link","label":"All XCVM Registers","href":"/docs/learn/xcm/reference-xcvm-registers","docId":"learn/xcm/reference/learn-xcm-docs-reference-xcvm-registers"},{"type":"link","label":"Glossary","href":"/docs/learn/xcm/reference-glossary","docId":"learn/xcm/reference/learn-xcm-docs-reference-glossary"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/references"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm"},{"type":"category","label":"Polkadot Comparisons","description":"Comparison between Polkadot and other Networks. ","items":[{"type":"link","label":"Kusama","href":"/docs/learn-comparisons-kusama","docId":"learn/learn-comparisons-kusama"},{"type":"link","label":"Ethereum","href":"/docs/learn-comparisons-ethereum-2","docId":"learn/learn-comparisons-ethereum-2"},{"type":"link","label":"Cosmos","href":"/docs/learn-comparisons-cosmos","docId":"learn/learn-comparisons-cosmos"},{"type":"link","label":"Avalanche","href":"/docs/learn-comparisons-avalanche","docId":"learn/learn-comparisons-avalanche"},{"type":"link","label":"Other Comparisons","href":"/docs/learn-comparisons","docId":"learn/learn-comparisons"},{"type":"link","label":"Layer Two and Rollups","href":"/docs/learn-comparisons-rollups","docId":"learn/learn-comparisons-rollups"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-comparisons-index"},{"type":"link","label":"Videos","href":"/docs/learn-video-tutorials","docId":"learn/learn-video-tutorials"},{"type":"category","label":"Future Implementations","description":"Implementations that will be deployed on Polkadot.","items":[{"type":"link","label":"SPREE","href":"/docs/learn-spree","docId":"learn/learn-spree"},{"type":"link","label":"Parathreads","href":"/docs/learn-parathreads","docId":"learn/learn-parathreads"},{"type":"link","label":"Asynchronous Backing","href":"/docs/learn-async-backing","docId":"learn/learn-async-backing"},{"type":"link","label":"SASSAFRAS","href":"/docs/learn-sassafras","docId":"learn/learn-sassafras"},{"type":"link","label":"Hyperbridge","href":"/docs/learn-hyperbridge","docId":"learn/learn-hyperbridge"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-future-implementations-index"},{"type":"category","label":"Archive","description":"Implementations no longer live on Polkadot.","items":[{"type":"link","label":"Governance V1","href":"/docs/learn/learn-governance","docId":"learn/archive/learn-governance"},{"type":"link","label":"Gov1 Treasury","href":"/docs/learn/learn-treasury","docId":"learn/archive/learn-treasury"},{"type":"link","label":"Polkadot Launch Phases","href":"/docs/learn/learn-launch","docId":"learn/archive/learn-launch"},{"type":"link","label":"Redenomination of DOT","href":"/docs/learn/learn-redenomination","docId":"learn/archive/learn-redenomination"},{"type":"link","label":"Controller Accounts","href":"/docs/learn/learn-controller","docId":"learn/archive/learn-controller"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-archive"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-index"},{"type":"category","label":"Build","items":[{"type":"category","label":"Client-side Development","items":[{"type":"link","label":"Building dApps","href":"/docs/build-dapp","docId":"build/build-dapp"},{"type":"link","label":"Oracles","href":"/docs/build-oracle","docId":"build/build-oracle"},{"type":"link","label":"Using Light Clients","href":"/docs/build-light-clients","docId":"build/build-light-clients"},{"type":"link","label":"Decentralized Storage","href":"/docs/build-storage","docId":"build/build-storage"},{"type":"link","label":"Transaction Construction","href":"/docs/build-transaction-construction","docId":"build/build-transaction-construction"},{"type":"link","label":"Node Interaction","href":"/docs/build-node-interaction","docId":"build/build-node-interaction"}],"collapsed":true,"collapsible":true,"href":"/docs/build-client-index"},{"type":"link","label":"Smart Contracts","href":"/docs/build-smart-contracts","docId":"build/build-smart-contracts"},{"type":"category","label":"Protocol Development","items":[{"type":"link","label":"Polkadot Protocol","href":"/docs/build-protocol-info","docId":"build/build-protocol-info"},{"type":"link","label":"Parachain Development","href":"/docs/build-pdk","docId":"build/build-parachains"},{"type":"link","label":"Integrating Assets","href":"/docs/build-integrate-assets","docId":"build/build-integrate-assets"},{"type":"link","label":"Opening HRMP Channels","href":"/docs/build-hrmp-channels","docId":"build/build-hrmp-channels"}],"collapsed":true,"collapsible":true,"href":"/docs/build-protocol-index"},{"type":"category","label":"Development Networks & Node Management","items":[{"type":"link","label":"Networks Overview","href":"/docs/build-network-overview","docId":"build/build-network-overview"},{"type":"link","label":"Integration Initiation","href":"/docs/build-integration","docId":"build/build-integration"},{"type":"link","label":"Node Management","href":"/docs/build-node-management","docId":"build/build-node-management"}],"collapsed":true,"collapsible":true,"href":"/docs/build-network-index"},{"type":"category","label":"Tooling","items":[{"type":"link","label":"Explorer, Data, & Indexing Tools","href":"/docs/build-data","docId":"build/build-data"},{"type":"link","label":"Open Source Stack","href":"/docs/build-open-source","docId":"build/build-open-source"}],"collapsed":true,"collapsible":true,"href":"/docs/build-tools-index"},{"type":"link","label":"Hackathons","href":"/docs/build-hackathon","docId":"build/build-hackathon"}],"collapsed":true,"collapsible":true,"href":"/docs/build-guide"},{"type":"category","label":"Maintain","items":[{"type":"link","label":"Parameters","href":"/docs/maintain-polkadot-parameters","docId":"maintain/maintain-polkadot-parameters"},{"type":"category","label":"Nodes and Dapps","description":"Learn how to set up a node.","items":[{"type":"link","label":"Node Endpoints","href":"/docs/maintain-endpoints","docId":"maintain/maintain-endpoints"},{"type":"link","label":"Set up a Full Node","href":"/docs/maintain-sync","docId":"maintain/maintain-sync"},{"type":"link","label":"Set up a Boot Node","href":"/docs/maintain-bootnode","docId":"maintain/maintain-bootnode"},{"type":"link","label":"Set up a RPC node","href":"/docs/maintain-rpc","docId":"maintain/maintain-rpc"},{"type":"link","label":"Secure the WebSocket","href":"/docs/maintain-wss","docId":"maintain/maintain-wss"},{"type":"link","label":"Networks","href":"/docs/maintain-networks","docId":"maintain/maintain-networks"},{"type":"link","label":"Resolving Errors","href":"/docs/maintain-errors","docId":"maintain/maintain-errors"}],"collapsed":true,"collapsible":true,"href":"/docs/maintain-node-index"},{"type":"category","label":"Collator Guides","description":"Guides for Collator Nodes.","items":[{"type":"link","label":"Async Backing Upgrade","href":"/docs/maintain-guides-async-backing","docId":"maintain/maintain-guides-async-backing"}],"collapsed":true,"collapsible":true,"href":"/docs/maintain-collator-index"},{"type":"category","label":"Validator Guides","description":"Guides for Validator Nodes.","items":[{"type":"link","label":"How to run a Validator on Polkadot","href":"/docs/maintain-guides-how-to-validate-polkadot","docId":"maintain/maintain-guides-how-to-validate-polkadot"},{"type":"link","label":"Validator Payout Overview","href":"/docs/maintain-guides-validator-payout","docId":"maintain/maintain-guides-validator-payout"},{"type":"link","label":"Using systemd for a Validator Node","href":"/docs/maintain-guides-how-to-systemd","docId":"maintain/maintain-guides-how-to-systemd"},{"type":"link","label":"Secure Validator","href":"/docs/maintain-guides-secure-validator","docId":"maintain/maintain-guides-secure-validator"},{"type":"link","label":"How to Upgrade Your Validator","href":"/docs/maintain-guides-how-to-upgrade","docId":"maintain/maintain-guides-how-to-upgrade"},{"type":"link","label":"Monitor your node","href":"/docs/maintain-guides-how-to-monitor-your-node","docId":"maintain/maintain-guides-how-to-monitor-your-node"},{"type":"link","label":"How to Chill","href":"/docs/maintain-guides-how-to-chill","docId":"maintain/maintain-guides-how-to-chill"},{"type":"link","label":"How to Stop Validating","href":"/docs/maintain-guides-how-to-stop-validating","docId":"maintain/maintain-guides-how-to-stop-validating"},{"type":"link","label":"Validator Community Overview","href":"/docs/maintain-guides-validator-community","docId":"maintain/doc-maintain-guides-validator-community"},{"type":"link","label":"Validator Best Practices","href":"/docs/maintain-guides-avoid-slashing","docId":"maintain/maintain-guides-avoid-slashing"}],"collapsed":true,"collapsible":true,"href":"/docs/maintain-validator-index"},{"type":"category","label":"Archive","description":"Basic Accounts, Identity, Multi-signature, and Proxies.","items":[{"type":"link","label":"Participate in Democracy","href":"/docs/maintain/maintain-guides-democracy","docId":"maintain/archive/maintain-guides-democracy"},{"type":"link","label":"Join the Council","href":"/docs/maintain/maintain-guides-how-to-join-council","docId":"maintain/archive/maintain-guides-how-to-join-council"},{"type":"link","label":"Voting for Councillors","href":"/docs/maintain/maintain-guides-how-to-vote-councillor","docId":"maintain/archive/maintain-guides-how-to-vote-councillor"}],"collapsed":true,"collapsible":true,"href":"/docs/maintain-archive"}],"collapsed":true,"collapsible":true,"href":"/docs/maintain-index"}]},"docs":{"build/build-dapp":{"id":"build/build-dapp","title":"Building dApps","description":"An overview about building dApps on Polkadot","sidebar":"docs"},"build/build-data":{"id":"build/build-data","title":"Explorer, Data, & Indexing Tools","description":"An overview about building with data analytics","sidebar":"docs"},"build/build-guide":{"id":"build/build-guide","title":"Polkadot Developer Portal","description":"Start building with Polkadot/Kusama.","sidebar":"docs"},"build/build-hackathon":{"id":"build/build-hackathon","title":"Hackathons","description":"Join or host a Hackathon.","sidebar":"docs"},"build/build-hrmp-channels":{"id":"build/build-hrmp-channels","title":"Opening HRMP Channels","description":"Steps on how to open HRMP channels between parachains.","sidebar":"docs"},"build/build-index":{"id":"build/build-index","title":"Builder\'s Guides","description":"Reference point for the Polkadot builder guides."},"build/build-integrate-assets":{"id":"build/build-integrate-assets","title":"Assets on Polkadot","description":"Tools that you can use to integrating assets.","sidebar":"docs"},"build/build-integration":{"id":"build/build-integration","title":"Polkadot Integration Guide","description":"Reference point for the Polkadot integration guides.","sidebar":"docs"},"build/build-light-clients":{"id":"build/build-light-clients","title":"Using Light Clients","description":"Information about light client options.","sidebar":"docs"},"build/build-network-overview":{"id":"build/build-network-overview","title":"Networks Overview","description":"An overview of the different networks on Polkadot","sidebar":"docs"},"build/build-node-interaction":{"id":"build/build-node-interaction","title":"Node Interaction","description":"Tools for node interaction.","sidebar":"docs"},"build/build-node-management":{"id":"build/build-node-management","title":"Node Management","description":"Steps on how to manage your Polkadot node.","sidebar":"docs"},"build/build-open-source":{"id":"build/build-open-source","title":"Open Source Stack","description":"Overview of the open source Polkadot/Kusama Tech Stack","sidebar":"docs"},"build/build-oracle":{"id":"build/build-oracle","title":"Oracles","description":"Information about building with oracles.","sidebar":"docs"},"build/build-parachains":{"id":"build/build-parachains","title":"Parachain Development","description":"A guide on what it means to become a Parachain and the steps to do so.","sidebar":"docs"},"build/build-protocol-info":{"id":"build/build-protocol-info","title":"Polkadot Protocol Information","description":"Characteristics about the Polkadot protocol, and what you need to consider when building.","sidebar":"docs"},"build/build-smart-contracts":{"id":"build/build-smart-contracts","title":"Smart Contracts","description":"How smart contracts play their role in the Polkadot ecosystem.","sidebar":"docs"},"build/build-storage":{"id":"build/build-storage","title":"Decentralized Storage","description":"Information about building with decentralized storage.","sidebar":"docs"},"build/build-tools-index":{"id":"build/build-tools-index","title":"Tool Index","description":"Reference point for a list of tools to support your development.","sidebar":"docs"},"build/build-transaction-construction":{"id":"build/build-transaction-construction","title":"Transaction Construction and Signing","description":"Information about how transactions are constructed on Polkadot.","sidebar":"docs"},"general/alpha-program":{"id":"general/alpha-program","title":"Polkadot Alpha Program","description":"The Polkadot Alpha Program and How it can Support your Development.","sidebar":"docs"},"general/ambassadors":{"id":"general/ambassadors","title":"Polkadot Ambassador Program","description":"The Polkadot\'s Ambassador Program and How you can Participate in It.","sidebar":"docs"},"general/bug-bounty":{"id":"general/bug-bounty","title":"Bug Bounty Program","description":"An Overview of How you can Help Catch Bugs.","sidebar":"docs"},"general/community":{"id":"general/community","title":"Community","description":"Connect and stay updated with the Polkadot Community.","sidebar":"docs"},"general/contributing":{"id":"general/contributing","title":"Contributing to the Polkadot Wiki","description":"Contribute to the Polkadot Wiki.","sidebar":"docs"},"general/contributors":{"id":"general/contributors","title":"Contributors","description":"Get to know your Wiki-slayers.","sidebar":"docs"},"general/decentralized-futures":{"id":"general/decentralized-futures","title":"Decentralized Futures Program","description":"Learn about the Decentralized Futures Program.","sidebar":"docs"},"general/decentralized-voices":{"id":"general/decentralized-voices","title":"Decentralized Voices Program","description":"Learn about the Decentralized Voices Program.","sidebar":"docs"},"general/dev-heroes":{"id":"general/dev-heroes","title":"Developer Heroes Program","description":"More Power to Polkadot\'s Developers.","sidebar":"docs"},"general/doc-thousand-contributors":{"id":"general/doc-thousand-contributors","title":"Thousand Contributors Program","description":"The Thousand Contributors Program and How it can Support your Contributions.","sidebar":"docs"},"general/doc-thousand-validators":{"id":"general/doc-thousand-validators","title":"Thousand Validators Programme","description":"The Thousand Validators Program and How it can Support your Validator Endeavors.","sidebar":"docs"},"general/faq":{"id":"general/faq","title":"Frequently Asked Questions (FAQs)","description":"FAQs to Help you Navigate on Polkadot.","sidebar":"docs"},"general/getting-started":{"id":"general/getting-started","title":"Getting Started","description":"Get started with Polkadot and Web3.","sidebar":"docs"},"general/glossary":{"id":"general/glossary","title":"Glossary","description":"Common Terms and Concepts in the Polkadot Ecosystem.","sidebar":"docs"},"general/governance-apps":{"id":"general/governance-apps","title":"Polkadot Governance Apps","description":"Governance Apps in the Polkadot Ecosystem.","sidebar":"docs"},"general/grants":{"id":"general/grants","title":"Grants Program","description":"The Grant Programs in the Polkadot Ecosystem.","sidebar":"docs"},"general/how-to-dyor":{"id":"general/how-to-dyor","title":"How to Do Your Own Research (DYOR)","description":"Importance of Doing Your Own Research (DYOR).","sidebar":"docs"},"general/kusama/kusama-adversarial-cheatsheet":{"id":"general/kusama/kusama-adversarial-cheatsheet","title":"Adversarial Cheatsheet","description":"A cheatsheet to help you create chaos."},"general/kusama/kusama-bug-bounty":{"id":"general/kusama/kusama-bug-bounty","title":"Bug Bounty","description":"An overview of how you can help catch bugs."},"general/kusama/kusama-claims":{"id":"general/kusama/kusama-claims","title":"Kusama Claims","description":"Step-by-step guide on how to claim your KSM tokens."},"general/kusama/kusama-coc":{"id":"general/kusama/kusama-coc","title":"Kusama Code of Conduct","description":"Kusama\'s Code of Conduct to sustain chaos."},"general/kusama/kusama-community":{"id":"general/kusama/kusama-community","title":"Kusama Community","description":"Stay in-touch and keep up-to-date by interacting and engaging in the Kusama community."},"general/kusama/kusama-getting-started":{"id":"general/kusama/kusama-getting-started","title":"Interact with Kusama","description":"Reference point for Kusama content."},"general/kusama/kusama-index":{"id":"general/kusama/kusama-index","title":"Kusama","description":"Legacy link to Kusama Wiki document"},"general/kusama/kusama-parameters":{"id":"general/kusama/kusama-parameters","title":"Kusama Parameters","description":"Learn about common Kusama parameters"},"general/kusama/kusama-social-recovery":{"id":"general/kusama/kusama-social-recovery","title":"Social Recovery","description":"Steps on how to perform account recovery on Kusama."},"general/kusama/kusama-timeline":{"id":"general/kusama/kusama-timeline","title":"Kusama Timeline","description":"Stay up-to-date with the latest action on Kusama."},"general/ledger":{"id":"general/ledger","title":"Using the Polkadot & Kusama Ledger Applications","description":"Use the Polkadot Ledger Application.","sidebar":"docs"},"general/metadata":{"id":"general/metadata","title":"Metadata Explorer","description":"Visualize Metadata and related Documentation.","sidebar":"docs"},"general/multisig-apps":{"id":"general/multisig-apps","title":"Polkadot Multisig Apps","description":"Multisig Apps in the Polkadot Ecosystem.","sidebar":"docs"},"general/parachains-apps":{"id":"general/parachains-apps","title":"Polkadot Parachain Apps","description":"Polkadot\'s Parachain Apps.","sidebar":"docs"},"general/polkadot-direction":{"id":"general/polkadot-direction","title":"Polkadot Direction","description":"Polkadot as a Decentralized and Secure Ubiquitous Computer.","sidebar":"docs"},"general/polkadot-v1":{"id":"general/polkadot-v1","title":"Polkadot 1.0","description":"Polkadot\'s 1.0, Blockspace, Decentralization and Resilience.","sidebar":"docs"},"general/polkadot-vault":{"id":"general/polkadot-vault","title":"Polkadot Vault (formerly Parity Signer)","description":"Your old Smartphone as an Air-gapped Wallet.","sidebar":"docs"},"general/polkadotjs":{"id":"general/polkadotjs","title":"Polkadot-JS Tooling","description":"The Polkadot-JS Tool Collection.","sidebar":"docs"},"general/polkadotjs-ui":{"id":"general/polkadotjs-ui","title":"Polkadot-JS UI (Wallet)","description":"A Wallet for Power-users and Developers.","sidebar":"docs"},"general/research":{"id":"general/research","title":"Research Pages","description":"Latest Research Developments on Polkadot.","sidebar":"docs"},"general/scams":{"id":"general/scams","title":"How to Protect Yourself from Scams","description":"How to Protect yourself against Scams.","sidebar":"docs"},"general/staking-apps":{"id":"general/staking-apps","title":"Polkadot Staking Apps","description":"Staking Apps in the Polkadot Ecosystem.","sidebar":"docs"},"general/staking-dashboard":{"id":"general/staking-dashboard","title":"Polkadot Staking Dashboard","description":"Everything about the Polkadot Staking Dashboard.","sidebar":"docs"},"general/start-building":{"id":"general/start-building","title":"Build on Polkadot","description":"Start Building with the Polkadot SDK.","sidebar":"docs"},"general/transaction-attacks":{"id":"general/transaction-attacks","title":"Why Verify Transactions?","description":"How to Prevent from being a Victim of an Attack","sidebar":"docs"},"general/wallets-and-extensions":{"id":"general/wallets-and-extensions","title":"Wallets and Extensions","description":"An Overview of Wallets and Browser Extensions in the Polkadot Ecosystem.","sidebar":"docs"},"general/web3-and-polkadot":{"id":"general/web3-and-polkadot","title":"Web3 and Polkadot","description":"Introduction to Web3 and Polkadot\'s Role in shaping the Web3 Vision.","sidebar":"docs"},"learn/archive/learn-controller":{"id":"learn/archive/learn-controller","title":"Controller Accounts","description":"Controller Accounts used in Staking.","sidebar":"docs"},"learn/archive/learn-governance":{"id":"learn/archive/learn-governance","title":"Governance V1","description":"Polkadot\'s First Governance Model.","sidebar":"docs"},"learn/archive/learn-launch":{"id":"learn/archive/learn-launch","title":"Polkadot Launch Phases","description":"Polkadot\'s Launch Process and its Individual Phases.","sidebar":"docs"},"learn/archive/learn-redenomination":{"id":"learn/archive/learn-redenomination","title":"Redenomination of DOT","description":"Everything about the DOT Token Redenomination.","sidebar":"docs"},"learn/archive/learn-treasury":{"id":"learn/archive/learn-treasury","title":"Governance v1 Treasury","description":"The Polkadot\'s On-chain Treasury during Gov1.","sidebar":"docs"},"learn/learn-account-abstraction":{"id":"learn/learn-account-abstraction","title":"Polkadot\'s Account Abstraction","description":"Polkadot\'s Native Account Abstraction.","sidebar":"docs"},"learn/learn-account-advanced":{"id":"learn/learn-account-advanced","title":"Polkadot Accounts In-Depth","description":"Advanced Concepts about Polkadot\'s Accounts.","sidebar":"docs"},"learn/learn-account-multisig":{"id":"learn/learn-account-multisig","title":"Multi-Signature Accounts","description":"Multi-signature Accounts on Polkadot.","sidebar":"docs"},"learn/learn-accounts":{"id":"learn/learn-accounts","title":"Polkadot Accounts","description":"Polkadot Accounts, Account Identity, and Account Reaping.","sidebar":"docs"},"learn/learn-architecture":{"id":"learn/learn-architecture","title":"Architecture","description":"Key Components to Polkadot\'s Architecture.","sidebar":"docs"},"learn/learn-archive":{"id":"learn/learn-archive","title":"Learn Archive","description":"Archive for the Learn Section.","sidebar":"docs"},"learn/learn-assets":{"id":"learn/learn-assets","title":"Asset Hub","description":"Fungible Tokens and NFTs on Polkadot.","sidebar":"docs"},"learn/learn-async-backing":{"id":"learn/learn-async-backing","title":"Asynchronous Backing","description":"A brief overview of asynchronous backing, and how it affects Polkadot\'s scalability.","sidebar":"docs"},"learn/learn-auction":{"id":"learn/learn-auction","title":"Parachain Slot Auctions","description":"Polkadot\'s Parachain Slot Auction Mechanism.","sidebar":"docs"},"learn/learn-bridges":{"id":"learn/learn-bridges","title":"Bridges","description":"Bridges and Examples of Common Bridges.","sidebar":"docs"},"learn/learn-collator":{"id":"learn/learn-collator","title":"Collator","description":"Role of Collators within the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-comparisons":{"id":"learn/learn-comparisons","title":"Polkadot Comparisons","description":"Comparison between Polkadot and ETH 1.0 and BSC.","sidebar":"docs"},"learn/learn-comparisons-avalanche":{"id":"learn/learn-comparisons-avalanche","title":"Polkadot vs. Avalanche","description":"Comparison between Polkadot and Avalanche.","sidebar":"docs"},"learn/learn-comparisons-cosmos":{"id":"learn/learn-comparisons-cosmos","title":"Polkadot vs. Cosmos","description":"Comparison between Polkadot and Cosmos.","sidebar":"docs"},"learn/learn-comparisons-ethereum-2":{"id":"learn/learn-comparisons-ethereum-2","title":"Polkadot vs. Ethereum","description":"Comparison between Polkadot and Ethereum.","sidebar":"docs"},"learn/learn-comparisons-kusama":{"id":"learn/learn-comparisons-kusama","title":"Polkadot vs. Kusama","description":"Comparing the cousins.","sidebar":"docs"},"learn/learn-comparisons-rollups":{"id":"learn/learn-comparisons-rollups","title":"Layer Two and Rollups","description":"Comparison between various Rollup and L2 Protocols.","sidebar":"docs"},"learn/learn-consensus":{"id":"learn/learn-consensus","title":"Polkadot Consensus","description":"The Consensus Mechanism of Polkadot.","sidebar":"docs"},"learn/learn-crowdloans":{"id":"learn/learn-crowdloans","title":"Parachain Crowdloans","description":"Polkadot\'s Crowdloans and How to Participate.","sidebar":"docs"},"learn/learn-cryptography":{"id":"learn/learn-cryptography","title":"Cryptography on Polkadot","description":"Cryptographic Functions used in Polkadot.","sidebar":"docs"},"learn/learn-DOT":{"id":"learn/learn-DOT","title":"DOT","description":"Tokenomics of Polkadot\'s Native Token DOT.","sidebar":"docs"},"learn/learn-guides-accounts":{"id":"learn/learn-guides-accounts","title":"Polkadot-JS Guides about Accounts","description":"Polkadot-JS Guides about Accounts","sidebar":"docs"},"learn/learn-guides-accounts-multisig":{"id":"learn/learn-guides-accounts-multisig","title":"Polkadot-JS Guides about Multi-signature Accounts","description":"Polkadot-JS Guides about Multi-signature Accounts","sidebar":"docs"},"learn/learn-guides-accounts-proxy":{"id":"learn/learn-guides-accounts-proxy","title":"Polkadot-JS Guides about Proxy Accounts","description":"Polkadot-JS Guides about Proxy Accounts","sidebar":"docs"},"learn/learn-guides-accounts-proxy-pure":{"id":"learn/learn-guides-accounts-proxy-pure","title":"Polkadot-JS Guides about Pure Proxy Accounts","description":"Polkadot-JS Guides about Pure Proxy Accounts","sidebar":"docs"},"learn/learn-guides-assets-create":{"id":"learn/learn-guides-assets-create","title":"Polkadot-JS Guides about Creating Assets","description":"Polkadot-JS Guides about Creating Assets.","sidebar":"docs"},"learn/learn-guides-assets-ledger":{"id":"learn/learn-guides-assets-ledger","title":"Polkadot-JS Guides about Asset Hub Ledger App","description":"Polkadot-JS Guides about Ledger and the Asset Hub.","sidebar":"docs"},"learn/learn-guides-bounties":{"id":"learn/learn-guides-bounties","title":"Polkadot-JS Guides about Bounties","description":"Polkadot-JS Guides for Bounties","sidebar":"docs"},"learn/learn-guides-identity":{"id":"learn/learn-guides-identity","title":"Polkadot-JS Guides about Identity","description":"Polkadot-JS Guides about Identity.","sidebar":"docs"},"learn/learn-guides-ledger":{"id":"learn/learn-guides-ledger","title":"Polkadot-JS Guides for Ledger Devices","description":"Polkadot-JS Guides for Ledger Devices.","sidebar":"docs"},"learn/learn-guides-polkadot-opengov":{"id":"learn/learn-guides-polkadot-opengov","title":"Polkadot-JS Guides about OpenGov","description":"Polkadot-JS Guides about Polkadot OpenGov.","sidebar":"docs"},"learn/learn-guides-staking":{"id":"learn/learn-guides-staking","title":"Polkadot-JS Guides For Nominators","description":"Polkadot-JS Guides for Nominators.","sidebar":"docs"},"learn/learn-guides-staking-pools":{"id":"learn/learn-guides-staking-pools","title":"Polkadot-JS Guides for Pool Creators","description":"Polkadot-JS Guides about Nomination Pools.","sidebar":"docs"},"learn/learn-guides-transfers":{"id":"learn/learn-guides-transfers","title":"Polkadot-JS Guides about Transfers","description":"Polkadot-JS Guides about Balances Transfers.","sidebar":"docs"},"learn/learn-guides-treasury":{"id":"learn/learn-guides-treasury","title":"Polkadot-JS Guides about the Treasury","description":"Polkadot-JS Guides about the Polkadot Treasury.","sidebar":"docs"},"learn/learn-guides-vault":{"id":"learn/learn-guides-vault","title":"Polkadot-JS Guides about the Vault App","description":"Polkadot-JS Guides about Polkadot Vault.","sidebar":"docs"},"learn/learn-hyperbridge":{"id":"learn/learn-hyperbridge","title":"Hyperbridge","description":"Polkadot\'s Bridge to Ethereum.","sidebar":"docs"},"learn/learn-identity":{"id":"learn/learn-identity","title":"Account Identity","description":"On-chain Identity, Judgements and Registrars.","sidebar":"docs"},"learn/learn-implementations":{"id":"learn/learn-implementations","title":"Polkadot Implementations","description":"Learn about the different Polkadot implementations."},"learn/learn-inflation":{"id":"learn/learn-inflation","title":"Token Inflation","description":"Explanation of Token\'s Inflation in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-nft":{"id":"learn/learn-nft","title":"NFTs","description":"The NFT Landscape of the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-nft-pallets":{"id":"learn/learn-nft-pallets","title":"NFT Pallets","description":"Functionalities of the NFT Pallets in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-nft-projects":{"id":"learn/learn-nft-projects","title":"NFT projects on Polkadot and Kusama","description":"NFT Projects in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-nomination-pools":{"id":"learn/learn-nomination-pools","title":"Nomination Pools","description":"Staking through Polkadot\'s Nomination Pools.","sidebar":"docs"},"learn/learn-nominator":{"id":"learn/learn-nominator","title":"Nominator","description":"Role of Nominators in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-parachains":{"id":"learn/learn-parachains","title":"Parachains","description":"An Introduction to Polkadot\'s Parachains.","sidebar":"docs"},"learn/learn-parachains-faq":{"id":"learn/learn-parachains-faq","title":"Parachains FAQ","description":"Parachains FAQ.","sidebar":"docs"},"learn/learn-parachains-protocol":{"id":"learn/learn-parachains-protocol","title":"Parachains\' Protocol Overview","description":"Actors and Protocols involved in Polkadot and its Parachains\' Block Finality.","sidebar":"docs"},"learn/learn-parathreads":{"id":"learn/learn-parathreads","title":"Parathreads","description":"An Introductory Guide to Parathreads.","sidebar":"docs"},"learn/learn-phragmen":{"id":"learn/learn-phragmen","title":"NPoS Election Algorithms","description":"The Election Methods used in Polkadot\'s NPoS Mechanism.","sidebar":"docs"},"learn/learn-polkadot-host":{"id":"learn/learn-polkadot-host","title":"Polkadot Host (PH)","description":"The Polkadot Host and its Components.","sidebar":"docs"},"learn/learn-polkadot-js-guides":{"id":"learn/learn-polkadot-js-guides","title":"Polkadot-JS Guides","description":"Guides about Polkadot-JS.","sidebar":"docs"},"learn/learn-polkadot-opengov":{"id":"learn/learn-polkadot-opengov","title":"Introduction to Polkadot OpenGov","description":"Polkadot\u2019s Latest Model for Decentralized Governance.","sidebar":"docs"},"learn/learn-polkadot-opengov-origins":{"id":"learn/learn-polkadot-opengov-origins","title":"Polkadot OpenGov Origins","description":"All Origins for Polkadot\'s OpenGov.","sidebar":"docs"},"learn/learn-polkadot-opengov-treasury":{"id":"learn/learn-polkadot-opengov-treasury","title":"Treasury","description":"Polkadot\'s On-chain Treasury.","sidebar":"docs"},"learn/learn-polkadot-technical-fellowship":{"id":"learn/learn-polkadot-technical-fellowship","title":"Polkadot Technical Fellowship","description":"Self-governing body of experts and developers of the Polkadot protocol.","sidebar":"docs"},"learn/learn-proxies":{"id":"learn/learn-proxies","title":"Proxy Accounts","description":"Proxy Accounts on Polkadot.","sidebar":"docs"},"learn/learn-proxies-pure":{"id":"learn/learn-proxies-pure","title":"Pure Proxy Accounts","description":"Pure Proxy Accounts on Polkadot.","sidebar":"docs"},"learn/learn-runtime-upgrades":{"id":"learn/learn-runtime-upgrades","title":"Runtime Upgrades","description":"Forkless Runtime Upgrades on Polkadot.","sidebar":"docs"},"learn/learn-sassafras":{"id":"learn/learn-sassafras","title":"Polkadot Block Production: SASSAFRAS","description":"The Consensus Mechanism of Polkadot.","sidebar":"docs"},"learn/learn-spree":{"id":"learn/learn-spree","title":"SPREE","description":"Fundamentals of SPREE.","sidebar":"docs"},"learn/learn-staking":{"id":"learn/learn-staking","title":"Introduction to Staking","description":"Overview of Staking and NPoS on Polkadot.","sidebar":"docs"},"learn/learn-staking-advanced":{"id":"learn/learn-staking-advanced","title":"Advanced Staking Concepts","description":"Advanced Concepts about Staking on Polkadot.","sidebar":"docs"},"learn/learn-system-chains":{"id":"learn/learn-system-chains","title":"System Parachains","description":"System Parachains currently deployed on Polkadot.","sidebar":"docs"},"learn/learn-teleport":{"id":"learn/learn-teleport","title":"Teleporting Assets","description":"Teleport Assets between Parachains and Relay Chain.","sidebar":"docs"},"learn/learn-transaction-fees":{"id":"learn/learn-transaction-fees","title":"Transaction Fees","description":"How Transaction Fees are Calculated and Handled.","sidebar":"docs"},"learn/learn-transactions":{"id":"learn/learn-transactions","title":"Types of Transactions (a.k.a. Extrinsics)","description":"Types of Transactions on Polkadot.","sidebar":"docs"},"learn/learn-validator":{"id":"learn/learn-validator","title":"Validator","description":"Role of Validators within the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-video-tutorials":{"id":"learn/learn-video-tutorials","title":"Videos about Polkadot","description":"Videos about Polkadot and Related Topics.","sidebar":"docs"},"learn/learn-wasm":{"id":"learn/learn-wasm","title":"WebAssembly (Wasm)","description":"WASM and its Role in Polkadot\'s Runtime.","sidebar":"docs"},"learn/learn-xcm":{"id":"learn/learn-xcm","title":"Introduction to Cross-Consensus Message Format (XCM)","description":"XCM, The Messaging Format at the Forefront of Interoperability.","sidebar":"docs"},"learn/learn-xcm-instructions":{"id":"learn/learn-xcm-instructions","title":"XCM Instructions & Register Specification","description":"Specification for Instructions and Registers for the XCM Format.","sidebar":"docs"},"learn/learn-xcm-pallet":{"id":"learn/learn-xcm-pallet","title":"XCM FRAME Pallet Overview","description":"Mechanics of the XCM Pallet and its role in Polkadot\'s Ecosystem.","sidebar":"docs"},"learn/learn-xcm-transport":{"id":"learn/learn-xcm-transport","title":"XCM Transport Methods (XCMP, HRMP, VMP)","description":"Methods to send XCM Messages across Networks.","sidebar":"docs"},"learn/learn-xcm-usecases":{"id":"learn/learn-xcm-usecases","title":"XCM Use-cases & Examples","description":"Cross-consensus Interactions and the XCM Format.","sidebar":"docs"},"learn/learn-xcvm":{"id":"learn/learn-xcvm","title":"XCM Virtual Machine (XCVM) & XCM Executor","description":"Design of the XCM Executor and Mechanics of the XCM Virtual Machine.","sidebar":"docs"},"learn/xcm/executor_config/learn-xcm-docs-config-deep-dive":{"id":"learn/xcm/executor_config/learn-xcm-docs-config-deep-dive","title":"Executor Configuration","description":"Deep Dive into the Configuration of the XCM-Executor.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-fees":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-fees","title":"Weight and Fees","description":"Weight and Fees in XCM.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-multiasset":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-multiasset","title":"MultiAsset","description":"The MultiAsset Datatype.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-summary":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-summary","title":"Fundamentals","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-xcvm":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-xcvm","title":"XCVM","description":"Deep Dive into XCVM.","sidebar":"docs"},"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-example":{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-example","title":"Example","description":"A MultiLocation Example.","sidebar":"docs"},"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-junctions":{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-junctions","title":"Junction(s)","description":"The Junction Type in a MultiLocation Struct.","sidebar":"docs"},"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-summary":{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-summary","title":"MultiLocation","description":"Learn about XCM fundamentals.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-assets":{"id":"learn/xcm/journey/learn-xcm-docs-journey-assets","title":"Trap and Claim Assets","description":"Instructions to Trap and Claim Assets.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-channels":{"id":"learn/xcm/journey/learn-xcm-docs-journey-channels","title":"Channels and Bridges","description":"Establishment of HRMP Channels between Parachains.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-expectations":{"id":"learn/xcm/journey/learn-xcm-docs-journey-expectations","title":"Expectations","description":"Expect Instructions to Check if a Condition is Valid.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-fees":{"id":"learn/xcm/journey/learn-xcm-docs-journey-fees","title":"Fee Handling","description":"How Fees for XCM Transfers are Handled.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-holding":{"id":"learn/xcm/journey/learn-xcm-docs-journey-holding","title":"More Holding Modifiers","description":"More Instructions to Alter the Holding Register.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-origin":{"id":"learn/xcm/journey/learn-xcm-docs-journey-origin","title":"Origin Manipulation","description":"Manipulating the Origin of XCM.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-queries":{"id":"learn/xcm/journey/learn-xcm-docs-journey-queries","title":"Queries","description":"Query Information from another Consensus System.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-register":{"id":"learn/xcm/journey/learn-xcm-docs-journey-register","title":"Register Modifiers","description":"More Instructions to Change the XCVM Registers.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-summary":{"id":"learn/xcm/journey/learn-xcm-docs-journey-summary","title":"A Journey through XCM","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-transact":{"id":"learn/xcm/journey/learn-xcm-docs-journey-transact","title":"Transact","description":"The Transact Instruction to Execute XCM Calls.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-version":{"id":"learn/xcm/journey/learn-xcm-docs-journey-version","title":"Version Subscription","description":"Get Notified about XCM Version Updates.","sidebar":"docs"},"learn/xcm/journey/locks/learn-xcm-docs-journey-locks":{"id":"learn/xcm/journey/locks/learn-xcm-docs-journey-locks","title":"Locks","description":"Restrict Transfer or Withdrawal of Assets.","sidebar":"docs"},"learn/xcm/journey/transfers/learn-xcm-docs-transfers-reserve":{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-reserve","title":"Reserve-backed Transfers","description":"Reserve-backed Transfers: Third-party Reserve to store Assets.","sidebar":"docs"},"learn/xcm/journey/transfers/learn-xcm-docs-transfers-summary":{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-summary","title":"Transfers","description":"Summary about XCM Transfers.","sidebar":"docs"},"learn/xcm/journey/transfers/learn-xcm-docs-transfers-teleport":{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-teleport","title":"Asset Teleportation","description":"Teleportation: Sending Assets Across Chains.","sidebar":"docs"},"learn/xcm/learn-xcm-docs-intro":{"id":"learn/xcm/learn-xcm-docs-intro","title":"XCM: Cross-Consensus Messaging","description":"Introduction to the XCM Documentation.","sidebar":"docs"},"learn/xcm/learn-xcm-docs-testing":{"id":"learn/xcm/learn-xcm-docs-testing","title":"Testing","description":"Testing XCM-powered Solutions.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-architecture":{"id":"learn/xcm/overview/learn-xcm-docs-overview-architecture","title":"The XCM Architecture","description":"The XCM Architecture.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-format":{"id":"learn/xcm/overview/learn-xcm-docs-overview-format","title":"XCM is a Format, not a Protocol","description":"XCM is a Format, not a Protocol.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-intro":{"id":"learn/xcm/overview/learn-xcm-docs-overview-intro","title":"Introduction","description":"An Introduction to XCM.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-summary":{"id":"learn/xcm/overview/learn-xcm-docs-overview-summary","title":"XCM: Cross-Consensus Messaging","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-xcvm":{"id":"learn/xcm/overview/learn-xcm-docs-overview-xcvm","title":"The XCVM","description":"The Cross-Consensus Virtual Machine.","sidebar":"docs"},"learn/xcm/quickstart/learn-xcm-docs-quickstart-first-look":{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-first-look","title":"First Look at an XCM","description":"First Look at an XCM.","sidebar":"docs"},"learn/xcm/quickstart/learn-xcm-docs-quickstart-simulator":{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-simulator","title":"XCM Simulator","description":"Test XCM using a Simulated Environment.","sidebar":"docs"},"learn/xcm/quickstart/learn-xcm-docs-quickstart-summary":{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-summary","title":"Quickstart","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/reference/learn-xcm-docs-reference-glossary":{"id":"learn/xcm/reference/learn-xcm-docs-reference-glossary","title":"Glossary","description":"Glossary.","sidebar":"docs"},"learn/xcm/reference/learn-xcm-docs-reference-xcvm-registers":{"id":"learn/xcm/reference/learn-xcm-docs-reference-xcvm-registers","title":"All XCVM Registers","description":"All XCVM Registers.","sidebar":"docs"},"maintain/archive/maintain-guides-democracy":{"id":"maintain/archive/maintain-guides-democracy","title":"Participate in Democracy","description":"Steps on how to participate in democracy.","sidebar":"docs"},"maintain/archive/maintain-guides-how-to-join-council":{"id":"maintain/archive/maintain-guides-how-to-join-council","title":"Join the Council","description":"Steps on how to join the official on-chain council.","sidebar":"docs"},"maintain/archive/maintain-guides-how-to-vote-councillor":{"id":"maintain/archive/maintain-guides-how-to-vote-councillor","title":"Voting for Councillors","description":"Steps on how to vote for councillors.","sidebar":"docs"},"maintain/doc-maintain-guides-validator-community":{"id":"maintain/doc-maintain-guides-validator-community","title":"Validator Community Overview","description":"An extensive guide to help you start and build a validator community.","sidebar":"docs"},"maintain/kusama/maintain-guides-how-to-validate-kusama":{"id":"maintain/kusama/maintain-guides-how-to-validate-kusama","title":"Run a Validator (Kusama)","description":"The fundamentals for running a Kusama validator."},"maintain/kusama/maintain-guides-society-kusama":{"id":"maintain/kusama/maintain-guides-society-kusama","title":"Kappa Sigma Mu","description":"Learn about the Kappa Sigma Mu society and join as a member."},"maintain/maintain-archive":{"id":"maintain/maintain-archive","title":"Maintain Archive","description":"Archive for the Maintain Section.","sidebar":"docs"},"maintain/maintain-bootnode":{"id":"maintain/maintain-bootnode","title":"Set up a Boot Node","description":"Steps on setting up a boot node.","sidebar":"docs"},"maintain/maintain-endpoints":{"id":"maintain/maintain-endpoints","title":"Node Endpoints","description":"List of node endpoints and examples of use.","sidebar":"docs"},"maintain/maintain-errors":{"id":"maintain/maintain-errors","title":"Errors and How to Resolve Them","description":"Common errors you might encounter and how they can be resolved.","sidebar":"docs"},"maintain/maintain-guides-async-backing":{"id":"maintain/maintain-guides-async-backing","title":"Upgrade Parachain for Asynchronous Backing Compatibility","description":"Steps on how to upgrade a parachain to be compatible with the relay chain\'s async backing feature.","sidebar":"docs"},"maintain/maintain-guides-avoid-slashing":{"id":"maintain/maintain-guides-avoid-slashing","title":"Validator Best Practices","description":"Best practices to avoid slashing.","sidebar":"docs"},"maintain/maintain-guides-how-to-chill":{"id":"maintain/maintain-guides-how-to-chill","title":"How to Chill","description":"Steps on chilling as a network participant.","sidebar":"docs"},"maintain/maintain-guides-how-to-monitor-your-node":{"id":"maintain/maintain-guides-how-to-monitor-your-node","title":"Monitor your node","description":"This guide will walk you through how to set up Prometheus with","sidebar":"docs"},"maintain/maintain-guides-how-to-stop-validating":{"id":"maintain/maintain-guides-how-to-stop-validating","title":"How to Stop Validating","description":"Steps on how to stop validating.","sidebar":"docs"},"maintain/maintain-guides-how-to-systemd":{"id":"maintain/maintain-guides-how-to-systemd","title":"Using systemd for a Validator Node","description":"Using a service manager for your validator node.","sidebar":"docs"},"maintain/maintain-guides-how-to-upgrade":{"id":"maintain/maintain-guides-how-to-upgrade","title":"How to Upgrade Your Validator","description":"Validators perform critical functions for the network, and as such, have strict uptime requirements.","sidebar":"docs"},"maintain/maintain-guides-how-to-validate-polkadot":{"id":"maintain/maintain-guides-how-to-validate-polkadot","title":"Run a Validator (Polkadot)","description":"The fundamentals for running a Polkadot validator.","sidebar":"docs"},"maintain/maintain-guides-secure-validator":{"id":"maintain/maintain-guides-secure-validator","title":"Secure Validator","description":"Tips for running a secure validator.","sidebar":"docs"},"maintain/maintain-guides-validator-payout":{"id":"maintain/maintain-guides-validator-payout","title":"Validator Payout Overview","description":"How validator payout works on the network and what you should expect.","sidebar":"docs"},"maintain/maintain-index":{"id":"maintain/maintain-index","title":"Network Maintainers","description":"Reference point for network maintenance guides.","sidebar":"docs"},"maintain/maintain-networks":{"id":"maintain/maintain-networks","title":"Networks","description":"Information about the different networks of the Polkadot ecosystem.","sidebar":"docs"},"maintain/maintain-polkadot-parameters":{"id":"maintain/maintain-polkadot-parameters","title":"Polkadot Parameters","description":"A description about fundamental Polkadot parameters.","sidebar":"docs"},"maintain/maintain-rpc":{"id":"maintain/maintain-rpc","title":"Set up a RPC node","description":"Steps on setting up a RPC node.","sidebar":"docs"},"maintain/maintain-sync":{"id":"maintain/maintain-sync","title":"Set up a Full Node","description":"Steps on how to set up a full node.","sidebar":"docs"},"maintain/maintain-wss":{"id":"maintain/maintain-wss","title":"Secure the WebSocket","description":"Steps on setting up a secure socket for remote connections.","sidebar":"docs"}}}')}}]); \ No newline at end of file diff --git a/assets/js/9662c81e.16db3e20.js b/assets/js/9662c81e.16db3e20.js deleted file mode 100644 index 7cb05ad85420..000000000000 --- a/assets/js/9662c81e.16db3e20.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2664],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>m});var o=t(67294);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function r(e){for(var n=1;n=0||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var l=o.createContext({}),s=function(e){var n=o.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},d=function(e){var n=s(e.components);return o.createElement(l.Provider,{value:n},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},h=o.forwardRef((function(e,n){var t=e.components,i=e.mdxType,a=e.originalType,l=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),u=s(t),h=i,m=u["".concat(l,".").concat(h)]||u[h]||p[h]||a;return t?o.createElement(m,r(r({ref:n},d),{},{components:t})):o.createElement(m,r({ref:n},d))}));function m(e,n){var t=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var a=t.length,r=new Array(a);r[0]=h;var c={};for(var l in n)hasOwnProperty.call(n,l)&&(c[l]=n[l]);c.originalType=e,c[u]="string"==typeof e?e:i,r[1]=c;for(var s=2;s{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>m,frontMatter:()=>c,metadata:()=>s,toc:()=>u});var o=t(87462),i=t(63366),a=(t(67294),t(3905)),r=["components"],c={id:"maintain-guides-how-to-join-council",title:"Join the Council",sidebar_label:"Join the Council",description:"Steps on how to join the official on-chain council.",keywords:["council","how to join council","governance","candidate"],slug:"../maintain-guides-how-to-join-council"},l=void 0,s={unversionedId:"maintain/archive/maintain-guides-how-to-join-council",id:"maintain/archive/maintain-guides-how-to-join-council",title:"Join the Council",description:"Steps on how to join the official on-chain council.",source:"@site/../docs/maintain/archive/maintain-guides-how-to-join-council.md",sourceDirName:"maintain/archive",slug:"/maintain/maintain-guides-how-to-join-council",permalink:"/docs/maintain/maintain-guides-how-to-join-council",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/maintain/archive/maintain-guides-how-to-join-council.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710167319,formattedLastUpdatedAt:"Mar 11, 2024",frontMatter:{id:"maintain-guides-how-to-join-council",title:"Join the Council",sidebar_label:"Join the Council",description:"Steps on how to join the official on-chain council.",keywords:["council","how to join council","governance","candidate"],slug:"../maintain-guides-how-to-join-council"},sidebar:"docs",previous:{title:"Participate in Democracy",permalink:"/docs/maintain/maintain-guides-democracy"},next:{title:"Voting for Councillors",permalink:"/docs/maintain/maintain-guides-how-to-vote-councillor"}},d={},u=[{value:"Submit Candidacy",id:"submit-candidacy",level:2},{value:"Voting on Candidates",id:"voting-on-candidates",level:2},{value:"Winning",id:"winning",level:2}],p={toc:u},h="wrapper";function m(e){var n=e.components,c=(0,i.Z)(e,r);return(0,a.kt)(h,(0,o.Z)({},p,c,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("div",{className:"sticky"},(0,a.kt)("br",null),(0,a.kt)("p",null,"The content on this page is archived. For up-to-date information about governance, see the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},"Polkadot OpenGov page"),".")),(0,a.kt)("p",null,"The council is an elected body of on-chain accounts that are intended to represent the passive\nstakeholders of Polkadot and/or Kusama. The council has two major tasks in governance: proposing\nreferenda and vetoing dangerous or malicious referenda. For more information on the council, see the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/learn/learn-governance#council"},"governance page"),". This guide will walk you through\nentering your candidacy to the council."),(0,a.kt)("h2",{id:"submit-candidacy"},"Submit Candidacy"),(0,a.kt)("p",null,"Submitting your candidacy for the council requires a small bond of DOT / KSM. Unless your candidacy\nwins, the bond will be forfeited. You can receive your bond back if you manually renounce your\ncandidacy before losing. Runners-up are selected after every round and are reserved members in case\none of the winners gets forcefully removed."),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},"Currently the bond for submitting a council candidacy on Polkadot is 100 DOT, and 0.0033 KSM on\nKusama.")),(0,a.kt)("p",null,"It is a good idea to announce your council intention before submitting your candidacy so that your\nsupporters will know when they can start to vote for you. You can also vote for yourself in case no\none else does."),(0,a.kt)("p",null,"Go to ",(0,a.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps"},"Polkadot Apps Dashboard"),' and navigate to the "Council" tab.\nClick the button on the right that says "Submit Candidacy."'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"submit candidacy button",src:t(901).Z,width:"580",height:"120"})),(0,a.kt)("p",null,'After making the transaction, you will see your account appear underneath the row "Candidates."'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"candidates list",src:t(98706).Z,width:"2880",height:"298"})),(0,a.kt)("p",null,"It is a good idea now to lead by example and give yourself a vote."),(0,a.kt)("h2",{id:"voting-on-candidates"},"Voting on Candidates"),(0,a.kt)("p",null,'Next to the button to submit candidacy is another button titled "Vote." You will click this button\nto make a vote for yourself (optional).'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"voting button on UI",src:t(9802).Z,width:"556",height:"120"})),(0,a.kt)("p",null,"The council uses ",(0,a.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"Phragm\xe9n"),' approval voting, which is also used in\nthe validator elections. This means that you can choose up to 16 distinct candidates to vote for and\nyour stake will equalize between them. For this guide, choose to approve your own candidacy by\nclicking on the switch next to your account and changing it to say "Aye."'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"voting pop up on UI",src:t(464).Z,width:"2186",height:"1104"})),(0,a.kt)("h2",{id:"winning"},"Winning"),(0,a.kt)("p",null,'If you are one of the lucky ones to win a council election you will see your account move underneath\nthe row "Members".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"council members list",src:t(11966).Z,width:"2880",height:"1346"})),(0,a.kt)("p",null,"Now you are able to participate on the council by making motions or voting proposals. To join in on\nthe active discussions, join the\n",(0,a.kt)("a",{parentName:"p",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction channel"),"."))}m.isMDXComponent=!0},98706:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/polkadotjs_candidates-bc420d7637b02bd43169dd6bc44a9bd9.png"},11966:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/polkadotjs_council_members-c731a3fa3e5eb821427126149431dbfe.png"},901:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/polkadotjs_submit_candidancy-04eabb0aa998c350427386dcff208d1c.png"},9802:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/polkadotjs_vote_button-9f5daf5f27fda6df219d0f959e7632b4.png"},464:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/polkadotjs_voting-cc5698e8e8f5de77644d3a7cb316a2ea.png"}}]); \ No newline at end of file diff --git a/assets/js/9662c81e.3a2cd287.js b/assets/js/9662c81e.3a2cd287.js new file mode 100644 index 000000000000..9bf20bb01c5b --- /dev/null +++ b/assets/js/9662c81e.3a2cd287.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2664],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>m});var o=t(67294);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function r(e){for(var n=1;n=0||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var l=o.createContext({}),s=function(e){var n=o.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},d=function(e){var n=s(e.components);return o.createElement(l.Provider,{value:n},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},h=o.forwardRef((function(e,n){var t=e.components,i=e.mdxType,a=e.originalType,l=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),u=s(t),h=i,m=u["".concat(l,".").concat(h)]||u[h]||p[h]||a;return t?o.createElement(m,r(r({ref:n},d),{},{components:t})):o.createElement(m,r({ref:n},d))}));function m(e,n){var t=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var a=t.length,r=new Array(a);r[0]=h;var c={};for(var l in n)hasOwnProperty.call(n,l)&&(c[l]=n[l]);c.originalType=e,c[u]="string"==typeof e?e:i,r[1]=c;for(var s=2;s{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>m,frontMatter:()=>c,metadata:()=>s,toc:()=>u});var o=t(87462),i=t(63366),a=(t(67294),t(3905)),r=["components"],c={id:"maintain-guides-how-to-join-council",title:"Join the Council",sidebar_label:"Join the Council",description:"Steps on how to join the official on-chain council.",keywords:["council","how to join council","governance","candidate"],slug:"../maintain-guides-how-to-join-council"},l=void 0,s={unversionedId:"maintain/archive/maintain-guides-how-to-join-council",id:"maintain/archive/maintain-guides-how-to-join-council",title:"Join the Council",description:"Steps on how to join the official on-chain council.",source:"@site/../docs/maintain/archive/maintain-guides-how-to-join-council.md",sourceDirName:"maintain/archive",slug:"/maintain/maintain-guides-how-to-join-council",permalink:"/docs/maintain/maintain-guides-how-to-join-council",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/maintain/archive/maintain-guides-how-to-join-council.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"maintain-guides-how-to-join-council",title:"Join the Council",sidebar_label:"Join the Council",description:"Steps on how to join the official on-chain council.",keywords:["council","how to join council","governance","candidate"],slug:"../maintain-guides-how-to-join-council"},sidebar:"docs",previous:{title:"Participate in Democracy",permalink:"/docs/maintain/maintain-guides-democracy"},next:{title:"Voting for Councillors",permalink:"/docs/maintain/maintain-guides-how-to-vote-councillor"}},d={},u=[{value:"Submit Candidacy",id:"submit-candidacy",level:2},{value:"Voting on Candidates",id:"voting-on-candidates",level:2},{value:"Winning",id:"winning",level:2}],p={toc:u},h="wrapper";function m(e){var n=e.components,c=(0,i.Z)(e,r);return(0,a.kt)(h,(0,o.Z)({},p,c,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("div",{className:"sticky",style:{zIndex:1}},(0,a.kt)("br",null),(0,a.kt)("p",null,"The content on this page is archived. For up-to-date information about governance, see the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},"Polkadot OpenGov page"),".")),(0,a.kt)("p",null,"The council is an elected body of on-chain accounts that are intended to represent the passive\nstakeholders of Polkadot and/or Kusama. The council has two major tasks in governance: proposing\nreferenda and vetoing dangerous or malicious referenda. For more information on the council, see the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/learn/learn-governance#council"},"governance page"),". This guide will walk you through\nentering your candidacy to the council."),(0,a.kt)("h2",{id:"submit-candidacy"},"Submit Candidacy"),(0,a.kt)("p",null,"Submitting your candidacy for the council requires a small bond of DOT / KSM. Unless your candidacy\nwins, the bond will be forfeited. You can receive your bond back if you manually renounce your\ncandidacy before losing. Runners-up are selected after every round and are reserved members in case\none of the winners gets forcefully removed."),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},"Currently the bond for submitting a council candidacy on Polkadot is 100 DOT, and 0.0033 KSM on\nKusama.")),(0,a.kt)("p",null,"It is a good idea to announce your council intention before submitting your candidacy so that your\nsupporters will know when they can start to vote for you. You can also vote for yourself in case no\none else does."),(0,a.kt)("p",null,"Go to ",(0,a.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps"},"Polkadot Apps Dashboard"),' and navigate to the "Council" tab.\nClick the button on the right that says "Submit Candidacy."'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"submit candidacy button",src:t(901).Z,width:"580",height:"120"})),(0,a.kt)("p",null,'After making the transaction, you will see your account appear underneath the row "Candidates."'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"candidates list",src:t(98706).Z,width:"2880",height:"298"})),(0,a.kt)("p",null,"It is a good idea now to lead by example and give yourself a vote."),(0,a.kt)("h2",{id:"voting-on-candidates"},"Voting on Candidates"),(0,a.kt)("p",null,'Next to the button to submit candidacy is another button titled "Vote." You will click this button\nto make a vote for yourself (optional).'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"voting button on UI",src:t(9802).Z,width:"556",height:"120"})),(0,a.kt)("p",null,"The council uses ",(0,a.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"Phragm\xe9n"),' approval voting, which is also used in\nthe validator elections. This means that you can choose up to 16 distinct candidates to vote for and\nyour stake will equalize between them. For this guide, choose to approve your own candidacy by\nclicking on the switch next to your account and changing it to say "Aye."'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"voting pop up on UI",src:t(464).Z,width:"2186",height:"1104"})),(0,a.kt)("h2",{id:"winning"},"Winning"),(0,a.kt)("p",null,'If you are one of the lucky ones to win a council election you will see your account move underneath\nthe row "Members".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"council members list",src:t(11966).Z,width:"2880",height:"1346"})),(0,a.kt)("p",null,"Now you are able to participate on the council by making motions or voting proposals. To join in on\nthe active discussions, join the\n",(0,a.kt)("a",{parentName:"p",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction channel"),"."))}m.isMDXComponent=!0},98706:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/polkadotjs_candidates-bc420d7637b02bd43169dd6bc44a9bd9.png"},11966:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/polkadotjs_council_members-c731a3fa3e5eb821427126149431dbfe.png"},901:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/polkadotjs_submit_candidancy-04eabb0aa998c350427386dcff208d1c.png"},9802:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/polkadotjs_vote_button-9f5daf5f27fda6df219d0f959e7632b4.png"},464:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/polkadotjs_voting-cc5698e8e8f5de77644d3a7cb316a2ea.png"}}]); \ No newline at end of file diff --git a/assets/js/967fa6d4.9fd74d74.js b/assets/js/967fa6d4.9fd74d74.js new file mode 100644 index 000000000000..83f1bf2f7df4 --- /dev/null +++ b/assets/js/967fa6d4.9fd74d74.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[2581],{47940:(t,e,a)=>{"use strict";a.d(e,{Z:()=>d});var i=a(74165),n=a(15861),o=a(67294),s=a(87152),r=a(14741),l=a(67425);function c(t,e,a){return u.apply(this,arguments)}function u(){return(u=(0,n.Z)((0,i.Z)().mark((function t(e,a,n){var o,l,c,u,p;return(0,i.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:o=void 0,l=void 0,t.t0=e,t.next="polkadot"===t.t0?5:"kusama"===t.t0?7:"statemine"===t.t0?9:"statemint"===t.t0?11:13;break;case 5:return o="wss://rpc.polkadot.io",t.abrupt("break",14);case 7:return o="wss://kusama-rpc.polkadot.io/",t.abrupt("break",14);case 9:return o="wss://statemine-rpc.polkadot.io/",t.abrupt("break",14);case 11:return o="wss://statemint-rpc.polkadot.io/",t.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==o){t.next=18;break}return t.abrupt("return");case 18:return c=new s.U(o),t.next=21,r.G.create({provider:c});case 21:u=t.sent,(p=a.split(".")).forEach((function(t){t in u&&(u=u[t])})),t.t1=p[0],t.next="consts"===t.t1?27:"query"===t.t1?29:34;break;case 27:return l=u.toString(),t.abrupt("break",35);case 29:return t.next=31,u();case 31:return l=(l=t.sent).toString(),t.abrupt("break",35);case 34:console.log("Unknown path prefix ("+p[0]+") in "+a);case 35:return t.abrupt("return",l);case 36:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function p(t,e,a,i){switch(e){case"humanReadable":(0,l.HumanReadable)(t,a,i);break;case"precise":(0,l.Precise)(t,a,i);break;case"blocksToDays":(0,l.BlocksToDays)(t,i);break;case"erasToDays":(0,l.ErasToDays)(t,i,a);break;case"percentage":(0,l.Percentage)(t,i);break;case"permillToPercent":(0,l.PermillToPercent)(t,i);break;case"arrayLength":(0,l.ArrayLength)(t,i);break;default:return void console.log("Ignoring unknown filter type")}}const d=function(t){var e=t.network,a=t.path,s=t.defaultValue,r=t.filter,l=void 0===r?void 0:r,u=(0,o.useState)(""),d=u[0],h=u[1];return e=e.toLowerCase(),(0,o.useEffect)((function(){void 0!==l?p(s.toString(),l,e,h):h(s.toString());var t=void 0;switch(e){case"polkadot":t="wss://rpc.polkadot.io";break;case"kusama":t="wss://kusama-rpc.polkadot.io/";break;case"statemine":t="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":t="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+e)}if(void 0===t)console.log("Failed to connect to a valid websocket, applying default");else{var o=function(){var t=(0,n.Z)((0,i.Z)().mark((function t(){var n;return(0,i.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,c(e,a,h);case 2:if(void 0!==(n=t.sent)){t.next=7;break}return t.abrupt("return");case 7:void 0!==l?p(n,l,e,h):h(n);case 8:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}();try{o()}catch(r){console.log(r)}}}),[]),d}},67425:t=>{var e="polkadot",a="kusama",i="statemine",n="statemint",o={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};t.exports={HumanReadable:function(t,s,r){var l=void 0;if(s===e||s===n)l=3;else{if(s!==a&&s!==i)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}t=parseFloat(t),r((t=Number.isInteger(t/o[s].precision)?t/o[s].precision+" "+o[s].symbol:(t/o[s].precision).toFixed(l)+" "+o[s].symbol).toString())},Precise:function(t,e,a){a(t=(t=parseFloat(t))/o[e].precision+" "+o[e].symbol)},BlocksToDays:function(t,e){e((t=6*t/86400).toString())},ErasToDays:function(t,o,s){var r=void 0;if(s===e||s===n)r=1;else{if(s!==a&&s!==i)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");r=4}o((t/=r).toString())},Percentage:function(t,e){e((t/=1e7).toString())},PermillToPercent:function(t,e){e((t/=1e4).toString())},ArrayLength:function(t,e){e((t=t.split(",").length).toString())}}},91430:(t,e,a)=>{"use strict";a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>c,default:()=>g,frontMatter:()=>l,metadata:()=>u,toc:()=>d});var i=a(87462),n=a(63366),o=(a(67294),a(3905)),s=a(47940),r=["components"],l={id:"learn-guides-accounts-multisig",title:"Polkadot-JS Guides about Multi-signature Accounts",sidebar_label:"Multisig Guides",description:"Polkadot-JS Guides about Multi-signature Accounts",keyword:["guides","polkadot-js","accounts","multisig","multi-signature"],slug:"../learn-guides-accounts-multisig"},c=void 0,u={unversionedId:"learn/learn-guides-accounts-multisig",id:"learn/learn-guides-accounts-multisig",title:"Polkadot-JS Guides about Multi-signature Accounts",description:"Polkadot-JS Guides about Multi-signature Accounts",source:"@site/../docs/learn/learn-guides-accounts-multisig.md",sourceDirName:"learn",slug:"/learn-guides-accounts-multisig",permalink:"/docs/learn-guides-accounts-multisig",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-accounts-multisig.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-accounts-multisig",title:"Polkadot-JS Guides about Multi-signature Accounts",sidebar_label:"Multisig Guides",description:"Polkadot-JS Guides about Multi-signature Accounts",keyword:["guides","polkadot-js","accounts","multisig","multi-signature"],slug:"../learn-guides-accounts-multisig"},sidebar:"docs",previous:{title:"Account Guides",permalink:"/docs/learn-guides-accounts"},next:{title:"Proxy Guides",permalink:"/docs/learn-guides-accounts-proxy"}},p={},d=[{value:"Creating a Multisig Account",id:"creating-a-multisig-account",level:2},{value:"Multisig Transactions with Accounts Tab",id:"multisig-transactions-with-accounts-tab",level:2},{value:"Multisig Transactions with Extrinsic Tab",id:"multisig-transactions-with-extrinsic-tab",level:2},{value:"Multisig Call Deposit",id:"multisig-call-deposit",level:3},{value:"Example using Multisig Accounts",id:"example-using-multisig-accounts",level:3},{value:"Decoding Multisig Call Data",id:"decoding-multisig-call-data",level:2}],h={toc:d},m="wrapper";function g(t){var e=t.components,l=(0,n.Z)(t,r);return(0,o.kt)(m,(0,i.Z)({},h,l,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("div",{className:"sticky",style:{zIndex:1}},(0,o.kt)("br",null),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,o.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,o.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,o.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,o.kt)("h2",{id:"creating-a-multisig-account"},"Creating a Multisig Account"),(0,o.kt)("p",null,'Check the "How to create a multisig account" section on\n',(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181826-how-to-create-and-use-a-multisig-account"},"this support page"),".\nWe recommend trying out the tutorial on\n",(0,o.kt)("a",{parentName:"p",href:"/docs/maintain-networks#westend-test-network"},"Westend network")," - Polkadot's testnet."),(0,o.kt)("h2",{id:"multisig-transactions-with-accounts-tab"},"Multisig Transactions with Accounts Tab"),(0,o.kt)("admonition",{title:"Walkthrough Video Tutorial",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"See ",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=-cPiKMslZqI"},"this video tutorial")," to learn how to transact with\na multisig account using the Accounts Tab in the\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Polkadot-JS UI"),".")),(0,o.kt)("p",null,"You can create a multisig account directly on the Accounts Tab of the\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Polkadot-JS UI"),", and use this account to send funds. See\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181826-how-to-create-and-use-a-multisig-account"},"this support article"),"\nfor more information."),(0,o.kt)("h2",{id:"multisig-transactions-with-extrinsic-tab"},"Multisig Transactions with Extrinsic Tab"),(0,o.kt)("p",null,"There are three types of actions you can take with a multisig account:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Executing a call ",(0,o.kt)("inlineCode",{parentName:"li"},"asMulti"),". This is used to begin or end a multisig transaction."),(0,o.kt)("li",{parentName:"ul"},"Approving a call ",(0,o.kt)("inlineCode",{parentName:"li"},"approveAsMulti"),". This is used to approve an extrinsic and pass-on to the next\nsignatory (see ",(0,o.kt)("a",{parentName:"li",href:"#example-using-multi-signature-accounts"},"example below")," for more information)."),(0,o.kt)("li",{parentName:"ul"},"Cancelling a call ",(0,o.kt)("inlineCode",{parentName:"li"},"cancelAsMulti"),".")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Check out ",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/docs/substrate/extrinsics#multisig"},"this page")," for more\ninformation about the actions you can take with a multi-signature account.")),(0,o.kt)("p",null,"In scenarios where only a single approval is needed, a convenience method ",(0,o.kt)("inlineCode",{parentName:"p"},"as_multi_threshold_1"),"\nshould be used. This function takes only the other signatories and the raw call as arguments. Note\nthat the Polkadot-JS UI does not have integration for this call because it is not possible to create\nmultisig accounts with ",(0,o.kt)("inlineCode",{parentName:"p"},"threshold=1"),". If you want to create a multisig with threshold 1, you can use\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/txwrapper-core"},"txwrapper-core"),", which is developed and supported by\nParity Technologies. There is a detailed\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/txwrapper-core/tree/main/packages/txwrapper-examples/multisig"},"multisig example"),"\nthat you can try out and change to see how it works."),(0,o.kt)("p",null,"However, in anything but the simple one approval case, you will likely need more than one of the\nsignatories to approve the call before finally executing it."),(0,o.kt)("h3",{id:"multisig-call-deposit"},"Multisig Call Deposit"),(0,o.kt)("p",null,"When you create a new multi-sig call, you will need to place a\nDOT deposit. The deposit stays locked until the\ncall is executed. This deposit is to establish an economic cost on the storage space that the\nmultisig call takes up in the chain state and discourage users from creating multisig calls that\nnever get executed. The deposit will be reserved in the call initiator's account."),(0,o.kt)("p",null,"The deposit is dependent on the ",(0,o.kt)("inlineCode",{parentName:"p"},"threshold")," parameter and is calculated as follows:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"Deposit = depositBase + threshold * depositFactor\n")),(0,o.kt)("p",null,"Where ",(0,o.kt)("inlineCode",{parentName:"p"},"depositBase")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"depositFactor")," are chain constants (in\nDOT units) set in the runtime code. Currently,\nthe deposit base equals\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.multisig.depositBase",defaultValue:20088e7,filter:"humanReadable",mdxType:"RPC"}),"\n","\nand the deposit factor equals\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.multisig.depositFactor",defaultValue:32e7,filter:"humanReadable",mdxType:"RPC"}),".\n",""),(0,o.kt)("p",null,"The other signatory accounts should have enough funds to pay for the transaction fees associated\nwith approving the multisig call. The deposit is for the call; that is, other signatories will not\nneed to place additional deposits. Once the multisig call is executed or rejected, the deposit is\nreleased on the account that initiated the call."),(0,o.kt)("h3",{id:"example-using-multisig-accounts"},"Example using Multisig Accounts"),(0,o.kt)("admonition",{title:"Walk-through video tutorial",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"See ",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=T0vIuJcTJeQ"},"this video tutorial")," to learn how to transact with\na multisig account using the Extrinsic Tab in the\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS UI"),".")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"multisig diagram",src:a(706).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"Let's consider an example of a multisig on Polkadot with a threshold of 2 and 3 signers: Charlie,\nDan, and Eleanor. First, Charlie will create the call on-chain by calling the ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.asMulti"),"\nextrinsic with the raw call, in this case, a balance transfer (",(0,o.kt)("inlineCode",{parentName:"p"},"balances.transferKeepAlive"),"\nextrinsic) from multisig CDE to Frank's account. When doing this, Charlie will have to deposit\n",(0,o.kt)("inlineCode",{parentName:"p"},"DepositBase + (2 * DepositFactor) = 20.152 DOT")," while he waits for either Dan or Eleanor also to\napprove the balance transfer call using the ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.approveAsMulti")," or the ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.asMulti"),"\nextrinsics."),(0,o.kt)("p",null,"If Dan submits the ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.approveAsMulti")," extrinsic, he approves Charlie's call but he passes on\nthe final approval to Eleanor. So, although the multisig has threshold 2, in this case all 3/3\nsignatories need to participate in the transaction approval. Eleanor will need to submit a\n",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.asMulti")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.approveAsMulti")," extrinsic to transfer funds from CDE to Frank."),(0,o.kt)("p",null,"Alternatively, Dan or Eleanor can just submit a ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.asMulti")," extrinsic after Charlie to\ntransfer the funds. In this case, 2/3 signatories will participate in the transaction approval. The\naccounts approving Charlie's call will not need to place the deposit, and Charlie will receive his\ndeposit back once the transfer is successful or canceled. To cancel the transaction, Dan or Eleanor\ncan use the ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.cancelAsMulti")," extrinsic."),(0,o.kt)("p",null,"Note that multisigs are ",(0,o.kt)("strong",{parentName:"p"},"deterministic"),", which means that multisig addresses are generated from\nthe addresses of signers and the threshold of the multisig wallet. No matter the order of the\nsignatories' accounts, the multisig will always have the same address because accounts' addresses\nare sorted in ascending order."),(0,o.kt)("admonition",{title:"Addresses that are provided to the multisig wallet are sorted",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Public keys of signers' wallets are compared byte-for-byte and sorted ascending before being used to\ngenerate the multisig address. For example, consider the scenario with three addresses, A, B, and C,\nstarting with ",(0,o.kt)("inlineCode",{parentName:"p"},"5FUGT"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"5HMfS"),", and ",(0,o.kt)("inlineCode",{parentName:"p"},"5GhKJ"),". If we build the ABC multisig with the accounts in that\nspecific order (i.e. first A, then B, and C), the real order of the accounts in the multisig will be\nACB. If, in the Extrinsic tab, we initiate a multisig call with C, the order of the other\nsignatories will be first A, then B. If we put first B, then A, the transaction will fail.")),(0,o.kt)("p",null,"This has some implications when using the Extrinsics tab on the\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Polkadot-JS UI")," to perform multisig transactions. If the\norder of the ",(0,o.kt)("em",{parentName:"p"},"other signatories")," is wrong, the transaction will fail. This does not happen if the\nmultisig is executed directly from the Accounts tab (recommended). The Polkadot-JS UI supports\nmultisig accounts, as documented on the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-account-multisig"},"Account Generation page"),". You\ncan see our video tutorials for more information about creating multisig accounts and transacting\nwith them using both the ",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=-cPiKMslZqI"},"Accounts Tab")," and the\n",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=T0vIuJcTJeQ"},"Extrinsic Tab")," in the Polkadot-JS UI."),(0,o.kt)("h2",{id:"decoding-multisig-call-data"},"Decoding Multisig Call Data"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Before signing a transaction, it is important to know the exact specifics of what is being signed.\nCheck the\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181826-how-to-create-and-use-a-multisig-account"},'"How to use a multisig account"'),"\nin the support docs on how to decode the multisig call data.")))}g.isMDXComponent=!0},706:(t,e,a)=>{"use strict";a.d(e,{Z:()=>i});const i=a.p+"assets/images/multisig-diagram-90327330a3e865703a0ab1a1cc1eee47.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/967fa6d4.b96d3086.js b/assets/js/967fa6d4.b96d3086.js deleted file mode 100644 index 2cfa559e70be..000000000000 --- a/assets/js/967fa6d4.b96d3086.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[2581],{47940:(t,e,a)=>{"use strict";a.d(e,{Z:()=>d});var i=a(74165),n=a(15861),o=a(67294),s=a(87152),r=a(14741),l=a(67425);function c(t,e,a){return u.apply(this,arguments)}function u(){return(u=(0,n.Z)((0,i.Z)().mark((function t(e,a,n){var o,l,c,u,p;return(0,i.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:o=void 0,l=void 0,t.t0=e,t.next="polkadot"===t.t0?5:"kusama"===t.t0?7:"statemine"===t.t0?9:"statemint"===t.t0?11:13;break;case 5:return o="wss://rpc.polkadot.io",t.abrupt("break",14);case 7:return o="wss://kusama-rpc.polkadot.io/",t.abrupt("break",14);case 9:return o="wss://statemine-rpc.polkadot.io/",t.abrupt("break",14);case 11:return o="wss://statemint-rpc.polkadot.io/",t.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==o){t.next=18;break}return t.abrupt("return");case 18:return c=new s.U(o),t.next=21,r.G.create({provider:c});case 21:u=t.sent,(p=a.split(".")).forEach((function(t){t in u&&(u=u[t])})),t.t1=p[0],t.next="consts"===t.t1?27:"query"===t.t1?29:34;break;case 27:return l=u.toString(),t.abrupt("break",35);case 29:return t.next=31,u();case 31:return l=(l=t.sent).toString(),t.abrupt("break",35);case 34:console.log("Unknown path prefix ("+p[0]+") in "+a);case 35:return t.abrupt("return",l);case 36:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function p(t,e,a,i){switch(e){case"humanReadable":(0,l.HumanReadable)(t,a,i);break;case"precise":(0,l.Precise)(t,a,i);break;case"blocksToDays":(0,l.BlocksToDays)(t,i);break;case"erasToDays":(0,l.ErasToDays)(t,i,a);break;case"percentage":(0,l.Percentage)(t,i);break;case"permillToPercent":(0,l.PermillToPercent)(t,i);break;case"arrayLength":(0,l.ArrayLength)(t,i);break;default:return void console.log("Ignoring unknown filter type")}}const d=function(t){var e=t.network,a=t.path,s=t.defaultValue,r=t.filter,l=void 0===r?void 0:r,u=(0,o.useState)(""),d=u[0],h=u[1];return e=e.toLowerCase(),(0,o.useEffect)((function(){void 0!==l?p(s.toString(),l,e,h):h(s.toString());var t=void 0;switch(e){case"polkadot":t="wss://rpc.polkadot.io";break;case"kusama":t="wss://kusama-rpc.polkadot.io/";break;case"statemine":t="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":t="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+e)}if(void 0===t)console.log("Failed to connect to a valid websocket, applying default");else{var o=function(){var t=(0,n.Z)((0,i.Z)().mark((function t(){var n;return(0,i.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,c(e,a,h);case 2:if(void 0!==(n=t.sent)){t.next=7;break}return t.abrupt("return");case 7:void 0!==l?p(n,l,e,h):h(n);case 8:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}();try{o()}catch(r){console.log(r)}}}),[]),d}},67425:t=>{var e="polkadot",a="kusama",i="statemine",n="statemint",o={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};t.exports={HumanReadable:function(t,s,r){var l=void 0;if(s===e||s===n)l=3;else{if(s!==a&&s!==i)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}t=parseFloat(t),r((t=Number.isInteger(t/o[s].precision)?t/o[s].precision+" "+o[s].symbol:(t/o[s].precision).toFixed(l)+" "+o[s].symbol).toString())},Precise:function(t,e,a){a(t=(t=parseFloat(t))/o[e].precision+" "+o[e].symbol)},BlocksToDays:function(t,e){e((t=6*t/86400).toString())},ErasToDays:function(t,o,s){var r=void 0;if(s===e||s===n)r=1;else{if(s!==a&&s!==i)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");r=4}o((t/=r).toString())},Percentage:function(t,e){e((t/=1e7).toString())},PermillToPercent:function(t,e){e((t/=1e4).toString())},ArrayLength:function(t,e){e((t=t.split(",").length).toString())}}},91430:(t,e,a)=>{"use strict";a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>c,default:()=>g,frontMatter:()=>l,metadata:()=>u,toc:()=>d});var i=a(87462),n=a(63366),o=(a(67294),a(3905)),s=a(47940),r=["components"],l={id:"learn-guides-accounts-multisig",title:"Polkadot-JS Guides about Multi-signature Accounts",sidebar_label:"Multisig Guides",description:"Polkadot-JS Guides about Multi-signature Accounts",keyword:["guides","polkadot-js","accounts","multisig","multi-signature"],slug:"../learn-guides-accounts-multisig"},c=void 0,u={unversionedId:"learn/learn-guides-accounts-multisig",id:"learn/learn-guides-accounts-multisig",title:"Polkadot-JS Guides about Multi-signature Accounts",description:"Polkadot-JS Guides about Multi-signature Accounts",source:"@site/../docs/learn/learn-guides-accounts-multisig.md",sourceDirName:"learn",slug:"/learn-guides-accounts-multisig",permalink:"/docs/learn-guides-accounts-multisig",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-accounts-multisig.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710309813,formattedLastUpdatedAt:"Mar 13, 2024",frontMatter:{id:"learn-guides-accounts-multisig",title:"Polkadot-JS Guides about Multi-signature Accounts",sidebar_label:"Multisig Guides",description:"Polkadot-JS Guides about Multi-signature Accounts",keyword:["guides","polkadot-js","accounts","multisig","multi-signature"],slug:"../learn-guides-accounts-multisig"},sidebar:"docs",previous:{title:"Account Guides",permalink:"/docs/learn-guides-accounts"},next:{title:"Proxy Guides",permalink:"/docs/learn-guides-accounts-proxy"}},p={},d=[{value:"Creating a Multisig Account",id:"creating-a-multisig-account",level:2},{value:"Multisig Transactions with Accounts Tab",id:"multisig-transactions-with-accounts-tab",level:2},{value:"Multisig Transactions with Extrinsic Tab",id:"multisig-transactions-with-extrinsic-tab",level:2},{value:"Multisig Call Deposit",id:"multisig-call-deposit",level:3},{value:"Example using Multisig Accounts",id:"example-using-multisig-accounts",level:3},{value:"Decoding Multisig Call Data",id:"decoding-multisig-call-data",level:2}],h={toc:d},m="wrapper";function g(t){var e=t.components,l=(0,n.Z)(t,r);return(0,o.kt)(m,(0,i.Z)({},h,l,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"creating-a-multisig-account"},"Creating a Multisig Account"),(0,o.kt)("p",null,'Check the "How to create a multisig account" section on\n',(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181826-how-to-create-and-use-a-multisig-account"},"this support page"),".\nWe recommend trying out the tutorial on\n",(0,o.kt)("a",{parentName:"p",href:"/docs/maintain-networks#westend-test-network"},"Westend network")," - Polkadot's testnet."),(0,o.kt)("h2",{id:"multisig-transactions-with-accounts-tab"},"Multisig Transactions with Accounts Tab"),(0,o.kt)("admonition",{title:"Walkthrough Video Tutorial",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"See ",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=-cPiKMslZqI"},"this video tutorial")," to learn how to transact with\na multisig account using the Accounts Tab in the\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Polkadot-JS UI"),".")),(0,o.kt)("p",null,"You can create a multisig account directly on the Accounts Tab of the\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Polkadot-JS UI"),", and use this account to send funds. See\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181826-how-to-create-and-use-a-multisig-account"},"this support article"),"\nfor more information."),(0,o.kt)("h2",{id:"multisig-transactions-with-extrinsic-tab"},"Multisig Transactions with Extrinsic Tab"),(0,o.kt)("p",null,"There are three types of actions you can take with a multisig account:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Executing a call ",(0,o.kt)("inlineCode",{parentName:"li"},"asMulti"),". This is used to begin or end a multisig transaction."),(0,o.kt)("li",{parentName:"ul"},"Approving a call ",(0,o.kt)("inlineCode",{parentName:"li"},"approveAsMulti"),". This is used to approve an extrinsic and pass-on to the next\nsignatory (see ",(0,o.kt)("a",{parentName:"li",href:"#example-using-multi-signature-accounts"},"example below")," for more information)."),(0,o.kt)("li",{parentName:"ul"},"Cancelling a call ",(0,o.kt)("inlineCode",{parentName:"li"},"cancelAsMulti"),".")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Check out ",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/docs/substrate/extrinsics#multisig"},"this page")," for more\ninformation about the actions you can take with a multi-signature account.")),(0,o.kt)("p",null,"In scenarios where only a single approval is needed, a convenience method ",(0,o.kt)("inlineCode",{parentName:"p"},"as_multi_threshold_1"),"\nshould be used. This function takes only the other signatories and the raw call as arguments. Note\nthat the Polkadot-JS UI does not have integration for this call because it is not possible to create\nmultisig accounts with ",(0,o.kt)("inlineCode",{parentName:"p"},"threshold=1"),". If you want to create a multisig with threshold 1, you can use\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/txwrapper-core"},"txwrapper-core"),", which is developed and supported by\nParity Technologies. There is a detailed\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/txwrapper-core/tree/main/packages/txwrapper-examples/multisig"},"multisig example"),"\nthat you can try out and change to see how it works."),(0,o.kt)("p",null,"However, in anything but the simple one approval case, you will likely need more than one of the\nsignatories to approve the call before finally executing it."),(0,o.kt)("h3",{id:"multisig-call-deposit"},"Multisig Call Deposit"),(0,o.kt)("p",null,"When you create a new multi-sig call, you will need to place a\nDOT deposit. The deposit stays locked until the\ncall is executed. This deposit is to establish an economic cost on the storage space that the\nmultisig call takes up in the chain state and discourage users from creating multisig calls that\nnever get executed. The deposit will be reserved in the call initiator's account."),(0,o.kt)("p",null,"The deposit is dependent on the ",(0,o.kt)("inlineCode",{parentName:"p"},"threshold")," parameter and is calculated as follows:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"Deposit = depositBase + threshold * depositFactor\n")),(0,o.kt)("p",null,"Where ",(0,o.kt)("inlineCode",{parentName:"p"},"depositBase")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"depositFactor")," are chain constants (in\nDOT units) set in the runtime code. Currently,\nthe deposit base equals\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.multisig.depositBase",defaultValue:20088e7,filter:"humanReadable",mdxType:"RPC"}),"\n","\nand the deposit factor equals\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.multisig.depositFactor",defaultValue:32e7,filter:"humanReadable",mdxType:"RPC"}),".\n",""),(0,o.kt)("p",null,"The other signatory accounts should have enough funds to pay for the transaction fees associated\nwith approving the multisig call. The deposit is for the call; that is, other signatories will not\nneed to place additional deposits. Once the multisig call is executed or rejected, the deposit is\nreleased on the account that initiated the call."),(0,o.kt)("h3",{id:"example-using-multisig-accounts"},"Example using Multisig Accounts"),(0,o.kt)("admonition",{title:"Walk-through video tutorial",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"See ",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=T0vIuJcTJeQ"},"this video tutorial")," to learn how to transact with\na multisig account using the Extrinsic Tab in the\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS UI"),".")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"multisig diagram",src:a(706).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"Let's consider an example of a multisig on Polkadot with a threshold of 2 and 3 signers: Charlie,\nDan, and Eleanor. First, Charlie will create the call on-chain by calling the ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.asMulti"),"\nextrinsic with the raw call, in this case, a balance transfer (",(0,o.kt)("inlineCode",{parentName:"p"},"balances.transferKeepAlive"),"\nextrinsic) from multisig CDE to Frank's account. When doing this, Charlie will have to deposit\n",(0,o.kt)("inlineCode",{parentName:"p"},"DepositBase + (2 * DepositFactor) = 20.152 DOT")," while he waits for either Dan or Eleanor also to\napprove the balance transfer call using the ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.approveAsMulti")," or the ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.asMulti"),"\nextrinsics."),(0,o.kt)("p",null,"If Dan submits the ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.approveAsMulti")," extrinsic, he approves Charlie's call but he passes on\nthe final approval to Eleanor. So, although the multisig has threshold 2, in this case all 3/3\nsignatories need to participate in the transaction approval. Eleanor will need to submit a\n",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.asMulti")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.approveAsMulti")," extrinsic to transfer funds from CDE to Frank."),(0,o.kt)("p",null,"Alternatively, Dan or Eleanor can just submit a ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.asMulti")," extrinsic after Charlie to\ntransfer the funds. In this case, 2/3 signatories will participate in the transaction approval. The\naccounts approving Charlie's call will not need to place the deposit, and Charlie will receive his\ndeposit back once the transfer is successful or canceled. To cancel the transaction, Dan or Eleanor\ncan use the ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.cancelAsMulti")," extrinsic."),(0,o.kt)("p",null,"Note that multisigs are ",(0,o.kt)("strong",{parentName:"p"},"deterministic"),", which means that multisig addresses are generated from\nthe addresses of signers and the threshold of the multisig wallet. No matter the order of the\nsignatories' accounts, the multisig will always have the same address because accounts' addresses\nare sorted in ascending order."),(0,o.kt)("admonition",{title:"Addresses that are provided to the multisig wallet are sorted",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Public keys of signers' wallets are compared byte-for-byte and sorted ascending before being used to\ngenerate the multisig address. For example, consider the scenario with three addresses, A, B, and C,\nstarting with ",(0,o.kt)("inlineCode",{parentName:"p"},"5FUGT"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"5HMfS"),", and ",(0,o.kt)("inlineCode",{parentName:"p"},"5GhKJ"),". If we build the ABC multisig with the accounts in that\nspecific order (i.e. first A, then B, and C), the real order of the accounts in the multisig will be\nACB. If, in the Extrinsic tab, we initiate a multisig call with C, the order of the other\nsignatories will be first A, then B. If we put first B, then A, the transaction will fail.")),(0,o.kt)("p",null,"This has some implications when using the Extrinsics tab on the\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Polkadot-JS UI")," to perform multisig transactions. If the\norder of the ",(0,o.kt)("em",{parentName:"p"},"other signatories")," is wrong, the transaction will fail. This does not happen if the\nmultisig is executed directly from the Accounts tab (recommended). The Polkadot-JS UI supports\nmultisig accounts, as documented on the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-account-multisig"},"Account Generation page"),". You\ncan see our video tutorials for more information about creating multisig accounts and transacting\nwith them using both the ",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=-cPiKMslZqI"},"Accounts Tab")," and the\n",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=T0vIuJcTJeQ"},"Extrinsic Tab")," in the Polkadot-JS UI."),(0,o.kt)("h2",{id:"decoding-multisig-call-data"},"Decoding Multisig Call Data"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Before signing a transaction, it is important to know the exact specifics of what is being signed.\nCheck the\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181826-how-to-create-and-use-a-multisig-account"},'"How to use a multisig account"'),"\nin the support docs on how to decode the multisig call data.")))}g.isMDXComponent=!0},706:(t,e,a)=>{"use strict";a.d(e,{Z:()=>i});const i=a.p+"assets/images/multisig-diagram-90327330a3e865703a0ab1a1cc1eee47.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/9913464d.625b4a67.js b/assets/js/9913464d.625b4a67.js new file mode 100644 index 000000000000..018a647e0aee --- /dev/null +++ b/assets/js/9913464d.625b4a67.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5341],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>h});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),p=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},m="mdxType",u={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,r=e.mdxType,o=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=p(a),d=r,h=m["".concat(s,".").concat(d)]||m[d]||u[d]||o;return a?n.createElement(h,i(i({ref:t},c),{},{components:a})):n.createElement(h,i({ref:t},c))}));function h(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[m]="string"==typeof e?e:r,i[1]=l;for(var p=2;p{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>h,frontMatter:()=>l,metadata:()=>p,toc:()=>m});var n=a(87462),r=a(63366),o=(a(67294),a(3905)),i=["components"],l={id:"learn-governance",title:"Governance V1",sidebar_label:"Governance V1",description:"Polkadot's First Governance Model.",keywords:["governance","referenda","proposal","voting","endorse"],slug:"../learn-governance"},s=void 0,p={unversionedId:"learn/archive/learn-governance",id:"learn/archive/learn-governance",title:"Governance V1",description:"Polkadot's First Governance Model.",source:"@site/../docs/learn/archive/learn-governance.md",sourceDirName:"learn/archive",slug:"/learn/learn-governance",permalink:"/docs/learn/learn-governance",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/archive/learn-governance.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-governance",title:"Governance V1",sidebar_label:"Governance V1",description:"Polkadot's First Governance Model.",keywords:["governance","referenda","proposal","voting","endorse"],slug:"../learn-governance"},sidebar:"docs",previous:{title:"Archive",permalink:"/docs/learn-archive"},next:{title:"Gov1 Treasury",permalink:"/docs/learn/learn-treasury"}},c={},m=[{value:"Governance Summary",id:"governance-summary",level:2},{value:"Proposals",id:"proposals",level:2},{value:"Endorsing Proposals",id:"endorsing-proposals",level:3},{value:"Cancelling Proposals",id:"cancelling-proposals",level:3},{value:"Blacklisting Proposals",id:"blacklisting-proposals",level:3},{value:"Referenda",id:"referenda",level:2},{value:"Referenda Timeline",id:"referenda-timeline",level:3},{value:"Public Referenda",id:"public-referenda",level:3},{value:"Council Referenda",id:"council-referenda",level:3},{value:"Alternating Voting Timetable",id:"alternating-voting-timetable",level:3},{value:"Adaptive Quorum Biasing",id:"adaptive-quorum-biasing",level:3},{value:"Example of Adaptive Quorum Biasing",id:"example-of-adaptive-quorum-biasing",level:4},{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:"Delegations",id:"delegations",level:3},{value:"Council",id:"council",level:2},{value:"Prime Members",id:"prime-members",level:3},{value:"Technical Committee",id:"technical-committee",level:2},{value:"Frequently Asked Questions",id:"frequently-asked-questions",level:2},{value:"How to be a council member?",id:"how-to-be-a-council-member",level:3},{value:"How can I appeal to the council to enact a change on my behalf?",id:"how-can-i-appeal-to-the-council-to-enact-a-change-on-my-behalf",level:3},{value:"Resources",id:"resources",level:2}],u={toc:m},d="wrapper";function h(e){var t=e.components,l=(0,r.Z)(e,i);return(0,o.kt)(d,(0,n.Z)({},u,l,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("div",{className:"sticky",style:{zIndex:1}},(0,o.kt)("br",null),(0,o.kt)("p",null,"The content on this page is archived. For up-to-date information about governance, see the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},"Polkadot OpenGov page"),".")),(0,o.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,o.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,o.kt)("a",{parentName:"p",href:"/docs/learn-wasm"},"WebAssembly"),"). It also allows for\nseveral on-chain voting mechanisms, such as referenda with the novel concept of\n",(0,o.kt)("a",{parentName:"p",href:"#adaptive-quorum-biasing"},"Adaptive Quorum Biasing")," and batch approval voting. All changes to the\nprotocol must be agreed upon by stake-weighted referenda."),(0,o.kt)("p",null,"To make any changes to the network, the idea is to compose active token holders and the council\ntogether to administrate a network upgrade decision. No matter whether the proposal is proposed by\nthe public (token holders) or the ",(0,o.kt)("a",{parentName:"p",href:"#council"},"Council"),", it finally will have to go through a vote on\na referendum to let all holders, weighted by stake, make the decision."),(0,o.kt)("h2",{id:"governance-summary"},"Governance Summary"),(0,o.kt)("p",null,"The figure below shows an overview of Governance V1 with the key actors and different paths for\nsubmitting a proposal that can potentially be voted on as a referendum."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"gov1-overview",src:a(74562).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"The public (i.e. token holders) can submit a proposal that gets added to the proposal queue. Here,\nproposals are ",(0,o.kt)("a",{parentName:"p",href:"#endorsing-proposals"},"endorsed"),", and the one that gets the most support will climb to\nthe top of the queue. When it is time, the proposal at the top of the queue will become a\n",(0,o.kt)("a",{parentName:"p",href:"#public-referenda"},"Public Referendum"),". For instance, the proposal with 11 endorsements is shown at\nthe top of the queue in the figure, which is ready to become a referendum."),(0,o.kt)("p",null,"The public can also submit a ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn/learn-treasury#creating-a-treasury-proposal"},"treasury proposal"),",\nwhich must be evaluated by the ",(0,o.kt)("a",{parentName:"p",href:"#council"},"Council")," through a motion. If the Council motion passes,\nthe treasury proposal can be directly executed or go to the external queue, which will be voted on\nthrough a ",(0,o.kt)("a",{parentName:"p",href:"#council-referenda"},"Council Referendum"),". See the figure's green horizontal path from the\nPublic (green) to the Council (yellow). Treasury proposals and Council proposals can be directly\nexecuted (horizontal yellow arrows) or go to the external queue, where they will become a referendum"),(0,o.kt)("p",null,"Note that the external queue always consists of\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/blob/f4a2e84ee5974b219f2a03cd195105060c41e3cd/frame/democracy/src/lib.rs#LL29C8-L31C4"},"a single proposal"),".\nA proposal in the external queue can be fast-tracked by the\n",(0,o.kt)("a",{parentName:"p",href:"#technical-committee"},"Technical Committee")," (light blue). The fast track can contain as many\nproposals as possible (also called emergency proposals) that can be voted on simultaneously with\nwith the referenda introduced either by the Council or the Public. See in the figure the yellow\ncircle (i.e. Council Proposal) exiting the external queue, and the yellow circle with a light-blue\nborder also leaving the queue and being fast-tracked by the Technical Committee (TC). Once empty,\nthe external queue can be filled with another Council proposal."),(0,o.kt)("p",null,"The Council can also submit proposals that will end up in the external queue. Voting on Council and\nPublic proposals subject to an ",(0,o.kt)("a",{parentName:"p",href:"#alternating-voting-timetable"},"alternating timetable"),', shown in the\nfigure as the "on" and "off" toggles on the external and proposal queues. In this example, the\nPublic proposal will be voted on together with the fast-tracked Council Proposal. Voting on\nnon-fast-tracked Council Proposals will be blocked until the alternating timetable switches the\ntoggles, which stops Public proposals from becoming a referenda.'),(0,o.kt)("p",null,"Referenda will follow an ",(0,o.kt)("a",{parentName:"p",href:"#adaptive-quorum-biasing"},"adaptive quorum biasing")," mechanism for deciding\nwhether they get enacted, and if they do, they will be executed after an\n",(0,o.kt)("a",{parentName:"p",href:"#enactment"},"enactment period"),"."),(0,o.kt)("p",null,"Token holders can delegate their votes (with a conviction multiplier) to another account belonging\nto a trusted entity voting on their behalf."),(0,o.kt)("h2",{id:"proposals"},"Proposals"),(0,o.kt)("p",null,"Referenda can be started in different ways:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Publicly submitted proposals"),(0,o.kt)("li",{parentName:"ul"},"Proposals submitted by the council, either through a majority or unanimously"),(0,o.kt)("li",{parentName:"ul"},"Proposals submitted as part of the ",(0,o.kt)("a",{parentName:"li",href:"#enactment"},"enactment")," of a prior referendum (i.e. making a\nreferendum to start a new referendum)"),(0,o.kt)("li",{parentName:"ul"},"Emergency proposals submitted by the ",(0,o.kt)("a",{parentName:"li",href:"#technical-committee"},"Technical Committee")," and approved by\nthe ",(0,o.kt)("a",{parentName:"li",href:"#council"},"Council"))),(0,o.kt)("admonition",{title:"Starting a proposal in Governance V1",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"For more information about how to start a proposal, see the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/maintain/maintain-guides-democracy#proposing-an-action"},"dedicated page"),".")),(0,o.kt)("h3",{id:"endorsing-proposals"},"Endorsing Proposals"),(0,o.kt)("p",null,"Anyone can submit a proposal by depositing the minimum amount of tokens for a certain period (number\nof blocks). If someone agrees with the proposal, they may deposit the same amount of tokens to\nsupport it - this action is called\n",(0,o.kt)("a",{parentName:"p",href:"/docs/maintain/maintain-guides-democracy#endorsing-a-proposal"},(0,o.kt)("em",{parentName:"a"},"endorsing")),". The\nproposal with the highest amount of bonded support will be selected to be a referendum in the next\nvoting cycle based on an ",(0,o.kt)("a",{parentName:"p",href:"#alternating-voting-timetable"},"alternating voting timetable"),"."),(0,o.kt)("h3",{id:"cancelling-proposals"},"Cancelling Proposals"),(0,o.kt)("p",null,"A proposal can be canceled if the ",(0,o.kt)("a",{parentName:"p",href:"#technical-committee"},"Technical Committee")," unanimously agrees to\ndo so or if Root Origin (e.g. sudo) triggers this functionality. A canceled proposal's deposit is\nburned."),(0,o.kt)("p",null,"Additionally, a two-thirds majority of the council can cancel a referendum. This may function as a\nlast-resort if there is an issue found late in a referendum's proposal, such as a bug in the code of\nthe runtime that the proposal would institute."),(0,o.kt)("p",null,"If the cancellation is controversial enough that the council cannot get a two-thirds majority, then\nit will be left to the stakeholders ",(0,o.kt)("em",{parentName:"p"},"en masse")," to determine the proposal\u2019s fate."),(0,o.kt)("h3",{id:"blacklisting-proposals"},"Blacklisting Proposals"),(0,o.kt)("p",null,"A proposal can be blacklisted by Root Origin (e.g. sudo). A blacklisted proposal and its related\nreferendum (if any) are immediately ",(0,o.kt)("a",{parentName:"p",href:"#canceling"},"canceled"),". Additionally, a blacklisted proposal's\nhash cannot re-appear in the proposal queue. Blacklisting is useful when removing erroneous\nproposals that could be submitted with the same hash."),(0,o.kt)("p",null,"Upon seeing their proposal removed, a submitter who is not properly introduced to the democracy\nsystem of Polkadot might be tempted to\nre-submit the same proposal. That said, this is far from a fool-proof method of preventing invalid\nproposals from being submitted - a single changed character in a proposal's text will also change\nthe hash of the proposal, rendering the per-hash blacklist invalid."),(0,o.kt)("h2",{id:"referenda"},"Referenda"),(0,o.kt)("p",null,"Referenda are simple, inclusive, stake-based voting schemes. Each referendum has a specific proposal\nthat takes the form of a ",(0,o.kt)("strong",{parentName:"p"},"privileged function")," call in the runtime. That function includes the\nmost powerful ",(0,o.kt)("strong",{parentName:"p"},"call"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"set_code"),', which can switch out the entire runtime code, achieving what\nwould otherwise require a "hard fork".'),(0,o.kt)("p",null,'Referenda are discrete events, have a fixed period where voting happens, and then are tallied, and\nthe function call is executed if the vote is approved. Referenda are always binary: your only\noptions in voting are "aye", "nay", or abstaining entirely.'),(0,o.kt)("h3",{id:"referenda-timeline"},"Referenda Timeline"),(0,o.kt)("p",null,"The structure of the timeline for all referenda is the same regardless of who initiates the\nproposal, although the timeline length can vary (see below)."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"gov1-timeline",src:a(11173).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"The figure above provides a summary view of the referenda timeline for Governance V1."),(0,o.kt)("p",null,"In (1), the proposal is submitted, and the Launch Period starts. During this period of indefinite\nlength the voters can ",(0,o.kt)("a",{parentName:"p",href:"#endorsing-proposals"},"endorse")," proposals by bonding the same amount of tokens\nused by the depositor. Deposited tokens for endorsement will be returned once the proposal becomes a\nreferendum. During the launch period, the proposal will compete with other proposals, and the one\nthat gets to the top will be selected for a referendum when the next voting period starts."),(0,o.kt)("p",null,"The figure shows that the launch period is shown with a fixed length. Still, it varies depending on\nwho initiated the proposal and how many proposals there are in the pipeline. Council motions will\nlikely have a short launch period when compared to the public referenda which might take longer\nunless they are the only ones in the pipeline."),(0,o.kt)("p",null,"In (2), the proposal is selected for a referendum. Proposals initiated by the public will become a\n",(0,o.kt)("a",{parentName:"p",href:"#public-referenda"},"public referendum"),", while those initiated by the council will become\n",(0,o.kt)("a",{parentName:"p",href:"#council-referenda"},"council referenda"),". The voting period lasts\n28 days, after which, if the proposal is\napproved, it will go through an enactment period. Rejected proposals will need to start from (1).\nNote that Governance V1 uses an ",(0,o.kt)("a",{parentName:"p",href:"#alternating-voting-timetable"},"alternating voting timeline")," where\nvoters can vote either for a public proposal or a council motion every\n28 days."),(0,o.kt)("p",null,"In (3), the proposal is approved and moves through the ",(0,o.kt)("a",{parentName:"p",href:"#enactment"},"enactment period")," that can be of\ndifferent lengths depending on who initiated the proposal in the first place, with emergency\nproposals being the fastest ones and the only ones that can be voted simultaneously with other\nreferenda."),(0,o.kt)("h3",{id:"public-referenda"},"Public Referenda"),(0,o.kt)("p",null,"Public referenda will have a ",(0,o.kt)("a",{parentName:"p",href:"#adaptive-quorum-biasing"},(0,o.kt)("strong",{parentName:"a"},"positive turnout bias")),", meaning that\nthey will require a heavy supermajority of ",(0,o.kt)("em",{parentName:"p"},"aye")," votes to pass at low turnouts but as turnout\nincreases towards 100%, it will require a simple majority of ",(0,o.kt)("em",{parentName:"p"},"aye")," votes to pass (i.e. 51% wins)."),(0,o.kt)("p",null,"Note that the bonded tokens will be released once the proposal is tabled (that is, brought to a\nvote), and a maximum of 100 public proposals can\nbe in the proposal queue."),(0,o.kt)("admonition",{title:"turnout",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"The total number of voting tokens excluding conviction or ",(0,o.kt)("a",{parentName:"p",href:"#voluntary-locking"},"voluntary locking"),".")),(0,o.kt)("h3",{id:"council-referenda"},"Council Referenda"),(0,o.kt)("p",null,"Unanimous Council - When all council members agree on a proposal, it can be moved to a referendum\nwith a ",(0,o.kt)("a",{parentName:"p",href:"#adaptive-quorum-biasing"},(0,o.kt)("strong",{parentName:"a"},"negative turnout bias")),". Briefly, it will require a heavy\nsupermajority of ",(0,o.kt)("em",{parentName:"p"},"nay")," votes to reject at low turnouts, but as turnout increases towards 100%, it\nwill require a simple majority of ",(0,o.kt)("em",{parentName:"p"},"nay")," votes to fail (i.e. 51% wins)."),(0,o.kt)("p",null,"Majority Council - When agreement from only a simple majority of council members occurs, the\nreferendum will need ",(0,o.kt)("a",{parentName:"p",href:"#adaptive-quorum-biasing"},(0,o.kt)("strong",{parentName:"a"},"simple majority"))," to pass."),(0,o.kt)("admonition",{title:"Public- vs. Council-initiated Referenda",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Public referenda must be agreed upon using a positive bias to mitigate attacks by malicious or\nill-conceived proposals. Conversely, when a proposal is unanimously voted in favor by the council,\nit benefits from using the negative bias. We assume low turnout is less problematic if the council\nproposes a referendum. Also, the council members are elected by the community and have strong\ntechnical as well as functional knowledge about the system, and we assume solid justifications back\nchanges proposed by the council.")),(0,o.kt)("h3",{id:"alternating-voting-timetable"},"Alternating Voting Timetable"),(0,o.kt)("p",null,"All referenda are executed by Root Origin. It follows that multiple referenda cannot be voted upon\nin the same period, excluding emergency referenda. An emergency referendum occurring at the same\ntime as a regular referendum (either public- or council-proposed) is the only time multiple\nreferenda can be voted on."),(0,o.kt)("p",null,"Every 28 days, a new referendum will come up for a\nvote, assuming there is at least one proposal in one of the queues. There is a queue for\nCouncil-approved proposals and a queue for publicly-submitted proposals. The referendum to be voted\nupon alternates between the top proposal in the two queues, where the proposals' rank is based on\n",(0,o.kt)("a",{parentName:"p",href:"#endorsing-proposals"},"endorsement")," (i.e. bonded tokens)."),(0,o.kt)("h3",{id:"adaptive-quorum-biasing"},"Adaptive Quorum Biasing"),(0,o.kt)("p",null,"Polkadot introduces the concept of ",(0,o.kt)("strong",{parentName:"p"},"Adaptive\nQuorum Biasing"),", which is used to alter the effective super-majority required to make it easier or\nmore difficult for a proposal to pass depending on voting power (turnout) and origin (Council or\npublic)."),(0,o.kt)("p",null,"Adaptive Quorum Biasing creates three tallying mechanisms: majority carry, super-majority approve,\nand super-majority against. They all equate to a simple majority-carry system at 100% turnout. Their\nselection depends on which entity proposed the proposal and whether all Council members voted yes\n(in the case of Council Referenda)."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"th"},"Entity")),(0,o.kt)("th",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"th"},"Metric")))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Public"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Positive Turnout Bias (Super-Majority Approve)")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Council (Complete agreement)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Negative Turnout Bias (Super-Majority Against)")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Council (Majority agreement)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Simple Majority")))),(0,o.kt)("p",null,"Let's use the image below as an example."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"adaptive-quorum-biasing",src:a(72895).Z,width:"537",height:"439"})),(0,o.kt)("p",null,"If a publicly submitted referendum only has a 25% turnout, the tally of ",(0,o.kt)("em",{parentName:"p"},"aye")," votes has to reach 66%\nfor it to pass since we applied ",(0,o.kt)("strong",{parentName:"p"},"Positive Turnout Bias"),". In contrast, when it has a 75% turnout,\nthe tally of ",(0,o.kt)("em",{parentName:"p"},"aye")," votes has to reach 54%, which means that the super-majority required decreases as\nthe turnout increases. A positive turnout bias, whereby a heavy super-majority of aye votes is\nrequired to carry at low turnouts. However, as turnout increases towards 100%, it becomes a simple\nmajority carry as below."),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://latex.codecogs.com/svg.latex?%5Clarge&space;%7Bagainst&space;%5Cover&space;%5Csqrt%7Bturnout%7D%7D&space;%3C&space;%7Bapprove&space;%5Cover&space;%5Csqrt%7Belectorate%7D%7D",alt:null})),(0,o.kt)("p",null,"Where ",(0,o.kt)("inlineCode",{parentName:"p"},"approve")," is the number of ",(0,o.kt)("em",{parentName:"p"},"aye")," votes, ",(0,o.kt)("inlineCode",{parentName:"p"},"against")," is the number of ",(0,o.kt)("em",{parentName:"p"},"nay")," votes, ",(0,o.kt)("inlineCode",{parentName:"p"},"turnout")," is\nthe total number of voting tokens excluding ",(0,o.kt)("a",{parentName:"p",href:"#voluntary-locking"},"voluntary locking"),", and\n",(0,o.kt)("inlineCode",{parentName:"p"},"electorate")," is the total number of tokens issued in the network."),(0,o.kt)("p",null,"When the council proposes a new proposal through unanimous consent, the referendum would be put to\nthe vote using ",(0,o.kt)("strong",{parentName:"p"},"Negative Turnout Bias"),". Referring to the above image, when a Council referendum\nonly has a 25% turnout, the tally of ",(0,o.kt)("em",{parentName:"p"},"aye")," votes has to reach 34% for it to pass, while if the\nturnout increases to 75%, the tally of ",(0,o.kt)("em",{parentName:"p"},"aye")," votes has to reach 46%. A negative turnout bias\nrequires a heavy super-majority of ",(0,o.kt)("em",{parentName:"p"},"nay")," votes to reject at low turnouts. However, as turnout\nincreases towards 100%, it becomes a simple majority carry as below."),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://latex.codecogs.com/svg.latex?%5Clarge&space;%7Bagainst&space;%5Cover&space;%5Csqrt%7Belectorate%7D%7D&space;%3C&space;%7Bapprove&space;%5Cover&space;%5Csqrt%7Bturnout%7D%7D",alt:null})),(0,o.kt)("p",null,"In short, when the turnout rate is low, a super-majority is required to reject the proposal, which\nmeans a lower threshold of ",(0,o.kt)("em",{parentName:"p"},"aye")," votes must be reached. As turnout increases toward 100%, it becomes\na simple majority, a simple comparison of votes. If there are more ",(0,o.kt)("em",{parentName:"p"},"aye")," votes than ",(0,o.kt)("em",{parentName:"p"},"nay"),", then the\nproposal is carried, no matter how much stake votes on the proposal."),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://latex.codecogs.com/svg.latex?%5Clarge&space;%7Bapprove%7D&space;%3E&space;%7Bagainst%7D",alt:null})),(0,o.kt)("p",null,"To know more about where these above formulas come from, please read the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/blob/master/frame/democracy/src/vote_threshold.rs"},"democracy pallet"),"."),(0,o.kt)("h4",{id:"example-of-adaptive-quorum-biasing"},"Example of Adaptive Quorum Biasing"),(0,o.kt)("p",null,"Let's assume we only have 1,500 DOT tokens in\ntotal and that this is a public proposal."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"John: 500 DOT"),(0,o.kt)("li",{parentName:"ul"},"Peter: 100 DOT"),(0,o.kt)("li",{parentName:"ul"},"Lilly: 150 DOT"),(0,o.kt)("li",{parentName:"ul"},"JJ: 150 DOT"),(0,o.kt)("li",{parentName:"ul"},"Ken: 600 DOT")),(0,o.kt)("p",null,"John: Votes ",(0,o.kt)("inlineCode",{parentName:"p"},"Yes")," for a 4 week lock period =>\n500 x 1 = 500 Votes"),(0,o.kt)("p",null,"Peter: Votes ",(0,o.kt)("inlineCode",{parentName:"p"},"Yes")," for a 4 week lock period =>\n100 x 1 = 100 Votes"),(0,o.kt)("p",null,"JJ: Votes ",(0,o.kt)("inlineCode",{parentName:"p"},"No")," for a 16 week lock period =>\n150 x 3 = 450 Votes"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"approve = 600"),(0,o.kt)("li",{parentName:"ul"},"against = 450"),(0,o.kt)("li",{parentName:"ul"},"turnout = 750"),(0,o.kt)("li",{parentName:"ul"},"electorate = 1500")),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://latex.codecogs.com/svg.latex?%5Clarge&space;%5Cfrac%7B450%7D%7B%5Csqrt%7B750%7D%7D&space;%3C&space;%5Cfrac%7B600%7D%7B%5Csqrt%7B1500%7D%7D",alt:"\\Large \\frac{450}{\\sqrt{750}}&space;<&space;\\frac{600}{\\sqrt{1500}}"})),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://latex.codecogs.com/svg.latex?%5Clarge&space;%7B16.432%7D&space;%3C&space;%7B15.492%7D",alt:"\\Large {16.432}&space;<&space;{15.492}"})),(0,o.kt)("p",null,"Since the above example is a public referendum, ",(0,o.kt)("strong",{parentName:"p"},"Super-Majority Approve")," would be used to\ncalculate the result. Super-Majority Approve requires more ",(0,o.kt)("em",{parentName:"p"},"aye")," votes to pass the referendum when\nturnout is low; therefore, based on the above result, the referendum will be rejected."),(0,o.kt)("admonition",{title:"only the winning voter's tokens are locked.",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"If the voters on the losing side of the referendum believe that the outcome will have adverse\neffects, their tokens are transferrable, so they will not be locked into the decision. Winning\nproposals are autonomously enacted after the ",(0,o.kt)("a",{parentName:"p",href:"#enactment"},"enactment period"),".")),(0,o.kt)("h3",{id:"enactment"},"Enactment"),(0,o.kt)("p",null,"Referenda are considered ",(0,o.kt)("em",{parentName:"p"},"baked")," if they are closed and tallied. Assuming a referendum is approved,\nit will be scheduled for ",(0,o.kt)("strong",{parentName:"p"},"enactment"),". Referenda are considered ",(0,o.kt)("em",{parentName:"p"},"unbaked")," if they are pending an\noutcome, i.e. being voted on."),(0,o.kt)("p",null,"All referenda are associated with an enactment delay or ",(0,o.kt)("strong",{parentName:"p"},"enactment period"),". This is the period\nbetween a referendum ending and (assuming it was approved) the changes being enacted."),(0,o.kt)("p",null,'For public and Council referenda, the enactment period is a fixed time of\n28 days. For proposals submitted as part of\nthe enactment of a prior referendum, it can be set as desired. Emergency proposals deal with major\nproblems with the network and need to be "fast-tracked". These will have a shorter enactment period.'),(0,o.kt)("h2",{id:"voting-on-a-referendum"},"Voting on a Referendum"),(0,o.kt)("p",null,"To vote, a voter generally must lock their tokens up for at least the enactment period beyond the\nend of the referendum. This is to ensure that some minimal economic buy-in to the result is needed\nand to dissuade vote selling."),(0,o.kt)("admonition",{title:"Referenda explainer video",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"To learn more about voting on referenda, please check out our\n",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=BkbhhlsezGA&list=PLOyWqupZ-WGuAuS00rK-pebTMAOxW41W8&index=31&ab_channel=Polkadot"},"technical explainer video"),".")),(0,o.kt)("p",null,"It is possible to vote without locking, but your vote is worth a small fraction of a normal vote,\ngiven your stake. At the same time, holding only a small amount of tokens does not mean that the\nholder cannot influence the referendum result, thanks to time-locking or ",(0,o.kt)("strong",{parentName:"p"},"voluntary locking")," (see\nbelow)."),(0,o.kt)("h3",{id:"voluntary-locking"},"Voluntary Locking"),(0,o.kt)("admonition",{title:"Voluntary Locking",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"For more information about voluntary locking or conviction voting see\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov#voluntary-locking"},"Polkadot OpenGov"),".")),(0,o.kt)("h3",{id:"delegations"},"Delegations"),(0,o.kt)("p",null,"In Polkadot you can\n",(0,o.kt)("a",{parentName:"p",href:"/docs/maintain/maintain-guides-democracy#delegate-a-vote"},"delegate your voting power")," to\nanother account you trust if you are not willing to stay up-to-date with all referenda."),(0,o.kt)("p",null,"You can also use a ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-proxies#governance-proxy"},"governance proxy")," to vote on behalf of\nyour stash account. The proxy can be yours, or you can authorize a third-party governance proxy to\nvote with your stash. Learn more from the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-proxies"},"dedicated page on Proxy Accounts"),"."),(0,o.kt)("h2",{id:"council"},"Council"),(0,o.kt)("p",null,'To represent passive stakeholders, Polkadot\nintroduces the idea of a "council". The council is an on-chain entity comprising several actors,\neach represented as an on-chain account. On\nPolkadot, the council currently consists of\n13 members.'),(0,o.kt)("p",null,"Along with ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn/learn-treasury"},"controlling the treasury"),", the council is called upon primarily for\nthree tasks of governance:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Proposing sensible referenda"),(0,o.kt)("li",{parentName:"ul"},"Cancelling uncontroversially dangerous or malicious referenda"),(0,o.kt)("li",{parentName:"ul"},"Electing the ",(0,o.kt)("a",{parentName:"li",href:"#technical-committee"},"Technical Committee"),".")),(0,o.kt)("p",null,"For a referendum to be proposed by the council, a strict majority of members must be in favor, with\nno member exercising a veto. Vetoes may be exercised only once by a member for any single proposal.\nIf the proposal is resubmitted after a cool-down period, they may not veto it a second time."),(0,o.kt)("p",null,"Council motion that pass with a 3/5 (60%) super-majority - but without reaching unanimous support -\nwill move to a public referendum under a neutral, majority-carries voting scheme. In the case that\nall members of the council that voted are in favor of a motion, the vote is considered unanimous and\nbecomes a referendum with ",(0,o.kt)("a",{parentName:"p",href:"#adaptive-quorum-biasing"},"negative turnout bias"),"."),(0,o.kt)("admonition",{title:"Explainer video on the Council",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"For more information, check out our\n",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=837Vv3gdRzI"},"video explainer on Council"))),(0,o.kt)("h3",{id:"prime-members"},"Prime Members"),(0,o.kt)("p",null,"The council, being an instantiation of\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/tree/master/frame/collective"},"Substrate's Collective pallet"),",\nimplements what's called a ",(0,o.kt)("em",{parentName:"p"},"prime member")," whose vote acts as the default for other members that fail\nto vote before the timeout."),(0,o.kt)("p",null,"The prime member is chosen based on a ",(0,o.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Borda_count"},"Borda count"),"."),(0,o.kt)("p",null,'The purpose of having a prime council member is to ensure a quorum, even when several members\nabstain from a vote. Council members might be tempted to vote a "soft rejection" or a "soft\napproval" by not voting and letting the others vote. The existence of a prime member forces\ncouncilors to be explicit in their votes or have their vote counted for whatever is voted on by the\nprime.'),(0,o.kt)("h2",{id:"technical-committee"},"Technical Committee"),(0,o.kt)("p",null,"The Technical Committee(TC) was introduced in the\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.network/kusama-rollout-and-governance/"},"Kusama rollout and governance post")," as one\nof the three chambers of Kusama governance (along with the Council and the Referendum chamber). The\nTC is composed of the teams that have successfully implemented or specified either a\nPolkadot runtime or Polkadot Host. Teams are\nadded or removed from the TC via a simple majority vote of the ",(0,o.kt)("a",{parentName:"p",href:"#council"},"Council"),"."),(0,o.kt)("p",null,'The TC aims to safeguard against malicious referenda, implement bug fixes, reverse faulty runtime\nupdates, or add new but battle-tested features. The TC can fast-track proposals using the Democracy\npallet and is the only origin that can trigger the fast-tracking functionality. We can think of the\nTC as a "unique origin" that cannot generate proposals but fast-track existing ones.'),(0,o.kt)("p",null,"Fast-tracked referenda are the only referenda that can be active alongside another active\nreferendum. Thus, with fast-tracked referenda, it is possible to have two active referendums\nsimultaneously. Voting on one does not prevent a user from voting on the other."),(0,o.kt)("h2",{id:"frequently-asked-questions"},"Frequently Asked Questions"),(0,o.kt)("h3",{id:"how-to-be-a-council-member"},"How to be a council member?"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"approval-vote",src:a(93395).Z,width:"850",height:"340"})),(0,o.kt)("p",null,"All stakeholders can signal their approval of any of the registered candidates."),(0,o.kt)("p",null,"Council elections are handled by the same ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"Phragm\xe9n election")," process that\nselects validators from the available pool based on nominations. However, token holders' votes for\ncouncilors are isolated from any nominations they may have on validators. Council terms last for one\nweek."),(0,o.kt)("p",null,"At the end of each term, ",(0,o.kt)("a",{parentName:"p",href:"../learn-phragmen#algorithm"},"Phragm\xe9n election algorithm")," runs and the\nresult will choose the new councilors based on the vote configurations of all voters. The election\nalso chooses a set number of runners-up, which is currently\n20 that will remain in the queue with their votes\nintact."),(0,o.kt)("p",null,'As opposed to a "first-past-the-post" electoral system, where voters can only vote for a single\ncandidate from a list, a Phragm\xe9n election is a more expressive way to include each voter\u2019s views.\nToken holders can treat it as a way to support as many candidates as they want. The election\nalgorithm will find a fair subset of the candidates that most closely matches the expressed\nindications of the electorate as a whole.'),(0,o.kt)("p",null,"Let's take a look at the example below."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"},"Round 1"),(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"}))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"td"},"Token Holders")),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"td"},"Candidates")),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"},"A"),(0,o.kt)("td",{parentName:"tr",align:"center"},"B"),(0,o.kt)("td",{parentName:"tr",align:"center"},"C"),(0,o.kt)("td",{parentName:"tr",align:"center"},"D"),(0,o.kt)("td",{parentName:"tr",align:"center"},"E")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Peter"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Alice"),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Bob"),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Kelvin"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"td"},"Total")),(0,o.kt)("td",{parentName:"tr",align:"center"},"2"),(0,o.kt)("td",{parentName:"tr",align:"center"},"1"),(0,o.kt)("td",{parentName:"tr",align:"center"},"3"),(0,o.kt)("td",{parentName:"tr",align:"center"},"2"),(0,o.kt)("td",{parentName:"tr",align:"center"},"2")))),(0,o.kt)("p",null,"The above example shows that candidate C wins the election in round 1, while candidates A, B, D & E\nkeep remaining on the candidates' list for the next round."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"},"Round 2"),(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"}))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"td"},"Token Holders")),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"td"},"Candidates")),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"},"A"),(0,o.kt)("td",{parentName:"tr",align:"center"},"B"),(0,o.kt)("td",{parentName:"tr",align:"center"},"D"),(0,o.kt)("td",{parentName:"tr",align:"center"},"E")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Peter"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Alice"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Bob"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Kelvin"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"td"},"Total")),(0,o.kt)("td",{parentName:"tr",align:"center"},"4"),(0,o.kt)("td",{parentName:"tr",align:"center"},"4"),(0,o.kt)("td",{parentName:"tr",align:"center"},"1"),(0,o.kt)("td",{parentName:"tr",align:"center"},"1")))),(0,o.kt)("p",null,"The top-N (say 4 in this example) runners-up can remain, and their votes persist until the next\nelection. After round 2, even though candidates A & B get the same number of votes in this round,\ncandidate A gets elected because after adding the older unused approvals, it is higher than B."),(0,o.kt)("h3",{id:"how-can-i-appeal-to-the-council-to-enact-a-change-on-my-behalf"},"How can I appeal to the council to enact a change on my behalf?"),(0,o.kt)("p",null,"In some circumstances, you may want to appeal to the on-chain council to enact a change on your\nbehalf. One example of this circumstance is the case of lost or locked funds when the funds were\nlost due to a human interface error (such as inputting an address for another network). Another\nexample is if you participated in the 2017 Polkadot ICO with a multi-sig address which now does not\nlet you sign a message easily. When these circumstances can be proven beyond a reasonable doubt to\nbe an error, the council ",(0,o.kt)("em",{parentName:"p"},"may")," consider a governance motion to correct it."),(0,o.kt)("p",null,"The first step to appeal to the council is to contact the councilors. There is no singular place\nwhere you are guaranteed to grab every councilor\u2019s ear with your message. However, there are a\nhandful of good places to start where you can get the attention of some of them. The\n",(0,o.kt)("a",{parentName:"p",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction"),"\n"," matrix\nroom is one such place. After creating an account and joining this room, you can post a\nwell-thought-through message here that lays down your case and justifies why you think the council\nshould consider enacting a change to the protocol on your behalf."),(0,o.kt)("p",null,"At some point, you will likely need a place for a longer-form discussion. For this, making a post on\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/"},"Polkassembly")," is the recommended place to do so. When you write\na post on Polkassembly, present all the evidence for your circumstances and state clearly what kind\nof change you would suggest to the councilors to enact."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Remember, the councilors do not need to make the change, it is your responsibility to make a strong\ncase for why the change should be made.")),(0,o.kt)("h2",{id:"resources"},"Resources"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/paritytech/polkadot/wiki/Governance"},"Initial Governance Description")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate/tree/master/frame/democracy/src"},"Democracy Pallet")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=VsZuDJMmVPY&feature=youtu.be&t=24734"},"Governance Demo")," - Dr.\nGavin Wood presents the initial governance structure for Polkadot. (Video)"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://www.crowdcast.io/e/governance-on-polkadot--"},"Governance on Polkadot")," - A webinar\nexplaining how governance works in Polkadot and Kusama.")))}h.isMDXComponent=!0},74562:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/gov1-overview-515a8f55923136c0b6e6bd23bea3d836.png"},11173:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/gov1-timeline-69424fec137182a898f00c29a90fbdb1.png"},72895:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/adaptive-quorum-biasing-18c2e70b6b9d2c3abf563219b11974dc.png"},93395:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/approval-vote-d0622e1c0a9bc7c50ab9f23761488dbe.png"}}]); \ No newline at end of file diff --git a/assets/js/9913464d.bfc74164.js b/assets/js/9913464d.bfc74164.js deleted file mode 100644 index fb52196ea242..000000000000 --- a/assets/js/9913464d.bfc74164.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5341],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>h});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),p=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},m="mdxType",u={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,r=e.mdxType,o=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=p(a),d=r,h=m["".concat(s,".").concat(d)]||m[d]||u[d]||o;return a?n.createElement(h,i(i({ref:t},c),{},{components:a})):n.createElement(h,i({ref:t},c))}));function h(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[m]="string"==typeof e?e:r,i[1]=l;for(var p=2;p{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>h,frontMatter:()=>l,metadata:()=>p,toc:()=>m});var n=a(87462),r=a(63366),o=(a(67294),a(3905)),i=["components"],l={id:"learn-governance",title:"Governance V1",sidebar_label:"Governance V1",description:"Polkadot's First Governance Model.",keywords:["governance","referenda","proposal","voting","endorse"],slug:"../learn-governance"},s=void 0,p={unversionedId:"learn/archive/learn-governance",id:"learn/archive/learn-governance",title:"Governance V1",description:"Polkadot's First Governance Model.",source:"@site/../docs/learn/archive/learn-governance.md",sourceDirName:"learn/archive",slug:"/learn/learn-governance",permalink:"/docs/learn/learn-governance",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/archive/learn-governance.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710167319,formattedLastUpdatedAt:"Mar 11, 2024",frontMatter:{id:"learn-governance",title:"Governance V1",sidebar_label:"Governance V1",description:"Polkadot's First Governance Model.",keywords:["governance","referenda","proposal","voting","endorse"],slug:"../learn-governance"},sidebar:"docs",previous:{title:"Archive",permalink:"/docs/learn-archive"},next:{title:"Gov1 Treasury",permalink:"/docs/learn/learn-treasury"}},c={},m=[{value:"Governance Summary",id:"governance-summary",level:2},{value:"Proposals",id:"proposals",level:2},{value:"Endorsing Proposals",id:"endorsing-proposals",level:3},{value:"Cancelling Proposals",id:"cancelling-proposals",level:3},{value:"Blacklisting Proposals",id:"blacklisting-proposals",level:3},{value:"Referenda",id:"referenda",level:2},{value:"Referenda Timeline",id:"referenda-timeline",level:3},{value:"Public Referenda",id:"public-referenda",level:3},{value:"Council Referenda",id:"council-referenda",level:3},{value:"Alternating Voting Timetable",id:"alternating-voting-timetable",level:3},{value:"Adaptive Quorum Biasing",id:"adaptive-quorum-biasing",level:3},{value:"Example of Adaptive Quorum Biasing",id:"example-of-adaptive-quorum-biasing",level:4},{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:"Delegations",id:"delegations",level:3},{value:"Council",id:"council",level:2},{value:"Prime Members",id:"prime-members",level:3},{value:"Technical Committee",id:"technical-committee",level:2},{value:"Frequently Asked Questions",id:"frequently-asked-questions",level:2},{value:"How to be a council member?",id:"how-to-be-a-council-member",level:3},{value:"How can I appeal to the council to enact a change on my behalf?",id:"how-can-i-appeal-to-the-council-to-enact-a-change-on-my-behalf",level:3},{value:"Resources",id:"resources",level:2}],u={toc:m},d="wrapper";function h(e){var t=e.components,l=(0,r.Z)(e,i);return(0,o.kt)(d,(0,n.Z)({},u,l,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("div",{className:"sticky"},(0,o.kt)("br",null),(0,o.kt)("p",null,"The content on this page is archived. For up-to-date information about governance, see the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},"Polkadot OpenGov page"),".")),(0,o.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,o.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,o.kt)("a",{parentName:"p",href:"/docs/learn-wasm"},"WebAssembly"),"). It also allows for\nseveral on-chain voting mechanisms, such as referenda with the novel concept of\n",(0,o.kt)("a",{parentName:"p",href:"#adaptive-quorum-biasing"},"Adaptive Quorum Biasing")," and batch approval voting. All changes to the\nprotocol must be agreed upon by stake-weighted referenda."),(0,o.kt)("p",null,"To make any changes to the network, the idea is to compose active token holders and the council\ntogether to administrate a network upgrade decision. No matter whether the proposal is proposed by\nthe public (token holders) or the ",(0,o.kt)("a",{parentName:"p",href:"#council"},"Council"),", it finally will have to go through a vote on\na referendum to let all holders, weighted by stake, make the decision."),(0,o.kt)("h2",{id:"governance-summary"},"Governance Summary"),(0,o.kt)("p",null,"The figure below shows an overview of Governance V1 with the key actors and different paths for\nsubmitting a proposal that can potentially be voted on as a referendum."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"gov1-overview",src:a(74562).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"The public (i.e. token holders) can submit a proposal that gets added to the proposal queue. Here,\nproposals are ",(0,o.kt)("a",{parentName:"p",href:"#endorsing-proposals"},"endorsed"),", and the one that gets the most support will climb to\nthe top of the queue. When it is time, the proposal at the top of the queue will become a\n",(0,o.kt)("a",{parentName:"p",href:"#public-referenda"},"Public Referendum"),". For instance, the proposal with 11 endorsements is shown at\nthe top of the queue in the figure, which is ready to become a referendum."),(0,o.kt)("p",null,"The public can also submit a ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn/learn-treasury#creating-a-treasury-proposal"},"treasury proposal"),",\nwhich must be evaluated by the ",(0,o.kt)("a",{parentName:"p",href:"#council"},"Council")," through a motion. If the Council motion passes,\nthe treasury proposal can be directly executed or go to the external queue, which will be voted on\nthrough a ",(0,o.kt)("a",{parentName:"p",href:"#council-referenda"},"Council Referendum"),". See the figure's green horizontal path from the\nPublic (green) to the Council (yellow). Treasury proposals and Council proposals can be directly\nexecuted (horizontal yellow arrows) or go to the external queue, where they will become a referendum"),(0,o.kt)("p",null,"Note that the external queue always consists of\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/blob/f4a2e84ee5974b219f2a03cd195105060c41e3cd/frame/democracy/src/lib.rs#LL29C8-L31C4"},"a single proposal"),".\nA proposal in the external queue can be fast-tracked by the\n",(0,o.kt)("a",{parentName:"p",href:"#technical-committee"},"Technical Committee")," (light blue). The fast track can contain as many\nproposals as possible (also called emergency proposals) that can be voted on simultaneously with\nwith the referenda introduced either by the Council or the Public. See in the figure the yellow\ncircle (i.e. Council Proposal) exiting the external queue, and the yellow circle with a light-blue\nborder also leaving the queue and being fast-tracked by the Technical Committee (TC). Once empty,\nthe external queue can be filled with another Council proposal."),(0,o.kt)("p",null,"The Council can also submit proposals that will end up in the external queue. Voting on Council and\nPublic proposals subject to an ",(0,o.kt)("a",{parentName:"p",href:"#alternating-voting-timetable"},"alternating timetable"),', shown in the\nfigure as the "on" and "off" toggles on the external and proposal queues. In this example, the\nPublic proposal will be voted on together with the fast-tracked Council Proposal. Voting on\nnon-fast-tracked Council Proposals will be blocked until the alternating timetable switches the\ntoggles, which stops Public proposals from becoming a referenda.'),(0,o.kt)("p",null,"Referenda will follow an ",(0,o.kt)("a",{parentName:"p",href:"#adaptive-quorum-biasing"},"adaptive quorum biasing")," mechanism for deciding\nwhether they get enacted, and if they do, they will be executed after an\n",(0,o.kt)("a",{parentName:"p",href:"#enactment"},"enactment period"),"."),(0,o.kt)("p",null,"Token holders can delegate their votes (with a conviction multiplier) to another account belonging\nto a trusted entity voting on their behalf."),(0,o.kt)("h2",{id:"proposals"},"Proposals"),(0,o.kt)("p",null,"Referenda can be started in different ways:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Publicly submitted proposals"),(0,o.kt)("li",{parentName:"ul"},"Proposals submitted by the council, either through a majority or unanimously"),(0,o.kt)("li",{parentName:"ul"},"Proposals submitted as part of the ",(0,o.kt)("a",{parentName:"li",href:"#enactment"},"enactment")," of a prior referendum (i.e. making a\nreferendum to start a new referendum)"),(0,o.kt)("li",{parentName:"ul"},"Emergency proposals submitted by the ",(0,o.kt)("a",{parentName:"li",href:"#technical-committee"},"Technical Committee")," and approved by\nthe ",(0,o.kt)("a",{parentName:"li",href:"#council"},"Council"))),(0,o.kt)("admonition",{title:"Starting a proposal in Governance V1",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"For more information about how to start a proposal, see the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/maintain/maintain-guides-democracy#proposing-an-action"},"dedicated page"),".")),(0,o.kt)("h3",{id:"endorsing-proposals"},"Endorsing Proposals"),(0,o.kt)("p",null,"Anyone can submit a proposal by depositing the minimum amount of tokens for a certain period (number\nof blocks). If someone agrees with the proposal, they may deposit the same amount of tokens to\nsupport it - this action is called\n",(0,o.kt)("a",{parentName:"p",href:"/docs/maintain/maintain-guides-democracy#endorsing-a-proposal"},(0,o.kt)("em",{parentName:"a"},"endorsing")),". The\nproposal with the highest amount of bonded support will be selected to be a referendum in the next\nvoting cycle based on an ",(0,o.kt)("a",{parentName:"p",href:"#alternating-voting-timetable"},"alternating voting timetable"),"."),(0,o.kt)("h3",{id:"cancelling-proposals"},"Cancelling Proposals"),(0,o.kt)("p",null,"A proposal can be canceled if the ",(0,o.kt)("a",{parentName:"p",href:"#technical-committee"},"Technical Committee")," unanimously agrees to\ndo so or if Root Origin (e.g. sudo) triggers this functionality. A canceled proposal's deposit is\nburned."),(0,o.kt)("p",null,"Additionally, a two-thirds majority of the council can cancel a referendum. This may function as a\nlast-resort if there is an issue found late in a referendum's proposal, such as a bug in the code of\nthe runtime that the proposal would institute."),(0,o.kt)("p",null,"If the cancellation is controversial enough that the council cannot get a two-thirds majority, then\nit will be left to the stakeholders ",(0,o.kt)("em",{parentName:"p"},"en masse")," to determine the proposal\u2019s fate."),(0,o.kt)("h3",{id:"blacklisting-proposals"},"Blacklisting Proposals"),(0,o.kt)("p",null,"A proposal can be blacklisted by Root Origin (e.g. sudo). A blacklisted proposal and its related\nreferendum (if any) are immediately ",(0,o.kt)("a",{parentName:"p",href:"#canceling"},"canceled"),". Additionally, a blacklisted proposal's\nhash cannot re-appear in the proposal queue. Blacklisting is useful when removing erroneous\nproposals that could be submitted with the same hash."),(0,o.kt)("p",null,"Upon seeing their proposal removed, a submitter who is not properly introduced to the democracy\nsystem of Polkadot might be tempted to\nre-submit the same proposal. That said, this is far from a fool-proof method of preventing invalid\nproposals from being submitted - a single changed character in a proposal's text will also change\nthe hash of the proposal, rendering the per-hash blacklist invalid."),(0,o.kt)("h2",{id:"referenda"},"Referenda"),(0,o.kt)("p",null,"Referenda are simple, inclusive, stake-based voting schemes. Each referendum has a specific proposal\nthat takes the form of a ",(0,o.kt)("strong",{parentName:"p"},"privileged function")," call in the runtime. That function includes the\nmost powerful ",(0,o.kt)("strong",{parentName:"p"},"call"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"set_code"),', which can switch out the entire runtime code, achieving what\nwould otherwise require a "hard fork".'),(0,o.kt)("p",null,'Referenda are discrete events, have a fixed period where voting happens, and then are tallied, and\nthe function call is executed if the vote is approved. Referenda are always binary: your only\noptions in voting are "aye", "nay", or abstaining entirely.'),(0,o.kt)("h3",{id:"referenda-timeline"},"Referenda Timeline"),(0,o.kt)("p",null,"The structure of the timeline for all referenda is the same regardless of who initiates the\nproposal, although the timeline length can vary (see below)."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"gov1-timeline",src:a(11173).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"The figure above provides a summary view of the referenda timeline for Governance V1."),(0,o.kt)("p",null,"In (1), the proposal is submitted, and the Launch Period starts. During this period of indefinite\nlength the voters can ",(0,o.kt)("a",{parentName:"p",href:"#endorsing-proposals"},"endorse")," proposals by bonding the same amount of tokens\nused by the depositor. Deposited tokens for endorsement will be returned once the proposal becomes a\nreferendum. During the launch period, the proposal will compete with other proposals, and the one\nthat gets to the top will be selected for a referendum when the next voting period starts."),(0,o.kt)("p",null,"The figure shows that the launch period is shown with a fixed length. Still, it varies depending on\nwho initiated the proposal and how many proposals there are in the pipeline. Council motions will\nlikely have a short launch period when compared to the public referenda which might take longer\nunless they are the only ones in the pipeline."),(0,o.kt)("p",null,"In (2), the proposal is selected for a referendum. Proposals initiated by the public will become a\n",(0,o.kt)("a",{parentName:"p",href:"#public-referenda"},"public referendum"),", while those initiated by the council will become\n",(0,o.kt)("a",{parentName:"p",href:"#council-referenda"},"council referenda"),". The voting period lasts\n28 days, after which, if the proposal is\napproved, it will go through an enactment period. Rejected proposals will need to start from (1).\nNote that Governance V1 uses an ",(0,o.kt)("a",{parentName:"p",href:"#alternating-voting-timetable"},"alternating voting timeline")," where\nvoters can vote either for a public proposal or a council motion every\n28 days."),(0,o.kt)("p",null,"In (3), the proposal is approved and moves through the ",(0,o.kt)("a",{parentName:"p",href:"#enactment"},"enactment period")," that can be of\ndifferent lengths depending on who initiated the proposal in the first place, with emergency\nproposals being the fastest ones and the only ones that can be voted simultaneously with other\nreferenda."),(0,o.kt)("h3",{id:"public-referenda"},"Public Referenda"),(0,o.kt)("p",null,"Public referenda will have a ",(0,o.kt)("a",{parentName:"p",href:"#adaptive-quorum-biasing"},(0,o.kt)("strong",{parentName:"a"},"positive turnout bias")),", meaning that\nthey will require a heavy supermajority of ",(0,o.kt)("em",{parentName:"p"},"aye")," votes to pass at low turnouts but as turnout\nincreases towards 100%, it will require a simple majority of ",(0,o.kt)("em",{parentName:"p"},"aye")," votes to pass (i.e. 51% wins)."),(0,o.kt)("p",null,"Note that the bonded tokens will be released once the proposal is tabled (that is, brought to a\nvote), and a maximum of 100 public proposals can\nbe in the proposal queue."),(0,o.kt)("admonition",{title:"turnout",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"The total number of voting tokens excluding conviction or ",(0,o.kt)("a",{parentName:"p",href:"#voluntary-locking"},"voluntary locking"),".")),(0,o.kt)("h3",{id:"council-referenda"},"Council Referenda"),(0,o.kt)("p",null,"Unanimous Council - When all council members agree on a proposal, it can be moved to a referendum\nwith a ",(0,o.kt)("a",{parentName:"p",href:"#adaptive-quorum-biasing"},(0,o.kt)("strong",{parentName:"a"},"negative turnout bias")),". Briefly, it will require a heavy\nsupermajority of ",(0,o.kt)("em",{parentName:"p"},"nay")," votes to reject at low turnouts, but as turnout increases towards 100%, it\nwill require a simple majority of ",(0,o.kt)("em",{parentName:"p"},"nay")," votes to fail (i.e. 51% wins)."),(0,o.kt)("p",null,"Majority Council - When agreement from only a simple majority of council members occurs, the\nreferendum will need ",(0,o.kt)("a",{parentName:"p",href:"#adaptive-quorum-biasing"},(0,o.kt)("strong",{parentName:"a"},"simple majority"))," to pass."),(0,o.kt)("admonition",{title:"Public- vs. Council-initiated Referenda",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Public referenda must be agreed upon using a positive bias to mitigate attacks by malicious or\nill-conceived proposals. Conversely, when a proposal is unanimously voted in favor by the council,\nit benefits from using the negative bias. We assume low turnout is less problematic if the council\nproposes a referendum. Also, the council members are elected by the community and have strong\ntechnical as well as functional knowledge about the system, and we assume solid justifications back\nchanges proposed by the council.")),(0,o.kt)("h3",{id:"alternating-voting-timetable"},"Alternating Voting Timetable"),(0,o.kt)("p",null,"All referenda are executed by Root Origin. It follows that multiple referenda cannot be voted upon\nin the same period, excluding emergency referenda. An emergency referendum occurring at the same\ntime as a regular referendum (either public- or council-proposed) is the only time multiple\nreferenda can be voted on."),(0,o.kt)("p",null,"Every 28 days, a new referendum will come up for a\nvote, assuming there is at least one proposal in one of the queues. There is a queue for\nCouncil-approved proposals and a queue for publicly-submitted proposals. The referendum to be voted\nupon alternates between the top proposal in the two queues, where the proposals' rank is based on\n",(0,o.kt)("a",{parentName:"p",href:"#endorsing-proposals"},"endorsement")," (i.e. bonded tokens)."),(0,o.kt)("h3",{id:"adaptive-quorum-biasing"},"Adaptive Quorum Biasing"),(0,o.kt)("p",null,"Polkadot introduces the concept of ",(0,o.kt)("strong",{parentName:"p"},"Adaptive\nQuorum Biasing"),", which is used to alter the effective super-majority required to make it easier or\nmore difficult for a proposal to pass depending on voting power (turnout) and origin (Council or\npublic)."),(0,o.kt)("p",null,"Adaptive Quorum Biasing creates three tallying mechanisms: majority carry, super-majority approve,\nand super-majority against. They all equate to a simple majority-carry system at 100% turnout. Their\nselection depends on which entity proposed the proposal and whether all Council members voted yes\n(in the case of Council Referenda)."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"th"},"Entity")),(0,o.kt)("th",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"th"},"Metric")))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Public"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Positive Turnout Bias (Super-Majority Approve)")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Council (Complete agreement)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Negative Turnout Bias (Super-Majority Against)")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Council (Majority agreement)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Simple Majority")))),(0,o.kt)("p",null,"Let's use the image below as an example."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"adaptive-quorum-biasing",src:a(72895).Z,width:"537",height:"439"})),(0,o.kt)("p",null,"If a publicly submitted referendum only has a 25% turnout, the tally of ",(0,o.kt)("em",{parentName:"p"},"aye")," votes has to reach 66%\nfor it to pass since we applied ",(0,o.kt)("strong",{parentName:"p"},"Positive Turnout Bias"),". In contrast, when it has a 75% turnout,\nthe tally of ",(0,o.kt)("em",{parentName:"p"},"aye")," votes has to reach 54%, which means that the super-majority required decreases as\nthe turnout increases. A positive turnout bias, whereby a heavy super-majority of aye votes is\nrequired to carry at low turnouts. However, as turnout increases towards 100%, it becomes a simple\nmajority carry as below."),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://latex.codecogs.com/svg.latex?%5Clarge&space;%7Bagainst&space;%5Cover&space;%5Csqrt%7Bturnout%7D%7D&space;%3C&space;%7Bapprove&space;%5Cover&space;%5Csqrt%7Belectorate%7D%7D",alt:null})),(0,o.kt)("p",null,"Where ",(0,o.kt)("inlineCode",{parentName:"p"},"approve")," is the number of ",(0,o.kt)("em",{parentName:"p"},"aye")," votes, ",(0,o.kt)("inlineCode",{parentName:"p"},"against")," is the number of ",(0,o.kt)("em",{parentName:"p"},"nay")," votes, ",(0,o.kt)("inlineCode",{parentName:"p"},"turnout")," is\nthe total number of voting tokens excluding ",(0,o.kt)("a",{parentName:"p",href:"#voluntary-locking"},"voluntary locking"),", and\n",(0,o.kt)("inlineCode",{parentName:"p"},"electorate")," is the total number of tokens issued in the network."),(0,o.kt)("p",null,"When the council proposes a new proposal through unanimous consent, the referendum would be put to\nthe vote using ",(0,o.kt)("strong",{parentName:"p"},"Negative Turnout Bias"),". Referring to the above image, when a Council referendum\nonly has a 25% turnout, the tally of ",(0,o.kt)("em",{parentName:"p"},"aye")," votes has to reach 34% for it to pass, while if the\nturnout increases to 75%, the tally of ",(0,o.kt)("em",{parentName:"p"},"aye")," votes has to reach 46%. A negative turnout bias\nrequires a heavy super-majority of ",(0,o.kt)("em",{parentName:"p"},"nay")," votes to reject at low turnouts. However, as turnout\nincreases towards 100%, it becomes a simple majority carry as below."),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://latex.codecogs.com/svg.latex?%5Clarge&space;%7Bagainst&space;%5Cover&space;%5Csqrt%7Belectorate%7D%7D&space;%3C&space;%7Bapprove&space;%5Cover&space;%5Csqrt%7Bturnout%7D%7D",alt:null})),(0,o.kt)("p",null,"In short, when the turnout rate is low, a super-majority is required to reject the proposal, which\nmeans a lower threshold of ",(0,o.kt)("em",{parentName:"p"},"aye")," votes must be reached. As turnout increases toward 100%, it becomes\na simple majority, a simple comparison of votes. If there are more ",(0,o.kt)("em",{parentName:"p"},"aye")," votes than ",(0,o.kt)("em",{parentName:"p"},"nay"),", then the\nproposal is carried, no matter how much stake votes on the proposal."),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://latex.codecogs.com/svg.latex?%5Clarge&space;%7Bapprove%7D&space;%3E&space;%7Bagainst%7D",alt:null})),(0,o.kt)("p",null,"To know more about where these above formulas come from, please read the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/blob/master/frame/democracy/src/vote_threshold.rs"},"democracy pallet"),"."),(0,o.kt)("h4",{id:"example-of-adaptive-quorum-biasing"},"Example of Adaptive Quorum Biasing"),(0,o.kt)("p",null,"Let's assume we only have 1,500 DOT tokens in\ntotal and that this is a public proposal."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"John: 500 DOT"),(0,o.kt)("li",{parentName:"ul"},"Peter: 100 DOT"),(0,o.kt)("li",{parentName:"ul"},"Lilly: 150 DOT"),(0,o.kt)("li",{parentName:"ul"},"JJ: 150 DOT"),(0,o.kt)("li",{parentName:"ul"},"Ken: 600 DOT")),(0,o.kt)("p",null,"John: Votes ",(0,o.kt)("inlineCode",{parentName:"p"},"Yes")," for a 4 week lock period =>\n500 x 1 = 500 Votes"),(0,o.kt)("p",null,"Peter: Votes ",(0,o.kt)("inlineCode",{parentName:"p"},"Yes")," for a 4 week lock period =>\n100 x 1 = 100 Votes"),(0,o.kt)("p",null,"JJ: Votes ",(0,o.kt)("inlineCode",{parentName:"p"},"No")," for a 16 week lock period =>\n150 x 3 = 450 Votes"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"approve = 600"),(0,o.kt)("li",{parentName:"ul"},"against = 450"),(0,o.kt)("li",{parentName:"ul"},"turnout = 750"),(0,o.kt)("li",{parentName:"ul"},"electorate = 1500")),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://latex.codecogs.com/svg.latex?%5Clarge&space;%5Cfrac%7B450%7D%7B%5Csqrt%7B750%7D%7D&space;%3C&space;%5Cfrac%7B600%7D%7B%5Csqrt%7B1500%7D%7D",alt:"\\Large \\frac{450}{\\sqrt{750}}&space;<&space;\\frac{600}{\\sqrt{1500}}"})),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://latex.codecogs.com/svg.latex?%5Clarge&space;%7B16.432%7D&space;%3C&space;%7B15.492%7D",alt:"\\Large {16.432}&space;<&space;{15.492}"})),(0,o.kt)("p",null,"Since the above example is a public referendum, ",(0,o.kt)("strong",{parentName:"p"},"Super-Majority Approve")," would be used to\ncalculate the result. Super-Majority Approve requires more ",(0,o.kt)("em",{parentName:"p"},"aye")," votes to pass the referendum when\nturnout is low; therefore, based on the above result, the referendum will be rejected."),(0,o.kt)("admonition",{title:"only the winning voter's tokens are locked.",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"If the voters on the losing side of the referendum believe that the outcome will have adverse\neffects, their tokens are transferrable, so they will not be locked into the decision. Winning\nproposals are autonomously enacted after the ",(0,o.kt)("a",{parentName:"p",href:"#enactment"},"enactment period"),".")),(0,o.kt)("h3",{id:"enactment"},"Enactment"),(0,o.kt)("p",null,"Referenda are considered ",(0,o.kt)("em",{parentName:"p"},"baked")," if they are closed and tallied. Assuming a referendum is approved,\nit will be scheduled for ",(0,o.kt)("strong",{parentName:"p"},"enactment"),". Referenda are considered ",(0,o.kt)("em",{parentName:"p"},"unbaked")," if they are pending an\noutcome, i.e. being voted on."),(0,o.kt)("p",null,"All referenda are associated with an enactment delay or ",(0,o.kt)("strong",{parentName:"p"},"enactment period"),". This is the period\nbetween a referendum ending and (assuming it was approved) the changes being enacted."),(0,o.kt)("p",null,'For public and Council referenda, the enactment period is a fixed time of\n28 days. For proposals submitted as part of\nthe enactment of a prior referendum, it can be set as desired. Emergency proposals deal with major\nproblems with the network and need to be "fast-tracked". These will have a shorter enactment period.'),(0,o.kt)("h2",{id:"voting-on-a-referendum"},"Voting on a Referendum"),(0,o.kt)("p",null,"To vote, a voter generally must lock their tokens up for at least the enactment period beyond the\nend of the referendum. This is to ensure that some minimal economic buy-in to the result is needed\nand to dissuade vote selling."),(0,o.kt)("admonition",{title:"Referenda explainer video",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"To learn more about voting on referenda, please check out our\n",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=BkbhhlsezGA&list=PLOyWqupZ-WGuAuS00rK-pebTMAOxW41W8&index=31&ab_channel=Polkadot"},"technical explainer video"),".")),(0,o.kt)("p",null,"It is possible to vote without locking, but your vote is worth a small fraction of a normal vote,\ngiven your stake. At the same time, holding only a small amount of tokens does not mean that the\nholder cannot influence the referendum result, thanks to time-locking or ",(0,o.kt)("strong",{parentName:"p"},"voluntary locking")," (see\nbelow)."),(0,o.kt)("h3",{id:"voluntary-locking"},"Voluntary Locking"),(0,o.kt)("admonition",{title:"Voluntary Locking",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"For more information about voluntary locking or conviction voting see\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov#voluntary-locking"},"Polkadot OpenGov"),".")),(0,o.kt)("h3",{id:"delegations"},"Delegations"),(0,o.kt)("p",null,"In Polkadot you can\n",(0,o.kt)("a",{parentName:"p",href:"/docs/maintain/maintain-guides-democracy#delegate-a-vote"},"delegate your voting power")," to\nanother account you trust if you are not willing to stay up-to-date with all referenda."),(0,o.kt)("p",null,"You can also use a ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-proxies#governance-proxy"},"governance proxy")," to vote on behalf of\nyour stash account. The proxy can be yours, or you can authorize a third-party governance proxy to\nvote with your stash. Learn more from the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-proxies"},"dedicated page on Proxy Accounts"),"."),(0,o.kt)("h2",{id:"council"},"Council"),(0,o.kt)("p",null,'To represent passive stakeholders, Polkadot\nintroduces the idea of a "council". The council is an on-chain entity comprising several actors,\neach represented as an on-chain account. On\nPolkadot, the council currently consists of\n13 members.'),(0,o.kt)("p",null,"Along with ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn/learn-treasury"},"controlling the treasury"),", the council is called upon primarily for\nthree tasks of governance:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Proposing sensible referenda"),(0,o.kt)("li",{parentName:"ul"},"Cancelling uncontroversially dangerous or malicious referenda"),(0,o.kt)("li",{parentName:"ul"},"Electing the ",(0,o.kt)("a",{parentName:"li",href:"#technical-committee"},"Technical Committee"),".")),(0,o.kt)("p",null,"For a referendum to be proposed by the council, a strict majority of members must be in favor, with\nno member exercising a veto. Vetoes may be exercised only once by a member for any single proposal.\nIf the proposal is resubmitted after a cool-down period, they may not veto it a second time."),(0,o.kt)("p",null,"Council motion that pass with a 3/5 (60%) super-majority - but without reaching unanimous support -\nwill move to a public referendum under a neutral, majority-carries voting scheme. In the case that\nall members of the council that voted are in favor of a motion, the vote is considered unanimous and\nbecomes a referendum with ",(0,o.kt)("a",{parentName:"p",href:"#adaptive-quorum-biasing"},"negative turnout bias"),"."),(0,o.kt)("admonition",{title:"Explainer video on the Council",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"For more information, check out our\n",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=837Vv3gdRzI"},"video explainer on Council"))),(0,o.kt)("h3",{id:"prime-members"},"Prime Members"),(0,o.kt)("p",null,"The council, being an instantiation of\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/tree/master/frame/collective"},"Substrate's Collective pallet"),",\nimplements what's called a ",(0,o.kt)("em",{parentName:"p"},"prime member")," whose vote acts as the default for other members that fail\nto vote before the timeout."),(0,o.kt)("p",null,"The prime member is chosen based on a ",(0,o.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Borda_count"},"Borda count"),"."),(0,o.kt)("p",null,'The purpose of having a prime council member is to ensure a quorum, even when several members\nabstain from a vote. Council members might be tempted to vote a "soft rejection" or a "soft\napproval" by not voting and letting the others vote. The existence of a prime member forces\ncouncilors to be explicit in their votes or have their vote counted for whatever is voted on by the\nprime.'),(0,o.kt)("h2",{id:"technical-committee"},"Technical Committee"),(0,o.kt)("p",null,"The Technical Committee(TC) was introduced in the\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.network/kusama-rollout-and-governance/"},"Kusama rollout and governance post")," as one\nof the three chambers of Kusama governance (along with the Council and the Referendum chamber). The\nTC is composed of the teams that have successfully implemented or specified either a\nPolkadot runtime or Polkadot Host. Teams are\nadded or removed from the TC via a simple majority vote of the ",(0,o.kt)("a",{parentName:"p",href:"#council"},"Council"),"."),(0,o.kt)("p",null,'The TC aims to safeguard against malicious referenda, implement bug fixes, reverse faulty runtime\nupdates, or add new but battle-tested features. The TC can fast-track proposals using the Democracy\npallet and is the only origin that can trigger the fast-tracking functionality. We can think of the\nTC as a "unique origin" that cannot generate proposals but fast-track existing ones.'),(0,o.kt)("p",null,"Fast-tracked referenda are the only referenda that can be active alongside another active\nreferendum. Thus, with fast-tracked referenda, it is possible to have two active referendums\nsimultaneously. Voting on one does not prevent a user from voting on the other."),(0,o.kt)("h2",{id:"frequently-asked-questions"},"Frequently Asked Questions"),(0,o.kt)("h3",{id:"how-to-be-a-council-member"},"How to be a council member?"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"approval-vote",src:a(93395).Z,width:"850",height:"340"})),(0,o.kt)("p",null,"All stakeholders can signal their approval of any of the registered candidates."),(0,o.kt)("p",null,"Council elections are handled by the same ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"Phragm\xe9n election")," process that\nselects validators from the available pool based on nominations. However, token holders' votes for\ncouncilors are isolated from any nominations they may have on validators. Council terms last for one\nweek."),(0,o.kt)("p",null,"At the end of each term, ",(0,o.kt)("a",{parentName:"p",href:"../learn-phragmen#algorithm"},"Phragm\xe9n election algorithm")," runs and the\nresult will choose the new councilors based on the vote configurations of all voters. The election\nalso chooses a set number of runners-up, which is currently\n20 that will remain in the queue with their votes\nintact."),(0,o.kt)("p",null,'As opposed to a "first-past-the-post" electoral system, where voters can only vote for a single\ncandidate from a list, a Phragm\xe9n election is a more expressive way to include each voter\u2019s views.\nToken holders can treat it as a way to support as many candidates as they want. The election\nalgorithm will find a fair subset of the candidates that most closely matches the expressed\nindications of the electorate as a whole.'),(0,o.kt)("p",null,"Let's take a look at the example below."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"},"Round 1"),(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"}))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"td"},"Token Holders")),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"td"},"Candidates")),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"},"A"),(0,o.kt)("td",{parentName:"tr",align:"center"},"B"),(0,o.kt)("td",{parentName:"tr",align:"center"},"C"),(0,o.kt)("td",{parentName:"tr",align:"center"},"D"),(0,o.kt)("td",{parentName:"tr",align:"center"},"E")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Peter"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Alice"),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Bob"),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Kelvin"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"td"},"Total")),(0,o.kt)("td",{parentName:"tr",align:"center"},"2"),(0,o.kt)("td",{parentName:"tr",align:"center"},"1"),(0,o.kt)("td",{parentName:"tr",align:"center"},"3"),(0,o.kt)("td",{parentName:"tr",align:"center"},"2"),(0,o.kt)("td",{parentName:"tr",align:"center"},"2")))),(0,o.kt)("p",null,"The above example shows that candidate C wins the election in round 1, while candidates A, B, D & E\nkeep remaining on the candidates' list for the next round."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"},"Round 2"),(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"}))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"td"},"Token Holders")),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"td"},"Candidates")),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"},"A"),(0,o.kt)("td",{parentName:"tr",align:"center"},"B"),(0,o.kt)("td",{parentName:"tr",align:"center"},"D"),(0,o.kt)("td",{parentName:"tr",align:"center"},"E")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Peter"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Alice"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Bob"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Kelvin"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"},"X"),(0,o.kt)("td",{parentName:"tr",align:"center"}),(0,o.kt)("td",{parentName:"tr",align:"center"})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"td"},"Total")),(0,o.kt)("td",{parentName:"tr",align:"center"},"4"),(0,o.kt)("td",{parentName:"tr",align:"center"},"4"),(0,o.kt)("td",{parentName:"tr",align:"center"},"1"),(0,o.kt)("td",{parentName:"tr",align:"center"},"1")))),(0,o.kt)("p",null,"The top-N (say 4 in this example) runners-up can remain, and their votes persist until the next\nelection. After round 2, even though candidates A & B get the same number of votes in this round,\ncandidate A gets elected because after adding the older unused approvals, it is higher than B."),(0,o.kt)("h3",{id:"how-can-i-appeal-to-the-council-to-enact-a-change-on-my-behalf"},"How can I appeal to the council to enact a change on my behalf?"),(0,o.kt)("p",null,"In some circumstances, you may want to appeal to the on-chain council to enact a change on your\nbehalf. One example of this circumstance is the case of lost or locked funds when the funds were\nlost due to a human interface error (such as inputting an address for another network). Another\nexample is if you participated in the 2017 Polkadot ICO with a multi-sig address which now does not\nlet you sign a message easily. When these circumstances can be proven beyond a reasonable doubt to\nbe an error, the council ",(0,o.kt)("em",{parentName:"p"},"may")," consider a governance motion to correct it."),(0,o.kt)("p",null,"The first step to appeal to the council is to contact the councilors. There is no singular place\nwhere you are guaranteed to grab every councilor\u2019s ear with your message. However, there are a\nhandful of good places to start where you can get the attention of some of them. The\n",(0,o.kt)("a",{parentName:"p",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction"),"\n"," matrix\nroom is one such place. After creating an account and joining this room, you can post a\nwell-thought-through message here that lays down your case and justifies why you think the council\nshould consider enacting a change to the protocol on your behalf."),(0,o.kt)("p",null,"At some point, you will likely need a place for a longer-form discussion. For this, making a post on\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/"},"Polkassembly")," is the recommended place to do so. When you write\na post on Polkassembly, present all the evidence for your circumstances and state clearly what kind\nof change you would suggest to the councilors to enact."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Remember, the councilors do not need to make the change, it is your responsibility to make a strong\ncase for why the change should be made.")),(0,o.kt)("h2",{id:"resources"},"Resources"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/paritytech/polkadot/wiki/Governance"},"Initial Governance Description")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate/tree/master/frame/democracy/src"},"Democracy Pallet")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=VsZuDJMmVPY&feature=youtu.be&t=24734"},"Governance Demo")," - Dr.\nGavin Wood presents the initial governance structure for Polkadot. (Video)"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://www.crowdcast.io/e/governance-on-polkadot--"},"Governance on Polkadot")," - A webinar\nexplaining how governance works in Polkadot and Kusama.")))}h.isMDXComponent=!0},74562:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/gov1-overview-515a8f55923136c0b6e6bd23bea3d836.png"},11173:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/gov1-timeline-69424fec137182a898f00c29a90fbdb1.png"},72895:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/adaptive-quorum-biasing-18c2e70b6b9d2c3abf563219b11974dc.png"},93395:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/approval-vote-d0622e1c0a9bc7c50ab9f23761488dbe.png"}}]); \ No newline at end of file diff --git a/assets/js/9f804621.7e9f7f10.js b/assets/js/9f804621.7e9f7f10.js new file mode 100644 index 000000000000..a45d030319a3 --- /dev/null +++ b/assets/js/9f804621.7e9f7f10.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[4143],{47940:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var a=n(74165),o=n(15861),r=n(67294),s=n(87152),i=n(14741),l=n(67425);function c(e,t,n){return u.apply(this,arguments)}function u(){return(u=(0,o.Z)((0,a.Z)().mark((function e(t,n,o){var r,l,c,u,d;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return r="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return r="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return r="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return r="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==r){e.next=18;break}return e.abrupt("return");case 18:return c=new s.U(r),e.next=21,i.G.create({provider:c});case 21:u=e.sent,(d=n.split(".")).forEach((function(e){e in u&&(u=u[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=u.toString(),e.abrupt("break",35);case 29:return e.next=31,u();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+n);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,n,a){switch(t){case"humanReadable":(0,l.HumanReadable)(e,n,a);break;case"precise":(0,l.Precise)(e,n,a);break;case"blocksToDays":(0,l.BlocksToDays)(e,a);break;case"erasToDays":(0,l.ErasToDays)(e,a,n);break;case"percentage":(0,l.Percentage)(e,a);break;case"permillToPercent":(0,l.PermillToPercent)(e,a);break;case"arrayLength":(0,l.ArrayLength)(e,a);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(e){var t=e.network,n=e.path,s=e.defaultValue,i=e.filter,l=void 0===i?void 0:i,u=(0,r.useState)(""),p=u[0],h=u[1];return t=t.toLowerCase(),(0,r.useEffect)((function(){void 0!==l?d(s.toString(),l,t,h):h(s.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var r=function(){var e=(0,o.Z)((0,a.Z)().mark((function e(){var o;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,c(t,n,h);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(o,l,t,h):h(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{r()}catch(i){console.log(i)}}}),[]),p}},67425:e=>{var t="polkadot",n="kusama",a="statemine",o="statemint",r={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,s,i){var l=void 0;if(s===t||s===o)l=3;else{if(s!==n&&s!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),i((e=Number.isInteger(e/r[s].precision)?e/r[s].precision+" "+r[s].symbol:(e/r[s].precision).toFixed(l)+" "+r[s].symbol).toString())},Precise:function(e,t,n){n(e=(e=parseFloat(e))/r[t].precision+" "+r[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,r,s){var i=void 0;if(s===t||s===o)i=1;else{if(s!==n&&s!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");i=4}r((e/=i).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},52991:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var a=n(67294),o=n(86010),r=n(53438),s=n(39960),i=n(13919),l=n(95999);const c={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function u(e){var t=e.href,n=e.children;return a.createElement(s.Z,{href:t,className:(0,o.Z)("card padding--lg",c.cardContainer)},n)}function d(e){var t=e.href,n=e.icon,r=e.title,s=e.description;return a.createElement(u,{href:t},a.createElement("h2",{className:(0,o.Z)("text--truncate",c.cardTitle),title:r},n," ",r),s&&a.createElement("p",{className:(0,o.Z)("text--truncate",c.cardDescription),title:s},s))}function p(e){var t,n=e.item,o=(0,r.Wl)(n);return o?a.createElement(d,{href:o,icon:"\ud83d\uddc3\ufe0f",title:n.label,description:null!=(t=n.description)?t:(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:n.items.length})}):null}function h(e){var t,n,o=e.item,s=(0,i.Z)(o.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,r.xz)(null!=(t=o.docId)?t:void 0);return a.createElement(d,{href:o.href,icon:s,title:o.label,description:null!=(n=o.description)?n:null==l?void 0:l.description})}function k(e){var t=e.item;switch(t.type){case"link":return a.createElement(h,{item:t});case"category":return a.createElement(p,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}function m(e){var t=e.className,n=(0,r.jA)();return a.createElement(f,{items:n.items,className:t})}function f(e){var t=e.items,n=e.className;if(!t)return a.createElement(m,e);var s=(0,r.MN)(t);return a.createElement("section",{className:(0,o.Z)("row",n)},s.map((function(e,t){return a.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},a.createElement(k,{item:e}))})))}},85162:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var a=n(67294),o=n(86010);const r={tabItem:"tabItem_Ymn6"};function s(e){var t=e.children,n=e.hidden,s=e.className;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(r.tabItem,s),hidden:n},t)}},74866:(e,t,n)=>{"use strict";n.d(t,{Z:()=>v});var a=n(87462),o=n(67294),r=n(86010),s=n(12466),i=n(16550),l=n(91980),c=n(67392),u=n(50012);function d(e){return function(e){var t,n;return null!=(t=null==(n=o.Children.map(e,(function(e){if(!e||(0,o.isValidElement)(e)&&(t=e.props)&&"object"==typeof t&&"value"in t)return e;var t;throw new Error("Docusaurus error: Bad child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:n.filter(Boolean))?t:[]}(e).map((function(e){var t=e.props;return{value:t.value,label:t.label,attributes:t.attributes,default:t.default}}))}function p(e){var t=e.values,n=e.children;return(0,o.useMemo)((function(){var e=null!=t?t:d(n);return function(e){var t=(0,c.l)(e,(function(e,t){return e.value===t.value}));if(t.length>0)throw new Error('Docusaurus error: Duplicate values "'+t.map((function(e){return e.value})).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[t,n])}function h(e){var t=e.value;return e.tabValues.some((function(e){return e.value===t}))}function k(e){var t=e.queryString,n=void 0!==t&&t,a=e.groupId,r=(0,i.k6)(),s=function(e){var t=e.queryString,n=void 0!==t&&t,a=e.groupId;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=a?a:null}({queryString:n,groupId:a});return[(0,l._X)(s),(0,o.useCallback)((function(e){if(s){var t=new URLSearchParams(r.location.search);t.set(s,e),r.replace(Object.assign({},r.location,{search:t.toString()}))}}),[s,r])]}function m(e){var t,n,a,r,s=e.defaultValue,i=e.queryString,l=void 0!==i&&i,c=e.groupId,d=p(e),m=(0,o.useState)((function(){return function(e){var t,n=e.defaultValue,a=e.tabValues;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!h({value:n,tabValues:a}))throw new Error('Docusaurus error: The has a defaultValue "'+n+'" but none of its children has the corresponding value. Available values are: '+a.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return n}var o=null!=(t=a.find((function(e){return e.default})))?t:a[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:s,tabValues:d})})),f=m[0],b=m[1],g=k({queryString:l,groupId:c}),w=g[0],y=g[1],v=(t=function(e){return e?"docusaurus.tab."+e:null}({groupId:c}.groupId),n=(0,u.Nk)(t),a=n[0],r=n[1],[a,(0,o.useCallback)((function(e){t&&r.set(e)}),[t,r])]),N=v[0],S=v[1],x=function(){var e=null!=w?w:N;return h({value:e,tabValues:d})?e:null}();return(0,o.useLayoutEffect)((function(){x&&b(x)}),[x]),{selectedValue:f,selectValue:(0,o.useCallback)((function(e){if(!h({value:e,tabValues:d}))throw new Error("Can't select invalid tab value="+e);b(e),y(e),S(e)}),[y,S,d]),tabValues:d}}var f=n(72389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function g(e){var t=e.className,n=e.block,i=e.selectedValue,l=e.selectValue,c=e.tabValues,u=[],d=(0,s.o5)().blockElementScrollPositionUntilNextRender,p=function(e){var t=e.currentTarget,n=u.indexOf(t),a=c[n].value;a!==i&&(d(t),l(a))},h=function(e){var t,n=null;switch(e.key){case"Enter":p(e);break;case"ArrowRight":var a,o=u.indexOf(e.currentTarget)+1;n=null!=(a=u[o])?a:u[0];break;case"ArrowLeft":var r,s=u.indexOf(e.currentTarget)-1;n=null!=(r=u[s])?r:u[u.length-1]}null==(t=n)||t.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t)},c.map((function(e){var t=e.value,n=e.label,s=e.attributes;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:function(e){return u.push(e)},onKeyDown:h,onClick:p},s,{className:(0,r.Z)("tabs__item",b.tabItem,null==s?void 0:s.className,{"tabs__item--active":i===t})}),null!=n?n:t)})))}function w(e){var t=e.lazy,n=e.children,a=e.selectedValue,r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){var s=r.find((function(e){return e.props.value===a}));return s?(0,o.cloneElement)(s,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map((function(e,t){return(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a})})))}function y(e){var t=m(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",b.tabList)},o.createElement(g,(0,a.Z)({},e,t)),o.createElement(w,(0,a.Z)({},e,t)))}function v(e){var t=(0,f.Z)();return o.createElement(y,(0,a.Z)({key:String(t)},e))}},35426:(e,t,n)=>{"use strict";n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>m,frontMatter:()=>l,metadata:()=>u,toc:()=>p});var a=n(87462),o=n(63366),r=(n(67294),n(3905)),s=(n(47940),n(74866),n(85162),n(52991)),i=["components"],l={id:"learn-guides-accounts",title:"Polkadot-JS Guides about Accounts",sidebar_label:"Account Guides",description:"Polkadot-JS Guides about Accounts",keyword:["guides","polkadot-js","accounts"],slug:"../learn-guides-accounts"},c=void 0,u={unversionedId:"learn/learn-guides-accounts",id:"learn/learn-guides-accounts",title:"Polkadot-JS Guides about Accounts",description:"Polkadot-JS Guides about Accounts",source:"@site/../docs/learn/learn-guides-accounts.md",sourceDirName:"learn",slug:"/learn-guides-accounts",permalink:"/docs/learn-guides-accounts",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-accounts.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-accounts",title:"Polkadot-JS Guides about Accounts",sidebar_label:"Account Guides",description:"Polkadot-JS Guides about Accounts",keyword:["guides","polkadot-js","accounts"],slug:"../learn-guides-accounts"},sidebar:"docs",previous:{title:"Polkadot-JS Guides",permalink:"/docs/learn-polkadot-js-guides"},next:{title:"Multisig Guides",permalink:"/docs/learn-guides-accounts-multisig"}},d={},p=[{value:"Account Address Format",id:"account-address-format",level:2},{value:"Polkadot-JS Browser Extension",id:"polkadot-js-browser-extension",level:2},{value:"Account Backup using the Polkadot-JS Browser Extension",id:"account-backup-using-the-polkadot-js-browser-extension",level:3},{value:"Reset Password using the Polkadot-JS Browser Extension",id:"reset-password-using-the-polkadot-js-browser-extension",level:3},{value:"Restore Account on the Polkadot-JS Browser Extension",id:"restore-account-on-the-polkadot-js-browser-extension",level:3},{value:"Polkadot-JS UI",id:"polkadot-js-ui",level:2},{value:"Account Backup using the Polkadot-JS UI",id:"account-backup-using-the-polkadot-js-ui",level:3},{value:"Reset password using the Polkadot-JS UI",id:"reset-password-using-the-polkadot-js-ui",level:3},{value:"Restore Account on the Polkadot-JS UI",id:"restore-account-on-the-polkadot-js-ui",level:3},{value:"Unlocking Locks",id:"unlocking-locks",level:3},{value:"Query Account Data in Polkadot-JS",id:"query-account-data-in-polkadot-js",level:2},{value:"Vanity Generator",id:"vanity-generator",level:2},{value:"Encryption Enhancement",id:"encryption-enhancement",level:2}],h={toc:p},k="wrapper";function m(e){var t=e.components,l=(0,o.Z)(e,i);return(0,r.kt)(k,(0,a.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"sticky",style:{zIndex:1}},(0,r.kt)("br",null),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,r.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,r.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,r.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,r.kt)(s.Z,{mdxType:"DocCardList"}),(0,r.kt)("h2",{id:"account-address-format"},"Account Address Format"),(0,r.kt)("p",null,"An account created for Polkadot can also be\nused on multiple chains in the Polkadot\necosystem. More specifically, the account of a chain that uses the ",(0,r.kt)("inlineCode",{parentName:"p"},"*25519")," account address format\n(the latest list can be accessed on the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/ss58-registry/blob/main/ss58-registry.json"},"ss58 registry repository"),"\nis cross-compatible with all the chains that use the similar format. To switch between the accounts\non different chains, you can follow the guidelines in\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000103707-can-i-use-the-same-account-on-polkadot-kusama-and-parachains-"},"this support article"),".\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.subscan.io/tools/format_transform"},"Subscan has a tool")," you can use to convert your\naddress between the different chain formats."),(0,r.kt)("admonition",{title:"Using the same account on multiple chains - Pros and Cons",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The address format differs from chain to chain, but that difference is only visual. The same private\nkey can be used to sign transactions on behalf of the respective accounts on multiple chains. Using\na single account on multiple chains is convenient, as you do not have to deal with multiple mnemonic\nphrases or private keys. But, if your account gets compromised on one chain, the attacker can gain\nfull access to the accounts on all other chains. This also has implications for the account holder's\nprivacy, as knowing the identity of an account on one chain can expose the account holder's identity\non all the chains. In the Accounts tab, the Polkadot-JS UI displays a warning message next to each\nAccount you are using on multiple chains and recommends using different Accounts on different chains\n(see below)."),(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("img",{alt:"warning multiple chains",src:n(2245).Z,width:"1103",height:"343"}))),(0,r.kt)("p",null,'On Polkadot-JS Extension, you can copy your address by clicking the account\'s icon while the desired\nchain format is active. E.g. selecting "Substrate" as the format will change your address, and\nclicking the colorful icon of your account will copy it in that format. While in\nPolkadot mode, that address format will be\ncopied, and so on.'),(0,r.kt)("h2",{id:"polkadot-js-browser-extension"},"Polkadot-JS Browser Extension"),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=DNU0p5G0Gqc"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/DNU0p5G0Gqc/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=DNU0p5G0Gqc"},"Polkadot-JS Browser Extension Tutorial")))),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"For guidelines about how to create an account using the Polkadot Extension, see\n",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/DNU0p5G0Gqc"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and visit\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000098878-how-to-create-a-dot-account"},(0,r.kt)("strong",{parentName:"a"},"this support article")),".")),(0,r.kt)("p",null,"The Polkadot-JS Browser Extension (the Polkadot Extension) provides a reasonable balance of security\nand usability. It provides a separate local mechanism to generate your address and interact with\nPolkadot."),(0,r.kt)("p",null,'This method involves installing the Polkadot Extension and using it as a \u201cvirtual vault," separate\nfrom your browser, to store your private keys. It also allows the signing of transactions and\nsimilar functionality.'),(0,r.kt)("p",null,"It is still running on the same computer you use to connect to the internet and thus is less secure\nthan using Parity Signer or other air-gapped approaches."),(0,r.kt)("h3",{id:"account-backup-using-the-polkadot-js-browser-extension"},"Account Backup using the Polkadot-JS Browser Extension"),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/DNU0p5G0Gqc"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and visit\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000177677-how-to-export-your-json-backup-file"},(0,r.kt)("strong",{parentName:"a"},"this support page")),"\nto know how to back up your account."),(0,r.kt)("h3",{id:"reset-password-using-the-polkadot-js-browser-extension"},"Reset Password using the Polkadot-JS Browser Extension"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=DNU0p5G0Gqc&t=280s"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," to learn how to\nchange the password for an account that has been created on the Polkadot-JS browser extension (i.e.\nan injected account).")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"Before following the instructions below, make sure you have your mnemonic phrase stored in a safe\nplace accessible to you.")),(0,r.kt)("p",null,"Let's say you created ",(0,r.kt)("inlineCode",{parentName:"p"},"ACCOUNT 1")," protected by password ",(0,r.kt)("inlineCode",{parentName:"p"},"PSW 1"),". To reset the password of your\n",(0,r.kt)("inlineCode",{parentName:"p"},"ACCOUNT 1")," using the browser extension, you must follow the following steps:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Go to ",(0,r.kt)("inlineCode",{parentName:"li"},"ACCOUNT 1"),' on the browser extension and click "Forget account". This action will delete the\naccess to your account. Note that your tokens are still in your account on the\nPolkadot blockchain network.'),(0,r.kt)("li",{parentName:"ul"},'On the browser extension click the "+" button in the top right corner and select the option\n"Import account from pre-existing seed". After entering the mnemonic phrase, you can choose a new\npassword, ',(0,r.kt)("inlineCode",{parentName:"li"},"PSW 2"),".")),(0,r.kt)("admonition",{title:"JSON files do not allow changing account passwords",type:"info"},(0,r.kt)("p",{parentName:"admonition"},'If you add the account to the extension using the option "Restore account from backup JSON file",\nthis will allow you to restore access to your account using a JSON file protected by the password\n',(0,r.kt)("inlineCode",{parentName:"p"},"PSW 1"),", but does not let you set a new password. Thus, ",(0,r.kt)("inlineCode",{parentName:"p"},"PSW 1")," will become the account password by\ndefault.")),(0,r.kt)("admonition",{title:"Accounts on Cold wallets do not need passwords",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"For hardware wallets such as ",(0,r.kt)("a",{parentName:"p",href:"https://www.ledger.com/"},"Ledger"),", you may have to set a PIN for\naccessing the accounts on the device, but you do not need to set a password for every individual\naccount. When you need to make transactions with your account, you are required to sign using your\nLedger device. Also, Ledger wallets let you generate multiple accounts for multiple blockchain\nnetworks without setting different passwords to access such accounts.")),(0,r.kt)("h3",{id:"restore-account-on-the-polkadot-js-browser-extension"},"Restore Account on the Polkadot-JS Browser Extension"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/9ohp8k4Hz8c"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169952-how-to-restore-your-account-in-the-polkadot-extension"},(0,r.kt)("strong",{parentName:"a"},"this support page")),"\nto learn how to restore your account on the Polkadot-JS UI.")),(0,r.kt)("h2",{id:"polkadot-js-ui"},"Polkadot-JS UI"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"For guidelines about how to create an account using Polkadot-JS UI, see\n",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/DNU0p5G0Gqc"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and visit\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000180529"},(0,r.kt)("strong",{parentName:"a"},"this support article")),".")),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"If you use this method to create your account and clear your cookies in your browser, your account\nwill be lost forever if you do not ",(0,r.kt)("a",{parentName:"p",href:"#restore-account-on-the-polkadot-js-ui"},"back it up"),". Make sure\nyou store your seed phrase in a safe place or download the account's JSON file if using the\nPolkadot{.js} browser extension. Learn more about account backup and restoration\n",(0,r.kt)("a",{parentName:"p",href:"#restore-account-on-the-polkadot-js-ui"},"here"),".")),(0,r.kt)("p",null,"Local in-browser account storage is disabled by default on the Polkadot-JS UI. To create an account\nusing the Polkadot-JS UI, navigate to settings > account options and click on allow local in-browser\naccount storage in the drop-down menu. Using the Polkadot-JS user interface without a browser\nextension is ",(0,r.kt)("strong",{parentName:"p"},"not recommended"),". It is the least secure way of generating an account. It should\nonly be used if all other methods are not feasible."),(0,r.kt)("h3",{id:"account-backup-using-the-polkadot-js-ui"},"Account Backup using the Polkadot-JS UI"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/DNU0p5G0Gqc"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and visit\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000177677-how-to-export-your-json-backup-file"},(0,r.kt)("strong",{parentName:"a"},"this support page")),"\nto know how to back up your account.")),(0,r.kt)("h3",{id:"reset-password-using-the-polkadot-js-ui"},"Reset password using the Polkadot-JS UI"),(0,r.kt)("p",null,'To reset the password of an account created with Polkadot-JS Apps UI, you need to go to the\n"Accounts" tab, click the icon with three vertical dots on your account and select "Change this\naccount\'s password".'),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/DNU0p5G0Gqc?t=261"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," to learn how to change the\npassword for an account created on the Polkadot-JS UI (i.e. a non-injected account)."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"If you create an account first using Polkadot-JS Apps UI and then add it to the browser extension,\nyou need to follow the\n",(0,r.kt)("a",{parentName:"p",href:"#reset-password-using-the-browser-extension"},"guidelines for the browser extension")," to change the\npassword of such an account.")),(0,r.kt)("h3",{id:"restore-account-on-the-polkadot-js-ui"},"Restore Account on the Polkadot-JS UI"),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/cBsZqFpBANY"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000180110-how-to-restore-your-account-in-polkadot-js-ui"},(0,r.kt)("strong",{parentName:"a"},"this support page")),"\nto learn how to restore your account on the Polkadot-JS UI."),(0,r.kt)("h3",{id:"unlocking-locks"},"Unlocking Locks"),(0,r.kt)("admonition",{title:"Locks do not stack!",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The biggest lock decides the total amount of locked funds. See\n",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/LHgY7ds_bZ0"},(0,r.kt)("strong",{parentName:"a"},"this walk-through video tutorial"))," that will guide you in the\nprocess of unlocking funds in the example above.")),(0,r.kt)("p",null,"In the example, the locked balance is 0.55 KSM because the biggest lock is on democracy and is 0.55\nKSM. As soon as the democracy lock is removed the next biggest lock is on staking 0.5 KSM (bonded\n0.4 KSM + redeemable 0.1 KSM). This means that the locked balance will be 0.5 KSM, and 0.05 KSM will\nbe added to the transferrable balance. After redeeming the unbonded 0.1 KSM, the locked balance will\nbe 0.4 KSM, and an additional 0.1 KSM will be added to the transferrable balance. Now the biggest\nlock is still the bonded one. This means that even if we remove the vested lock, the locked balance\nwill still be 0.4 KSM and no tokens will be added to the transferrable balance. To free those bonded\ntokens we will need to unbond them and wait for the unbonding period to make them redeemable. If we\nremove the proxy the reserved funds will be automatically added to the transferrable balance."),(0,r.kt)("h2",{id:"query-account-data-in-polkadot-js"},"Query Account Data in Polkadot-JS"),(0,r.kt)("p",null,"In the Polkadot-JS UI, you can also query account data under\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/chainstate"},"Developer > Chain state"),". Under ",(0,r.kt)("inlineCode",{parentName:"p"},"selected state query"),"\nchoose the system pallet followed by ",(0,r.kt)("inlineCode",{parentName:"p"},"account(AccountId32): FrameSystemAccountInfo"),", under ",(0,r.kt)("inlineCode",{parentName:"p"},"Option"),'\nchoose an account, and then click on the "+" button on the right.'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"account_balance_types",src:n(9853).Z,width:"1636",height:"343"})),(0,r.kt)("p",null,"Account information include:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"nonce"),", the number of transactions the account sent."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"consumers"),", the number of other modules that currently depend on this account's existence. The\naccount cannot be reaped until this is zero."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"providers"),", the number of other modules that allow this account to exist. The account may not be\nreaped until this and ",(0,r.kt)("inlineCode",{parentName:"li"},"sufficients")," are both zero."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"sufficients"),", the number of modules that allow this account to exist for their own purposes. The\naccount may not be reaped until this and ",(0,r.kt)("inlineCode",{parentName:"li"},"providers")," are both zero."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"data"),", the additional data that belongs to this account. Used to store the balance(s) in a lot of\nchains.")),(0,r.kt)("p",null,"More in-depth information about the above data can be found in the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/blob/2e7fde832b77b242269b136f1c3b6fffef86f9b6/frame/system/src/lib.rs#LL767C1-L781C24"},"substrate code base"),"."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"AccountData")," structure defines the balance types in Substrate. The three types of balances\ninclude:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"free"),", is the balance that is free but not necessarily transferrable."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"reserved"),", is the balance that is not free, and it is put on hold for on-chain activity such as\ndeposits for multi-signature calls, setting up proxies and identities, and other actions that hold\nstate on the network."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"frozen"),", is the amount that is free to use for on-chain activity but is locked in staking,\ngovernance, or vesting.")),(0,r.kt)("p",null,"The ",(0,r.kt)("strong",{parentName:"p"},"usable")," or transferrable balance of the account is currently calculated using the formula\nbelow:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"transferable = free - max(frozen - reserved, ED)\n")),(0,r.kt)("p",null,"Where ED is the existential deposit. The ",(0,r.kt)("strong",{parentName:"p"},"total")," balance of the account is the sum of ",(0,r.kt)("inlineCode",{parentName:"p"},"free")," and\n",(0,r.kt)("inlineCode",{parentName:"p"},"reserved")," funds. The ",(0,r.kt)("inlineCode",{parentName:"p"},"flags")," describe extra information about the account."),(0,r.kt)("p",null,"More in-depth information about the above data can be found in the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/blob/2e7fde832b77b242269b136f1c3b6fffef86f9b6/frame/balances/src/types.rs#LL95-L114"},"balances pallet in the Substrate code base"),"."),(0,r.kt)("h2",{id:"vanity-generator"},"Vanity Generator"),(0,r.kt)("p",null,"The vanity generator is a tool on ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts/vanity"},"Polkadot-JS UI"),"\nthat lets you generate addresses that contain a specific substring. For the tutorial on how to\ncreate an account using Vanity Generator, visit\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000171416"},"this support article"),"."),(0,r.kt)("h2",{id:"encryption-enhancement"},"Encryption Enhancement"),(0,r.kt)("p",null,"Some newly generated ",(0,r.kt)("inlineCode",{parentName:"p"},"JSON")," account files cannot be imported (restored) into older wallet software.\nThis is due to an enhanced encryption method, noticeable in a slight delay when\nencrypting/decrypting your wallet. If you cannot load a ",(0,r.kt)("inlineCode",{parentName:"p"},"JSON")," file, please use the latest version\nof the wallet software. If you cannot load it, ensure that the wallet software uses the newest\nversion of the ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/api/"},"Polkadot API"),"."))}m.isMDXComponent=!0},9853:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/AccountData-struct-118d0bf533806084460cba05bef62b9c.png"},2245:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/warning-multichain-account-0719ff59691f3ff48562d92ef2295e84.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/9f804621.938f23ad.js b/assets/js/9f804621.938f23ad.js deleted file mode 100644 index f973af56139d..000000000000 --- a/assets/js/9f804621.938f23ad.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[4143],{47940:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var a=n(74165),o=n(15861),r=n(67294),s=n(87152),i=n(14741),l=n(67425);function c(e,t,n){return u.apply(this,arguments)}function u(){return(u=(0,o.Z)((0,a.Z)().mark((function e(t,n,o){var r,l,c,u,d;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return r="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return r="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return r="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return r="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==r){e.next=18;break}return e.abrupt("return");case 18:return c=new s.U(r),e.next=21,i.G.create({provider:c});case 21:u=e.sent,(d=n.split(".")).forEach((function(e){e in u&&(u=u[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=u.toString(),e.abrupt("break",35);case 29:return e.next=31,u();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+n);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,n,a){switch(t){case"humanReadable":(0,l.HumanReadable)(e,n,a);break;case"precise":(0,l.Precise)(e,n,a);break;case"blocksToDays":(0,l.BlocksToDays)(e,a);break;case"erasToDays":(0,l.ErasToDays)(e,a,n);break;case"percentage":(0,l.Percentage)(e,a);break;case"permillToPercent":(0,l.PermillToPercent)(e,a);break;case"arrayLength":(0,l.ArrayLength)(e,a);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(e){var t=e.network,n=e.path,s=e.defaultValue,i=e.filter,l=void 0===i?void 0:i,u=(0,r.useState)(""),p=u[0],h=u[1];return t=t.toLowerCase(),(0,r.useEffect)((function(){void 0!==l?d(s.toString(),l,t,h):h(s.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var r=function(){var e=(0,o.Z)((0,a.Z)().mark((function e(){var o;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,c(t,n,h);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(o,l,t,h):h(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{r()}catch(i){console.log(i)}}}),[]),p}},67425:e=>{var t="polkadot",n="kusama",a="statemine",o="statemint",r={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,s,i){var l=void 0;if(s===t||s===o)l=3;else{if(s!==n&&s!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),i((e=Number.isInteger(e/r[s].precision)?e/r[s].precision+" "+r[s].symbol:(e/r[s].precision).toFixed(l)+" "+r[s].symbol).toString())},Precise:function(e,t,n){n(e=(e=parseFloat(e))/r[t].precision+" "+r[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,r,s){var i=void 0;if(s===t||s===o)i=1;else{if(s!==n&&s!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");i=4}r((e/=i).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},52991:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var a=n(67294),o=n(86010),r=n(53438),s=n(39960),i=n(13919),l=n(95999);const c={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function u(e){var t=e.href,n=e.children;return a.createElement(s.Z,{href:t,className:(0,o.Z)("card padding--lg",c.cardContainer)},n)}function d(e){var t=e.href,n=e.icon,r=e.title,s=e.description;return a.createElement(u,{href:t},a.createElement("h2",{className:(0,o.Z)("text--truncate",c.cardTitle),title:r},n," ",r),s&&a.createElement("p",{className:(0,o.Z)("text--truncate",c.cardDescription),title:s},s))}function p(e){var t,n=e.item,o=(0,r.Wl)(n);return o?a.createElement(d,{href:o,icon:"\ud83d\uddc3\ufe0f",title:n.label,description:null!=(t=n.description)?t:(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:n.items.length})}):null}function h(e){var t,n,o=e.item,s=(0,i.Z)(o.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,r.xz)(null!=(t=o.docId)?t:void 0);return a.createElement(d,{href:o.href,icon:s,title:o.label,description:null!=(n=o.description)?n:null==l?void 0:l.description})}function k(e){var t=e.item;switch(t.type){case"link":return a.createElement(h,{item:t});case"category":return a.createElement(p,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}function m(e){var t=e.className,n=(0,r.jA)();return a.createElement(f,{items:n.items,className:t})}function f(e){var t=e.items,n=e.className;if(!t)return a.createElement(m,e);var s=(0,r.MN)(t);return a.createElement("section",{className:(0,o.Z)("row",n)},s.map((function(e,t){return a.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},a.createElement(k,{item:e}))})))}},85162:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var a=n(67294),o=n(86010);const r={tabItem:"tabItem_Ymn6"};function s(e){var t=e.children,n=e.hidden,s=e.className;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(r.tabItem,s),hidden:n},t)}},74866:(e,t,n)=>{"use strict";n.d(t,{Z:()=>v});var a=n(87462),o=n(67294),r=n(86010),s=n(12466),i=n(16550),l=n(91980),c=n(67392),u=n(50012);function d(e){return function(e){var t,n;return null!=(t=null==(n=o.Children.map(e,(function(e){if(!e||(0,o.isValidElement)(e)&&(t=e.props)&&"object"==typeof t&&"value"in t)return e;var t;throw new Error("Docusaurus error: Bad child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:n.filter(Boolean))?t:[]}(e).map((function(e){var t=e.props;return{value:t.value,label:t.label,attributes:t.attributes,default:t.default}}))}function p(e){var t=e.values,n=e.children;return(0,o.useMemo)((function(){var e=null!=t?t:d(n);return function(e){var t=(0,c.l)(e,(function(e,t){return e.value===t.value}));if(t.length>0)throw new Error('Docusaurus error: Duplicate values "'+t.map((function(e){return e.value})).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[t,n])}function h(e){var t=e.value;return e.tabValues.some((function(e){return e.value===t}))}function k(e){var t=e.queryString,n=void 0!==t&&t,a=e.groupId,r=(0,i.k6)(),s=function(e){var t=e.queryString,n=void 0!==t&&t,a=e.groupId;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=a?a:null}({queryString:n,groupId:a});return[(0,l._X)(s),(0,o.useCallback)((function(e){if(s){var t=new URLSearchParams(r.location.search);t.set(s,e),r.replace(Object.assign({},r.location,{search:t.toString()}))}}),[s,r])]}function m(e){var t,n,a,r,s=e.defaultValue,i=e.queryString,l=void 0!==i&&i,c=e.groupId,d=p(e),m=(0,o.useState)((function(){return function(e){var t,n=e.defaultValue,a=e.tabValues;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!h({value:n,tabValues:a}))throw new Error('Docusaurus error: The has a defaultValue "'+n+'" but none of its children has the corresponding value. Available values are: '+a.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return n}var o=null!=(t=a.find((function(e){return e.default})))?t:a[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:s,tabValues:d})})),f=m[0],b=m[1],g=k({queryString:l,groupId:c}),w=g[0],y=g[1],v=(t=function(e){return e?"docusaurus.tab."+e:null}({groupId:c}.groupId),n=(0,u.Nk)(t),a=n[0],r=n[1],[a,(0,o.useCallback)((function(e){t&&r.set(e)}),[t,r])]),N=v[0],S=v[1],x=function(){var e=null!=w?w:N;return h({value:e,tabValues:d})?e:null}();return(0,o.useLayoutEffect)((function(){x&&b(x)}),[x]),{selectedValue:f,selectValue:(0,o.useCallback)((function(e){if(!h({value:e,tabValues:d}))throw new Error("Can't select invalid tab value="+e);b(e),y(e),S(e)}),[y,S,d]),tabValues:d}}var f=n(72389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function g(e){var t=e.className,n=e.block,i=e.selectedValue,l=e.selectValue,c=e.tabValues,u=[],d=(0,s.o5)().blockElementScrollPositionUntilNextRender,p=function(e){var t=e.currentTarget,n=u.indexOf(t),a=c[n].value;a!==i&&(d(t),l(a))},h=function(e){var t,n=null;switch(e.key){case"Enter":p(e);break;case"ArrowRight":var a,o=u.indexOf(e.currentTarget)+1;n=null!=(a=u[o])?a:u[0];break;case"ArrowLeft":var r,s=u.indexOf(e.currentTarget)-1;n=null!=(r=u[s])?r:u[u.length-1]}null==(t=n)||t.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t)},c.map((function(e){var t=e.value,n=e.label,s=e.attributes;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:function(e){return u.push(e)},onKeyDown:h,onClick:p},s,{className:(0,r.Z)("tabs__item",b.tabItem,null==s?void 0:s.className,{"tabs__item--active":i===t})}),null!=n?n:t)})))}function w(e){var t=e.lazy,n=e.children,a=e.selectedValue,r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){var s=r.find((function(e){return e.props.value===a}));return s?(0,o.cloneElement)(s,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map((function(e,t){return(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a})})))}function y(e){var t=m(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",b.tabList)},o.createElement(g,(0,a.Z)({},e,t)),o.createElement(w,(0,a.Z)({},e,t)))}function v(e){var t=(0,f.Z)();return o.createElement(y,(0,a.Z)({key:String(t)},e))}},35426:(e,t,n)=>{"use strict";n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>m,frontMatter:()=>l,metadata:()=>u,toc:()=>p});var a=n(87462),o=n(63366),r=(n(67294),n(3905)),s=(n(47940),n(74866),n(85162),n(52991)),i=["components"],l={id:"learn-guides-accounts",title:"Polkadot-JS Guides about Accounts",sidebar_label:"Account Guides",description:"Polkadot-JS Guides about Accounts",keyword:["guides","polkadot-js","accounts"],slug:"../learn-guides-accounts"},c=void 0,u={unversionedId:"learn/learn-guides-accounts",id:"learn/learn-guides-accounts",title:"Polkadot-JS Guides about Accounts",description:"Polkadot-JS Guides about Accounts",source:"@site/../docs/learn/learn-guides-accounts.md",sourceDirName:"learn",slug:"/learn-guides-accounts",permalink:"/docs/learn-guides-accounts",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-accounts.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710309813,formattedLastUpdatedAt:"Mar 13, 2024",frontMatter:{id:"learn-guides-accounts",title:"Polkadot-JS Guides about Accounts",sidebar_label:"Account Guides",description:"Polkadot-JS Guides about Accounts",keyword:["guides","polkadot-js","accounts"],slug:"../learn-guides-accounts"},sidebar:"docs",previous:{title:"Polkadot-JS Guides",permalink:"/docs/learn-polkadot-js-guides"},next:{title:"Multisig Guides",permalink:"/docs/learn-guides-accounts-multisig"}},d={},p=[{value:"Account Address Format",id:"account-address-format",level:2},{value:"Polkadot-JS Browser Extension",id:"polkadot-js-browser-extension",level:2},{value:"Account Backup using the Polkadot-JS Browser Extension",id:"account-backup-using-the-polkadot-js-browser-extension",level:3},{value:"Reset Password using the Polkadot-JS Browser Extension",id:"reset-password-using-the-polkadot-js-browser-extension",level:3},{value:"Restore Account on the Polkadot-JS Browser Extension",id:"restore-account-on-the-polkadot-js-browser-extension",level:3},{value:"Polkadot-JS UI",id:"polkadot-js-ui",level:2},{value:"Account Backup using the Polkadot-JS UI",id:"account-backup-using-the-polkadot-js-ui",level:3},{value:"Reset password using the Polkadot-JS UI",id:"reset-password-using-the-polkadot-js-ui",level:3},{value:"Restore Account on the Polkadot-JS UI",id:"restore-account-on-the-polkadot-js-ui",level:3},{value:"Unlocking Locks",id:"unlocking-locks",level:3},{value:"Query Account Data in Polkadot-JS",id:"query-account-data-in-polkadot-js",level:2},{value:"Vanity Generator",id:"vanity-generator",level:2},{value:"Encryption Enhancement",id:"encryption-enhancement",level:2}],h={toc:p},k="wrapper";function m(e){var t=e.components,l=(0,o.Z)(e,i);return(0,r.kt)(k,(0,a.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(s.Z,{mdxType:"DocCardList"}),(0,r.kt)("h2",{id:"account-address-format"},"Account Address Format"),(0,r.kt)("p",null,"An account created for Polkadot can also be\nused on multiple chains in the Polkadot\necosystem. More specifically, the account of a chain that uses the ",(0,r.kt)("inlineCode",{parentName:"p"},"*25519")," account address format\n(the latest list can be accessed on the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/ss58-registry/blob/main/ss58-registry.json"},"ss58 registry repository"),"\nis cross-compatible with all the chains that use the similar format. To switch between the accounts\non different chains, you can follow the guidelines in\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000103707-can-i-use-the-same-account-on-polkadot-kusama-and-parachains-"},"this support article"),".\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.subscan.io/tools/format_transform"},"Subscan has a tool")," you can use to convert your\naddress between the different chain formats."),(0,r.kt)("admonition",{title:"Using the same account on multiple chains - Pros and Cons",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The address format differs from chain to chain, but that difference is only visual. The same private\nkey can be used to sign transactions on behalf of the respective accounts on multiple chains. Using\na single account on multiple chains is convenient, as you do not have to deal with multiple mnemonic\nphrases or private keys. But, if your account gets compromised on one chain, the attacker can gain\nfull access to the accounts on all other chains. This also has implications for the account holder's\nprivacy, as knowing the identity of an account on one chain can expose the account holder's identity\non all the chains. In the Accounts tab, the Polkadot-JS UI displays a warning message next to each\nAccount you are using on multiple chains and recommends using different Accounts on different chains\n(see below)."),(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("img",{alt:"warning multiple chains",src:n(2245).Z,width:"1103",height:"343"}))),(0,r.kt)("p",null,'On Polkadot-JS Extension, you can copy your address by clicking the account\'s icon while the desired\nchain format is active. E.g. selecting "Substrate" as the format will change your address, and\nclicking the colorful icon of your account will copy it in that format. While in\nPolkadot mode, that address format will be\ncopied, and so on.'),(0,r.kt)("h2",{id:"polkadot-js-browser-extension"},"Polkadot-JS Browser Extension"),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=DNU0p5G0Gqc"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/DNU0p5G0Gqc/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=DNU0p5G0Gqc"},"Polkadot-JS Browser Extension Tutorial")))),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"For guidelines about how to create an account using the Polkadot Extension, see\n",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/DNU0p5G0Gqc"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and visit\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000098878-how-to-create-a-dot-account"},(0,r.kt)("strong",{parentName:"a"},"this support article")),".")),(0,r.kt)("p",null,"The Polkadot-JS Browser Extension (the Polkadot Extension) provides a reasonable balance of security\nand usability. It provides a separate local mechanism to generate your address and interact with\nPolkadot."),(0,r.kt)("p",null,'This method involves installing the Polkadot Extension and using it as a \u201cvirtual vault," separate\nfrom your browser, to store your private keys. It also allows the signing of transactions and\nsimilar functionality.'),(0,r.kt)("p",null,"It is still running on the same computer you use to connect to the internet and thus is less secure\nthan using Parity Signer or other air-gapped approaches."),(0,r.kt)("h3",{id:"account-backup-using-the-polkadot-js-browser-extension"},"Account Backup using the Polkadot-JS Browser Extension"),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/DNU0p5G0Gqc"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and visit\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000177677-how-to-export-your-json-backup-file"},(0,r.kt)("strong",{parentName:"a"},"this support page")),"\nto know how to back up your account."),(0,r.kt)("h3",{id:"reset-password-using-the-polkadot-js-browser-extension"},"Reset Password using the Polkadot-JS Browser Extension"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=DNU0p5G0Gqc&t=280s"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," to learn how to\nchange the password for an account that has been created on the Polkadot-JS browser extension (i.e.\nan injected account).")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"Before following the instructions below, make sure you have your mnemonic phrase stored in a safe\nplace accessible to you.")),(0,r.kt)("p",null,"Let's say you created ",(0,r.kt)("inlineCode",{parentName:"p"},"ACCOUNT 1")," protected by password ",(0,r.kt)("inlineCode",{parentName:"p"},"PSW 1"),". To reset the password of your\n",(0,r.kt)("inlineCode",{parentName:"p"},"ACCOUNT 1")," using the browser extension, you must follow the following steps:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Go to ",(0,r.kt)("inlineCode",{parentName:"li"},"ACCOUNT 1"),' on the browser extension and click "Forget account". This action will delete the\naccess to your account. Note that your tokens are still in your account on the\nPolkadot blockchain network.'),(0,r.kt)("li",{parentName:"ul"},'On the browser extension click the "+" button in the top right corner and select the option\n"Import account from pre-existing seed". After entering the mnemonic phrase, you can choose a new\npassword, ',(0,r.kt)("inlineCode",{parentName:"li"},"PSW 2"),".")),(0,r.kt)("admonition",{title:"JSON files do not allow changing account passwords",type:"info"},(0,r.kt)("p",{parentName:"admonition"},'If you add the account to the extension using the option "Restore account from backup JSON file",\nthis will allow you to restore access to your account using a JSON file protected by the password\n',(0,r.kt)("inlineCode",{parentName:"p"},"PSW 1"),", but does not let you set a new password. Thus, ",(0,r.kt)("inlineCode",{parentName:"p"},"PSW 1")," will become the account password by\ndefault.")),(0,r.kt)("admonition",{title:"Accounts on Cold wallets do not need passwords",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"For hardware wallets such as ",(0,r.kt)("a",{parentName:"p",href:"https://www.ledger.com/"},"Ledger"),", you may have to set a PIN for\naccessing the accounts on the device, but you do not need to set a password for every individual\naccount. When you need to make transactions with your account, you are required to sign using your\nLedger device. Also, Ledger wallets let you generate multiple accounts for multiple blockchain\nnetworks without setting different passwords to access such accounts.")),(0,r.kt)("h3",{id:"restore-account-on-the-polkadot-js-browser-extension"},"Restore Account on the Polkadot-JS Browser Extension"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/9ohp8k4Hz8c"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169952-how-to-restore-your-account-in-the-polkadot-extension"},(0,r.kt)("strong",{parentName:"a"},"this support page")),"\nto learn how to restore your account on the Polkadot-JS UI.")),(0,r.kt)("h2",{id:"polkadot-js-ui"},"Polkadot-JS UI"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"For guidelines about how to create an account using Polkadot-JS UI, see\n",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/DNU0p5G0Gqc"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and visit\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000180529"},(0,r.kt)("strong",{parentName:"a"},"this support article")),".")),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"If you use this method to create your account and clear your cookies in your browser, your account\nwill be lost forever if you do not ",(0,r.kt)("a",{parentName:"p",href:"#restore-account-on-the-polkadot-js-ui"},"back it up"),". Make sure\nyou store your seed phrase in a safe place or download the account's JSON file if using the\nPolkadot{.js} browser extension. Learn more about account backup and restoration\n",(0,r.kt)("a",{parentName:"p",href:"#restore-account-on-the-polkadot-js-ui"},"here"),".")),(0,r.kt)("p",null,"Local in-browser account storage is disabled by default on the Polkadot-JS UI. To create an account\nusing the Polkadot-JS UI, navigate to settings > account options and click on allow local in-browser\naccount storage in the drop-down menu. Using the Polkadot-JS user interface without a browser\nextension is ",(0,r.kt)("strong",{parentName:"p"},"not recommended"),". It is the least secure way of generating an account. It should\nonly be used if all other methods are not feasible."),(0,r.kt)("h3",{id:"account-backup-using-the-polkadot-js-ui"},"Account Backup using the Polkadot-JS UI"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/DNU0p5G0Gqc"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and visit\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000177677-how-to-export-your-json-backup-file"},(0,r.kt)("strong",{parentName:"a"},"this support page")),"\nto know how to back up your account.")),(0,r.kt)("h3",{id:"reset-password-using-the-polkadot-js-ui"},"Reset password using the Polkadot-JS UI"),(0,r.kt)("p",null,'To reset the password of an account created with Polkadot-JS Apps UI, you need to go to the\n"Accounts" tab, click the icon with three vertical dots on your account and select "Change this\naccount\'s password".'),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/DNU0p5G0Gqc?t=261"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," to learn how to change the\npassword for an account created on the Polkadot-JS UI (i.e. a non-injected account)."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"If you create an account first using Polkadot-JS Apps UI and then add it to the browser extension,\nyou need to follow the\n",(0,r.kt)("a",{parentName:"p",href:"#reset-password-using-the-browser-extension"},"guidelines for the browser extension")," to change the\npassword of such an account.")),(0,r.kt)("h3",{id:"restore-account-on-the-polkadot-js-ui"},"Restore Account on the Polkadot-JS UI"),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/cBsZqFpBANY"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000180110-how-to-restore-your-account-in-polkadot-js-ui"},(0,r.kt)("strong",{parentName:"a"},"this support page")),"\nto learn how to restore your account on the Polkadot-JS UI."),(0,r.kt)("h3",{id:"unlocking-locks"},"Unlocking Locks"),(0,r.kt)("admonition",{title:"Locks do not stack!",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The biggest lock decides the total amount of locked funds. See\n",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/LHgY7ds_bZ0"},(0,r.kt)("strong",{parentName:"a"},"this walk-through video tutorial"))," that will guide you in the\nprocess of unlocking funds in the example above.")),(0,r.kt)("p",null,"In the example, the locked balance is 0.55 KSM because the biggest lock is on democracy and is 0.55\nKSM. As soon as the democracy lock is removed the next biggest lock is on staking 0.5 KSM (bonded\n0.4 KSM + redeemable 0.1 KSM). This means that the locked balance will be 0.5 KSM, and 0.05 KSM will\nbe added to the transferrable balance. After redeeming the unbonded 0.1 KSM, the locked balance will\nbe 0.4 KSM, and an additional 0.1 KSM will be added to the transferrable balance. Now the biggest\nlock is still the bonded one. This means that even if we remove the vested lock, the locked balance\nwill still be 0.4 KSM and no tokens will be added to the transferrable balance. To free those bonded\ntokens we will need to unbond them and wait for the unbonding period to make them redeemable. If we\nremove the proxy the reserved funds will be automatically added to the transferrable balance."),(0,r.kt)("h2",{id:"query-account-data-in-polkadot-js"},"Query Account Data in Polkadot-JS"),(0,r.kt)("p",null,"In the Polkadot-JS UI, you can also query account data under\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/chainstate"},"Developer > Chain state"),". Under ",(0,r.kt)("inlineCode",{parentName:"p"},"selected state query"),"\nchoose the system pallet followed by ",(0,r.kt)("inlineCode",{parentName:"p"},"account(AccountId32): FrameSystemAccountInfo"),", under ",(0,r.kt)("inlineCode",{parentName:"p"},"Option"),'\nchoose an account, and then click on the "+" button on the right.'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"account_balance_types",src:n(9853).Z,width:"1636",height:"343"})),(0,r.kt)("p",null,"Account information include:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"nonce"),", the number of transactions the account sent."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"consumers"),", the number of other modules that currently depend on this account's existence. The\naccount cannot be reaped until this is zero."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"providers"),", the number of other modules that allow this account to exist. The account may not be\nreaped until this and ",(0,r.kt)("inlineCode",{parentName:"li"},"sufficients")," are both zero."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"sufficients"),", the number of modules that allow this account to exist for their own purposes. The\naccount may not be reaped until this and ",(0,r.kt)("inlineCode",{parentName:"li"},"providers")," are both zero."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"data"),", the additional data that belongs to this account. Used to store the balance(s) in a lot of\nchains.")),(0,r.kt)("p",null,"More in-depth information about the above data can be found in the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/blob/2e7fde832b77b242269b136f1c3b6fffef86f9b6/frame/system/src/lib.rs#LL767C1-L781C24"},"substrate code base"),"."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"AccountData")," structure defines the balance types in Substrate. The three types of balances\ninclude:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"free"),", is the balance that is free but not necessarily transferrable."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"reserved"),", is the balance that is not free, and it is put on hold for on-chain activity such as\ndeposits for multi-signature calls, setting up proxies and identities, and other actions that hold\nstate on the network."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"frozen"),", is the amount that is free to use for on-chain activity but is locked in staking,\ngovernance, or vesting.")),(0,r.kt)("p",null,"The ",(0,r.kt)("strong",{parentName:"p"},"usable")," or transferrable balance of the account is currently calculated using the formula\nbelow:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"transferable = free - max(frozen - reserved, ED)\n")),(0,r.kt)("p",null,"Where ED is the existential deposit. The ",(0,r.kt)("strong",{parentName:"p"},"total")," balance of the account is the sum of ",(0,r.kt)("inlineCode",{parentName:"p"},"free")," and\n",(0,r.kt)("inlineCode",{parentName:"p"},"reserved")," funds. The ",(0,r.kt)("inlineCode",{parentName:"p"},"flags")," describe extra information about the account."),(0,r.kt)("p",null,"More in-depth information about the above data can be found in the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/blob/2e7fde832b77b242269b136f1c3b6fffef86f9b6/frame/balances/src/types.rs#LL95-L114"},"balances pallet in the Substrate code base"),"."),(0,r.kt)("h2",{id:"vanity-generator"},"Vanity Generator"),(0,r.kt)("p",null,"The vanity generator is a tool on ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts/vanity"},"Polkadot-JS UI"),"\nthat lets you generate addresses that contain a specific substring. For the tutorial on how to\ncreate an account using Vanity Generator, visit\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000171416"},"this support article"),"."),(0,r.kt)("h2",{id:"encryption-enhancement"},"Encryption Enhancement"),(0,r.kt)("p",null,"Some newly generated ",(0,r.kt)("inlineCode",{parentName:"p"},"JSON")," account files cannot be imported (restored) into older wallet software.\nThis is due to an enhanced encryption method, noticeable in a slight delay when\nencrypting/decrypting your wallet. If you cannot load a ",(0,r.kt)("inlineCode",{parentName:"p"},"JSON")," file, please use the latest version\nof the wallet software. If you cannot load it, ensure that the wallet software uses the newest\nversion of the ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/api/"},"Polkadot API"),"."))}m.isMDXComponent=!0},9853:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/AccountData-struct-118d0bf533806084460cba05bef62b9c.png"},2245:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/warning-multichain-account-0719ff59691f3ff48562d92ef2295e84.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/a62d9768.39dfc921.js b/assets/js/a62d9768.39dfc921.js deleted file mode 100644 index b52846fa5b16..000000000000 --- a/assets/js/a62d9768.39dfc921.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6277],{46241:e=>{e.exports=JSON.parse('{"title":"Advanced Guides for Asset Hub","description":"Polkadot-JS guides about the Asset Hub.","slug":"/learn-guides-assets-index","permalink":"/docs/learn-guides-assets-index","navigation":{"previous":{"title":"Polkadot Vault Guides","permalink":"/docs/learn-guides-vault"},"next":{"title":"Asset Guides","permalink":"/docs/learn-guides-assets-create"}}}')}}]); \ No newline at end of file diff --git a/assets/js/b0a48d97.2acac64f.js b/assets/js/b0a48d97.2acac64f.js deleted file mode 100644 index efcc77d20de3..000000000000 --- a/assets/js/b0a48d97.2acac64f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3091],{3905:(e,t,o)=>{o.d(t,{Zo:()=>c,kt:()=>g});var n=o(67294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var t=1;t=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var d=n.createContext({}),l=function(e){var t=n.useContext(d),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},c=function(e){var t=l(e.components);return n.createElement(d.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,a=e.originalType,d=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=l(o),h=r,g=p["".concat(d,".").concat(h)]||p[h]||u[h]||a;return o?n.createElement(g,i(i({ref:t},c),{},{components:o})):n.createElement(g,i({ref:t},c))}));function g(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=o.length,i=new Array(a);i[0]=h;var s={};for(var d in t)hasOwnProperty.call(t,d)&&(s[d]=t[d]);s.originalType=e,s[p]="string"==typeof e?e:r,i[1]=s;for(var l=2;l{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>g,frontMatter:()=>s,metadata:()=>l,toc:()=>p});var n=o(87462),r=o(63366),a=(o(67294),o(3905)),i=["components"],s={id:"learn-guides-ledger",title:"Polkadot-JS Guides for Ledger Devices",sidebar_label:"Ledger Guides",description:"Polkadot-JS Guides for Ledger Devices.",keywords:["ledger","polkadot-js"],slug:"../learn-guides-ledger"},d=void 0,l={unversionedId:"learn/learn-guides-ledger",id:"learn/learn-guides-ledger",title:"Polkadot-JS Guides for Ledger Devices",description:"Polkadot-JS Guides for Ledger Devices.",source:"@site/../docs/learn/learn-guides-ledger.md",sourceDirName:"learn",slug:"/learn-guides-ledger",permalink:"/docs/learn-guides-ledger",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-ledger.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710309813,formattedLastUpdatedAt:"Mar 13, 2024",frontMatter:{id:"learn-guides-ledger",title:"Polkadot-JS Guides for Ledger Devices",sidebar_label:"Ledger Guides",description:"Polkadot-JS Guides for Ledger Devices.",keywords:["ledger","polkadot-js"],slug:"../learn-guides-ledger"},sidebar:"docs",previous:{title:"Identity Guides",permalink:"/docs/learn-guides-identity"},next:{title:"Polkadot Vault Guides",permalink:"/docs/learn-guides-vault"}},c={},p=[{value:"Loading Your Account",id:"loading-your-account",level:2},{value:"Derivation paths",id:"derivation-paths",level:3},{value:"Connecting your ledger device",id:"connecting-your-ledger-device",level:3},{value:"Confirming the Address on your Device",id:"confirming-the-address-on-your-device",level:2},{value:"Checking the Balance of Your Account",id:"checking-the-balance-of-your-account",level:2},{value:"Sending a Transfer with Ledger Devices",id:"sending-a-transfer-with-ledger-devices",level:2},{value:"Receiving a Transfer",id:"receiving-a-transfer",level:2},{value:"Staking",id:"staking",level:2},{value:"Removing Expired Democracy Locks",id:"removing-expired-democracy-locks",level:2}],u={toc:p},h="wrapper";function g(e){var t=e.components,s=(0,r.Z)(e,i);return(0,a.kt)(h,(0,n.Z)({},u,s,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"loading-your-account"},"Loading Your Account"),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Ledger Live should be off while using Ledger with Polkadot-JS UI as it can interfere with normal\noperation.")),(0,a.kt)("p",null,"You can import your Ledger account to ",(0,a.kt)("a",{parentName:"p",href:"https://polkadot.js.org/extension/"},"Polkadot Extension")," or to\nthe ",(0,a.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS UI"),". For instructions on how to import\nLedger accounts to the Polkadot Extension read through\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000175387-how-to-add-your-ledger-through-the-polkadot-extension"},"this support article"),",\nwhile if you want to import Ledger accounts to the Polkadot-JS UI you can consult\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000170812-how-to-add-ledger-account-through-the-polkadot-js-ui"},"this other article"),"."),(0,a.kt)("h3",{id:"derivation-paths"},"Derivation paths"),(0,a.kt)("p",null,"When adding a Ledger account using the extension or the UI, you will be asked to select an\n",(0,a.kt)("inlineCode",{parentName:"p"},"account type")," and an ",(0,a.kt)("inlineCode",{parentName:"p"},"account index"),". The first lets you select an account, while the second lets\nyou pick a derivation path from that account - think of it like a formula from which child accounts\nare generated. When you are creating a\nPolkadot ledger account for the first time on\nLedger Live with name ",(0,a.kt)("inlineCode",{parentName:"p"},"Polkadot 1"),"",", this\ncan be added to Polkadot-JS using the 0/0 derivation path (i.e. account type = 0 and account index =\n0). If you add a second account called\n",(0,a.kt)("inlineCode",{parentName:"p"},"Polkadot 2"),"",", this will correspond to the\n1/0 derivation path, and so on. We thus have multiple parent accounts that can be viewed and used in\nboth Ledger Live and Polkadot-JS. Additionally, we can use Polkadot-JS UI to create multiple\nchildren accounts from each parent account. For example,\n",(0,a.kt)("inlineCode",{parentName:"p"},"Polkadot 1"),""," with 0/0 derivation path can\nhave child 0/1, 0/2, etc. that can be used within the UI. However, such children accounts cannot be\nused in Ledger Live, as it only scans through the parent accounts. So, remember that the balances on\nthe children accounts cannot be viewed, and you will not be able to transact with those accounts on\nLedger Live."),(0,a.kt)("h3",{id:"connecting-your-ledger-device"},"Connecting your ledger device"),(0,a.kt)("p",null,"While using a ledger device to sign transactions, depending on your browser and its security\nsettings, you might need to confirm the USB connection through a popup like the one below:"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Display the device connection popup",src:o(57302).Z,width:"468",height:"461"})),(0,a.kt)("p",null,'If you are adding your Ledger Nano for the first time, click on the "Unknown device" line and the\n"Connect" button will become available.'),(0,a.kt)("admonition",{title:"Signature error message",type:"info"},(0,a.kt)("p",{parentName:"admonition"},"If you have already connected your device, but an error message appears before signing a\ntransaction, make sure you have opened the\nPolkadot application on your Ledger Nano\ndevice. Visit\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181994"},"this support page")," for\nmore information about signing transactions using your ledger.")),(0,a.kt)("h2",{id:"confirming-the-address-on-your-device"},"Confirming the Address on your Device"),(0,a.kt)("p",null,"To display your Polkadot ledger account\naddress on your Ledger Nano, you can follow the guidelines on\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181854-how-to-confirm-your-account-address-on-your-ledger-device"},"this support article"),".\nHere you can scroll through and make sure the address matches what is displayed on\n",(0,a.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS UI"),"."),(0,a.kt)("h2",{id:"checking-the-balance-of-your-account"},"Checking the Balance of Your Account"),(0,a.kt)("p",null,"There are a few methods to check the balance of your account. Check out\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169332-where-can-i-see-the-balance-of-my-account-"},"this support article"),"\nfor information."),(0,a.kt)("h2",{id:"sending-a-transfer-with-ledger-devices"},"Sending a Transfer with Ledger Devices"),(0,a.kt)("admonition",{title:"Verifying Extrinsics",type:"danger"},(0,a.kt)("p",{parentName:"admonition"},"Visit the\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000179161-how-can-i-verify-what-extrinsic-i-m-signing-#Verify-an-extrinsic-using-Ledger"},(0,a.kt)("strong",{parentName:"a"},"dedicated support page")),"\nand see ",(0,a.kt)("a",{parentName:"p",href:"https://youtu.be/bxMs-9fBtFk?t=360"},(0,a.kt)("strong",{parentName:"a"},"this video tutorial"))," tutorial to learn about how to\nverify extrinsics before signing them. The video will also mention potential attacks that can happen\nto you while signing for transactions.")),(0,a.kt)("p",null,"General instructions to send a transfer can be found on\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000170304-how-to-send-transfer-funds-out-of-your-dot-account-on-the-polkadot-js-ui"},"this support page"),".\nTo sign transactions with your Ledger nano check\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181994"},"this support article")," or\nsee ",(0,a.kt)("a",{parentName:"p",href:"https://youtu.be/gbvrHzr4EDY?t=579"},"this video tutorial"),"."),(0,a.kt)("h2",{id:"receiving-a-transfer"},"Receiving a Transfer"),(0,a.kt)("p",null,"To receive a transfer on the accounts stored on your Ledger device, you must provide the sender\n(i.e. the payer) with your address. To do so, follow the instructions on\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181866-how-to-receive-dot-to-my-account-on-polkadot-js-ui"},"this support page"),"."),(0,a.kt)("admonition",{type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"Before giving anyone your address, ensure it matches what's on the Ledger by\n",(0,a.kt)("a",{parentName:"p",href:"#confirming-the-address-on-your-device"},"confirming the address on your device"),". Some malware will\nintercept clicks and clipboard requests and can change your copied value in-flight, so being extra\nvigilant around copy-paste operations makes sense.")),(0,a.kt)("h2",{id:"staking"},"Staking"),(0,a.kt)("p",null,'For staking using Ledger devices, check the section "How to stake using your Ledger" on\n',(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000168057-how-do-i-stake-nominate-on-polkadot-"},"this support article"),"."),(0,a.kt)("h2",{id:"removing-expired-democracy-locks"},"Removing Expired Democracy Locks"),(0,a.kt)("p",null,"Check out\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181870-how-to-remove-expired-democracy-locks"},"this support page"),"\nthe learn how to remove democracy locks after the end of a Governance referendum."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Please be advised"),": Despite the Polkadot ledger application being compatible with both the Ledger\nNano S and the Ledger Nano X, some extrinsics are not supported by the light version. The following\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/Zondax/ledger-polkadot"},"repository by Zondax")," lists the currently supported\nextrinsics on the XL version of the Ledger app."))}g.isMDXComponent=!0},57302:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/query-device-d7d9e7e7d28a34a343c59094db864a1a.png"}}]); \ No newline at end of file diff --git a/assets/js/b0a48d97.a554336b.js b/assets/js/b0a48d97.a554336b.js new file mode 100644 index 000000000000..160477227f21 --- /dev/null +++ b/assets/js/b0a48d97.a554336b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3091],{3905:(e,t,o)=>{o.d(t,{Zo:()=>c,kt:()=>g});var n=o(67294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var t=1;t=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var d=n.createContext({}),l=function(e){var t=n.useContext(d),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},c=function(e){var t=l(e.components);return n.createElement(d.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,a=e.originalType,d=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=l(o),h=r,g=p["".concat(d,".").concat(h)]||p[h]||u[h]||a;return o?n.createElement(g,i(i({ref:t},c),{},{components:o})):n.createElement(g,i({ref:t},c))}));function g(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=o.length,i=new Array(a);i[0]=h;var s={};for(var d in t)hasOwnProperty.call(t,d)&&(s[d]=t[d]);s.originalType=e,s[p]="string"==typeof e?e:r,i[1]=s;for(var l=2;l{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>g,frontMatter:()=>s,metadata:()=>l,toc:()=>p});var n=o(87462),r=o(63366),a=(o(67294),o(3905)),i=["components"],s={id:"learn-guides-ledger",title:"Polkadot-JS Guides for Ledger Devices",sidebar_label:"Ledger Guides",description:"Polkadot-JS Guides for Ledger Devices.",keywords:["ledger","polkadot-js"],slug:"../learn-guides-ledger"},d=void 0,l={unversionedId:"learn/learn-guides-ledger",id:"learn/learn-guides-ledger",title:"Polkadot-JS Guides for Ledger Devices",description:"Polkadot-JS Guides for Ledger Devices.",source:"@site/../docs/learn/learn-guides-ledger.md",sourceDirName:"learn",slug:"/learn-guides-ledger",permalink:"/docs/learn-guides-ledger",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-ledger.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-ledger",title:"Polkadot-JS Guides for Ledger Devices",sidebar_label:"Ledger Guides",description:"Polkadot-JS Guides for Ledger Devices.",keywords:["ledger","polkadot-js"],slug:"../learn-guides-ledger"},sidebar:"docs",previous:{title:"Identity Guides",permalink:"/docs/learn-guides-identity"},next:{title:"Polkadot Vault Guides",permalink:"/docs/learn-guides-vault"}},c={},p=[{value:"Loading Your Account",id:"loading-your-account",level:2},{value:"Derivation paths",id:"derivation-paths",level:3},{value:"Connecting your ledger device",id:"connecting-your-ledger-device",level:3},{value:"Confirming the Address on your Device",id:"confirming-the-address-on-your-device",level:2},{value:"Checking the Balance of Your Account",id:"checking-the-balance-of-your-account",level:2},{value:"Sending a Transfer with Ledger Devices",id:"sending-a-transfer-with-ledger-devices",level:2},{value:"Receiving a Transfer",id:"receiving-a-transfer",level:2},{value:"Staking",id:"staking",level:2},{value:"Removing Expired Democracy Locks",id:"removing-expired-democracy-locks",level:2}],u={toc:p},h="wrapper";function g(e){var t=e.components,s=(0,r.Z)(e,i);return(0,a.kt)(h,(0,n.Z)({},u,s,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("div",{className:"sticky",style:{zIndex:1}},(0,a.kt)("br",null),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,a.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,a.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,a.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,a.kt)("h2",{id:"loading-your-account"},"Loading Your Account"),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Ledger Live should be off while using Ledger with Polkadot-JS UI as it can interfere with normal\noperation.")),(0,a.kt)("p",null,"You can import your Ledger account to ",(0,a.kt)("a",{parentName:"p",href:"https://polkadot.js.org/extension/"},"Polkadot Extension")," or to\nthe ",(0,a.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS UI"),". For instructions on how to import\nLedger accounts to the Polkadot Extension read through\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000175387-how-to-add-your-ledger-through-the-polkadot-extension"},"this support article"),",\nwhile if you want to import Ledger accounts to the Polkadot-JS UI you can consult\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000170812-how-to-add-ledger-account-through-the-polkadot-js-ui"},"this other article"),"."),(0,a.kt)("h3",{id:"derivation-paths"},"Derivation paths"),(0,a.kt)("p",null,"When adding a Ledger account using the extension or the UI, you will be asked to select an\n",(0,a.kt)("inlineCode",{parentName:"p"},"account type")," and an ",(0,a.kt)("inlineCode",{parentName:"p"},"account index"),". The first lets you select an account, while the second lets\nyou pick a derivation path from that account - think of it like a formula from which child accounts\nare generated. When you are creating a\nPolkadot ledger account for the first time on\nLedger Live with name ",(0,a.kt)("inlineCode",{parentName:"p"},"Polkadot 1"),"",", this\ncan be added to Polkadot-JS using the 0/0 derivation path (i.e. account type = 0 and account index =\n0). If you add a second account called\n",(0,a.kt)("inlineCode",{parentName:"p"},"Polkadot 2"),"",", this will correspond to the\n1/0 derivation path, and so on. We thus have multiple parent accounts that can be viewed and used in\nboth Ledger Live and Polkadot-JS. Additionally, we can use Polkadot-JS UI to create multiple\nchildren accounts from each parent account. For example,\n",(0,a.kt)("inlineCode",{parentName:"p"},"Polkadot 1"),""," with 0/0 derivation path can\nhave child 0/1, 0/2, etc. that can be used within the UI. However, such children accounts cannot be\nused in Ledger Live, as it only scans through the parent accounts. So, remember that the balances on\nthe children accounts cannot be viewed, and you will not be able to transact with those accounts on\nLedger Live."),(0,a.kt)("h3",{id:"connecting-your-ledger-device"},"Connecting your ledger device"),(0,a.kt)("p",null,"While using a ledger device to sign transactions, depending on your browser and its security\nsettings, you might need to confirm the USB connection through a popup like the one below:"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Display the device connection popup",src:o(57302).Z,width:"468",height:"461"})),(0,a.kt)("p",null,'If you are adding your Ledger Nano for the first time, click on the "Unknown device" line and the\n"Connect" button will become available.'),(0,a.kt)("admonition",{title:"Signature error message",type:"info"},(0,a.kt)("p",{parentName:"admonition"},"If you have already connected your device, but an error message appears before signing a\ntransaction, make sure you have opened the\nPolkadot application on your Ledger Nano\ndevice. Visit\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181994"},"this support page")," for\nmore information about signing transactions using your ledger.")),(0,a.kt)("h2",{id:"confirming-the-address-on-your-device"},"Confirming the Address on your Device"),(0,a.kt)("p",null,"To display your Polkadot ledger account\naddress on your Ledger Nano, you can follow the guidelines on\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181854-how-to-confirm-your-account-address-on-your-ledger-device"},"this support article"),".\nHere you can scroll through and make sure the address matches what is displayed on\n",(0,a.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS UI"),"."),(0,a.kt)("h2",{id:"checking-the-balance-of-your-account"},"Checking the Balance of Your Account"),(0,a.kt)("p",null,"There are a few methods to check the balance of your account. Check out\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169332-where-can-i-see-the-balance-of-my-account-"},"this support article"),"\nfor information."),(0,a.kt)("h2",{id:"sending-a-transfer-with-ledger-devices"},"Sending a Transfer with Ledger Devices"),(0,a.kt)("admonition",{title:"Verifying Extrinsics",type:"danger"},(0,a.kt)("p",{parentName:"admonition"},"Visit the\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000179161-how-can-i-verify-what-extrinsic-i-m-signing-#Verify-an-extrinsic-using-Ledger"},(0,a.kt)("strong",{parentName:"a"},"dedicated support page")),"\nand see ",(0,a.kt)("a",{parentName:"p",href:"https://youtu.be/bxMs-9fBtFk?t=360"},(0,a.kt)("strong",{parentName:"a"},"this video tutorial"))," tutorial to learn about how to\nverify extrinsics before signing them. The video will also mention potential attacks that can happen\nto you while signing for transactions.")),(0,a.kt)("p",null,"General instructions to send a transfer can be found on\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000170304-how-to-send-transfer-funds-out-of-your-dot-account-on-the-polkadot-js-ui"},"this support page"),".\nTo sign transactions with your Ledger nano check\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181994"},"this support article")," or\nsee ",(0,a.kt)("a",{parentName:"p",href:"https://youtu.be/gbvrHzr4EDY?t=579"},"this video tutorial"),"."),(0,a.kt)("h2",{id:"receiving-a-transfer"},"Receiving a Transfer"),(0,a.kt)("p",null,"To receive a transfer on the accounts stored on your Ledger device, you must provide the sender\n(i.e. the payer) with your address. To do so, follow the instructions on\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181866-how-to-receive-dot-to-my-account-on-polkadot-js-ui"},"this support page"),"."),(0,a.kt)("admonition",{type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"Before giving anyone your address, ensure it matches what's on the Ledger by\n",(0,a.kt)("a",{parentName:"p",href:"#confirming-the-address-on-your-device"},"confirming the address on your device"),". Some malware will\nintercept clicks and clipboard requests and can change your copied value in-flight, so being extra\nvigilant around copy-paste operations makes sense.")),(0,a.kt)("h2",{id:"staking"},"Staking"),(0,a.kt)("p",null,'For staking using Ledger devices, check the section "How to stake using your Ledger" on\n',(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000168057-how-do-i-stake-nominate-on-polkadot-"},"this support article"),"."),(0,a.kt)("h2",{id:"removing-expired-democracy-locks"},"Removing Expired Democracy Locks"),(0,a.kt)("p",null,"Check out\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181870-how-to-remove-expired-democracy-locks"},"this support page"),"\nthe learn how to remove democracy locks after the end of a Governance referendum."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Please be advised"),": Despite the Polkadot ledger application being compatible with both the Ledger\nNano S and the Ledger Nano X, some extrinsics are not supported by the light version. The following\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/Zondax/ledger-polkadot"},"repository by Zondax")," lists the currently supported\nextrinsics on the XL version of the Ledger app."))}g.isMDXComponent=!0},57302:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/query-device-d7d9e7e7d28a34a343c59094db864a1a.png"}}]); \ No newline at end of file diff --git a/assets/js/bf789d83.6b399812.js b/assets/js/bf789d83.6b399812.js deleted file mode 100644 index 5657213cabea..000000000000 --- a/assets/js/bf789d83.6b399812.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6687],{90530:e=>{e.exports=JSON.parse('{"title":"Polkadot-JS Guides about Staking","description":"Polkadot-JS Guides about Staking.","slug":"/learn-guides-staking-index","permalink":"/docs/learn-guides-staking-index","navigation":{"previous":{"title":"Transfer Guides","permalink":"/docs/learn-guides-transfers"},"next":{"title":"Nominator Guides","permalink":"/docs/learn-guides-staking"}}}')}}]); \ No newline at end of file diff --git a/assets/js/c07c2447.8b86920f.js b/assets/js/c07c2447.8b86920f.js deleted file mode 100644 index c021b4cc2be1..000000000000 --- a/assets/js/c07c2447.8b86920f.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[7654],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>c});var o=a(74165),n=a(15861),i=a(67294),r=a(87152),s=a(14741),l=a(67425);function p(e,t,a){return d.apply(this,arguments)}function d(){return(d=(0,n.Z)((0,o.Z)().mark((function e(t,a,n){var i,l,p,d,u;return(0,o.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:i=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return i="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return i="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return i="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return i="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==i){e.next=18;break}return e.abrupt("return");case 18:return p=new r.U(i),e.next=21,s.G.create({provider:p});case 21:d=e.sent,(u=a.split(".")).forEach((function(e){e in d&&(d=d[e])})),e.t1=u[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=d.toString(),e.abrupt("break",35);case 29:return e.next=31,d();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+u[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function u(e,t,a,o){switch(t){case"humanReadable":(0,l.HumanReadable)(e,a,o);break;case"precise":(0,l.Precise)(e,a,o);break;case"blocksToDays":(0,l.BlocksToDays)(e,o);break;case"erasToDays":(0,l.ErasToDays)(e,o,a);break;case"percentage":(0,l.Percentage)(e,o);break;case"permillToPercent":(0,l.PermillToPercent)(e,o);break;case"arrayLength":(0,l.ArrayLength)(e,o);break;default:return void console.log("Ignoring unknown filter type")}}const c=function(e){var t=e.network,a=e.path,r=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,d=(0,i.useState)(""),c=d[0],h=d[1];return t=t.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?u(r.toString(),l,t,h):h(r.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var i=function(){var e=(0,n.Z)((0,o.Z)().mark((function e(){var n;return(0,o.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,p(t,a,h);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?u(n,l,t,h):h(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{i()}catch(s){console.log(s)}}}),[]),c}},67425:e=>{var t="polkadot",a="kusama",o="statemine",n="statemint",i={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,r,s){var l=void 0;if(r===t||r===n)l=3;else{if(r!==a&&r!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),s((e=Number.isInteger(e/i[r].precision)?e/i[r].precision+" "+i[r].symbol:(e/i[r].precision).toFixed(l)+" "+i[r].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/i[t].precision+" "+i[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,i,r){var s=void 0;if(r===t||r===n)s=1;else{if(r!==a&&r!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}i((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},40569:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>p,default:()=>k,frontMatter:()=>l,metadata:()=>d,toc:()=>c});var o=a(87462),n=a(63366),i=(a(67294),a(3905)),r=a(47940),s=["components"],l={id:"learn-guides-polkadot-opengov",title:"Polkadot-JS Guides about OpenGov",sidebar_label:"OpenGov Guides",description:"Polkadot-JS Guides about Polkadot OpenGov.",keywords:["opengov","polkadot opengov","referenda","cancel","polkadot-js"],slug:"../learn-guides-polkadot-opengov"},p=void 0,d={unversionedId:"learn/learn-guides-polkadot-opengov",id:"learn/learn-guides-polkadot-opengov",title:"Polkadot-JS Guides about OpenGov",description:"Polkadot-JS Guides about Polkadot OpenGov.",source:"@site/../docs/learn/learn-guides-polkadot-opengov.md",sourceDirName:"learn",slug:"/learn-guides-polkadot-opengov",permalink:"/docs/learn-guides-polkadot-opengov",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-polkadot-opengov.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710309813,formattedLastUpdatedAt:"Mar 13, 2024",frontMatter:{id:"learn-guides-polkadot-opengov",title:"Polkadot-JS Guides about OpenGov",sidebar_label:"OpenGov Guides",description:"Polkadot-JS Guides about Polkadot OpenGov.",keywords:["opengov","polkadot opengov","referenda","cancel","polkadot-js"],slug:"../learn-guides-polkadot-opengov"},sidebar:"docs",previous:{title:"Nomination Pool Guides",permalink:"/docs/learn-guides-staking-pools"},next:{title:"Treasury Guides",permalink:"/docs/learn-guides-treasury"}},u={},c=[{value:"Create a Referenda Proposal",id:"create-a-referenda-proposal",level:2},{value:"Submitting a Preimage",id:"submitting-a-preimage",level:3},{value:"Submitting a Proposal",id:"submitting-a-proposal",level:3},{value:"Submitting a Referendum on the Whitelisted Caller Track",id:"submitting-a-referendum-on-the-whitelisted-caller-track",level:3},{value:"Voting on Referenda",id:"voting-on-referenda",level:2},{value:"Removing Votes",id:"removing-votes",level:3},{value:"Removing Expired Voting Locks",id:"removing-expired-voting-locks",level:3},{value:"Delegations",id:"delegations",level:2},{value:"Delegate Votes",id:"delegate-votes",level:3},{value:"Undelegate Votes",id:"undelegate-votes",level:3},{value:"Remove Expired Locks from Delegations",id:"remove-expired-locks-from-delegations",level:3},{value:"Modify your Delegations",id:"modify-your-delegations",level:3},{value:"Claiming OpenGov Deposits",id:"claiming-opengov-deposits",level:2},{value:"Claiming the Preimage and Decision Deposits",id:"claiming-the-preimage-and-decision-deposits",level:3},{value:"Claiming the Referendum Submission Deposit",id:"claiming-the-referendum-submission-deposit",level:3},{value:"Cancel or Kill a Referendum",id:"cancel-or-kill-a-referendum",level:2}],h={toc:c},m="wrapper";function k(e){var t=e.components,l=(0,n.Z)(e,s);return(0,i.kt)(m,(0,o.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},"this page")," to learn about Polkadot OpenGov."),(0,i.kt)("p",null,"This guide will instruct token holders how to propose and vote on public referenda using the\nReferenda module (OpenGov). Below are a few links to stay informed and directly engage with the\ncommunity."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction")," - a place to discuss\ngovernance and the future of Polkadot."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Kusama-Direction:parity.io"},"Kusama Direction")," - a place to discuss\ngovernance and the future of Kusama."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.polkassembly.io"},"Polkadot")," and ",(0,i.kt)("a",{parentName:"li",href:"https://kusama.polkassembly.io"},"Kusama"),"\nPolkassembly - for current referenda, latest proposals, motions, treasury proposals, tips,\nbounties, and more."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://matrix.to/#/#dailydigest:web3.foundation"},"Polkadot Daily Digest")," - News about what is\nhappening in the Polkadot ecosystem, published every weekday except holidays.")),(0,i.kt)("h2",{id:"create-a-referenda-proposal"},"Create a Referenda Proposal"),(0,i.kt)("h3",{id:"submitting-a-preimage"},"Submitting a Preimage"),(0,i.kt)("p",null,"The act of creating a proposal is split from submitting the preimage for the proposal since the\nstorage cost of submitting a large preimage could be expensive. Allowing the preimage submission to\ncome as a separate transaction means that another account could submit the preimage for you and pay\nthe fee. The example below demonstrates the creation of a preimage to propose and approve a spend of\ntreasury funds."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"submit preimage",src:a(10579).Z,width:"1078",height:"606"})),(0,i.kt)("p",null,"Follow the steps below to submit a preimage as shown in the screenshot above."),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Navigate to Governance -> Referenda."),(0,i.kt)("li",{parentName:"ol"},'Click on the "Add preimage" button.'),(0,i.kt)("li",{parentName:"ol"},"From the ",(0,i.kt)("em",{parentName:"li"},"propose")," drop-down field, select ",(0,i.kt)("inlineCode",{parentName:"li"},"treasury"),"."),(0,i.kt)("li",{parentName:"ol"},"From the unlabeled drop-down field to the right of the ",(0,i.kt)("em",{parentName:"li"},"propose")," drop-down field, select\n",(0,i.kt)("inlineCode",{parentName:"li"},"spend(amount, beneficiary)"),"."),(0,i.kt)("li",{parentName:"ol"},"In the ",(0,i.kt)("inlineCode",{parentName:"li"},"amount: Compact (BalanceOf)")," text field, enter the spend amount."),(0,i.kt)("li",{parentName:"ol"},"The ",(0,i.kt)("inlineCode",{parentName:"li"},"beneficiary: MultiAddress (AccountIdLookupOf)")," drop-down field will have ",(0,i.kt)("inlineCode",{parentName:"li"},"Id")," selected by\ndefault. Select the beneficiary from the ",(0,i.kt)("inlineCode",{parentName:"li"},"Id: AccountId")," drop-down field.")),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Copy the ",(0,i.kt)("inlineCode",{parentName:"p"},"preimage hash"),' value before clicking the "Submit preimage" button.')),(0,i.kt)("ol",{start:7},(0,i.kt)("li",{parentName:"ol"},'Click the "Submit preimage" button.')),(0,i.kt)("p",null,"After the preimage is submitted successfully on-chain, Polkadot-JS UI lists it under the tab of\nGovernance -> Preimages."),(0,i.kt)("h3",{id:"submitting-a-proposal"},"Submitting a Proposal"),(0,i.kt)("p",null,'Submitting a proposal requires you to bond some tokens. On Polkadot-JS UI, you can navigate to the\nGovernance -> Referenda to make a new proposal. In order to submit a proposal, you will need to\nsubmit what\'s called the preimage hash. The preimage hash is simply the hash of the proposal to be\nenacted. The easiest way to get the preimage hash is by clicking on the "Submit preimage" button as\nshown in the previous section.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"submit proposal",src:a(31993).Z,width:"1936",height:"1118"})),(0,i.kt)("p",null,"The proposal will be registered from the account selected and the balance lock will be applied to\nit. An appropriate origin must be chosen, as each origin has different privileges, and acceptance\ncriteria. After entering the hash of the preimage for the proposal, the preimage length field is\nautomatically populated. The enactment delay can be specified either as a block number, or as a\nspecific number of blocks after the referendum is approved. The deposit for this proposal will be\nlocked for the referendum duration."),(0,i.kt)("h3",{id:"submitting-a-referendum-on-the-whitelisted-caller-track"},"Submitting a Referendum on the Whitelisted Caller Track"),(0,i.kt)("p",null,"Let's consider increasing the number of validators participating in parachain consensus. You could\n",(0,i.kt)("a",{parentName:"p",href:"#submitting-a-preimage"},"submit a preimage")," with the call that sets the number of validators to\n1,000 and submit a referendum to the Root track directly. However, this requires a large decision\ndeposit and has very conservative passing parameters such that it will probably need the entire\n28-day voting period to pass."),(0,i.kt)("p",null,"Operations that are deemed safe or time critical by the Polkadot Technical Fellowship can use the\nWhitelisted Caller track. This track requires less turnout in the first half of the decision period\nso that it can pass more quickly. This track is typically used for more neutral, technical proposals\nlike runtime upgrades or changing the system's parachain validation configuration."),(0,i.kt)("p",null,"Using the Whitelisted Caller track requires some special calls. Submitting a referendum in the same\nform as other tracks will not work. Namely, rather than voting on a particular ",(0,i.kt)("inlineCode",{parentName:"p"},"proposal"),", the\nWhitelisted Caller track requires a vote to ",(0,i.kt)("inlineCode",{parentName:"p"},"dispatch")," the ",(0,i.kt)("inlineCode",{parentName:"p"},"proposal")," via the Whitelist pallet.\nBefore opening a referendum on this track, you should also attempt to get a positive signal from the\nFellowship that they will whitelist the proposal. If they do not, then even if the public referendum\npasses, it will not execute."),(0,i.kt)("p",null,"Below are the steps to follow when submitting a proposal to the Whitelist track."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#submitting-a-preimage"},"Submit a preimage")," with the call to ",(0,i.kt)("em",{parentName:"li"},"dispatch")," the proposal (",(0,i.kt)("inlineCode",{parentName:"li"},"call"),") you\nwant to submit -- ",(0,i.kt)("inlineCode",{parentName:"li"},"whitelist.dispatchWhitelistedCallWithPreimage(call)")," -- and obtain the preimage\nhash. This is the preimage for the ",(0,i.kt)("em",{parentName:"li"},"public referendum")," on the Whitelisted Caller track.")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"preimage-whitelist",src:a(80474).Z,width:"2146",height:"1113"})),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"Obtain the hash of ",(0,i.kt)("inlineCode",{parentName:"p"},"call"),". The Polkadot Fellowship needs to start a Fellowship referendum to\nwhitelist the call with ",(0,i.kt)("inlineCode",{parentName:"p"},"whitelist.whitelistCall(callHash)"),". The Fellowship referendum gets voted\non by the Polkadot Fellowship members only."),(0,i.kt)("p",{parentName:"li"},(0,i.kt)("img",{alt:"call-hash",src:a(78249).Z,width:"2257",height:"858"}))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"The public now votes on the referendum. Someone must place a decision deposit to go into the\ndeciding phase.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"Once passed, it gets enacted successfully as long as the call has been whitelisted by the\nFellowship."))),(0,i.kt)("p",null,"Note that the public referendum and Fellowship referendum can happen simultaneously. However, if the\nFellowship does not whitelist the call, you must submit it directly to the Root origin."),(0,i.kt)("h2",{id:"voting-on-referenda"},"Voting on Referenda"),(0,i.kt)("p",null,"As Polkadot OpenGov takes both the approval and support into account, there are four options to\nchoose from when voting on a referendum:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Aye"),(0,i.kt)("li",{parentName:"ul"},"Nay"),(0,i.kt)("li",{parentName:"ul"},"Split"),(0,i.kt)("li",{parentName:"ul"},"Abstain")),(0,i.kt)("p",null,"Also, you have to specify the conviction multiplier for this vote. The longer you are willing to\nlock your tokens, the stronger your vote will be weighted. Unwillingness to lock your tokens means\nthat your vote only counts for 10% of the tokens that you hold."),(0,i.kt)("p",null,"For detailed instructions on how to vote on Polkadot OpenGov referenda, check\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000184120-polkadot-opengov-how-to-vote"},"this support guide.")),(0,i.kt)("admonition",{title:"Polkadot OpenGov uses Conviction Voting Pallet (Not Democracy Pallet)",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"Use ",(0,i.kt)("inlineCode",{parentName:"p"},"convictionVoting.vote")," for voting on Referenda in Polkadot OpenGov instead of ",(0,i.kt)("inlineCode",{parentName:"p"},"democracy.vote"),"\n(which only works for the old version of governance).")),(0,i.kt)("h3",{id:"removing-votes"},"Removing Votes"),(0,i.kt)("p",null,"To remove votes, you need to use the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Extrinsics tab")," and\ncall the ",(0,i.kt)("inlineCode",{parentName:"p"},"removeVote")," function through the ",(0,i.kt)("inlineCode",{parentName:"p"},"convictionVoting")," pallet."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"rm-vote",src:a(28422).Z,width:"2388",height:"594"})),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"class")," is the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-origins"},"OpenGov track")," of the referendum you voted\non and the ",(0,i.kt)("inlineCode",{parentName:"p"},"index")," is the referendum number."),(0,i.kt)("h3",{id:"removing-expired-voting-locks"},"Removing Expired Voting Locks"),(0,i.kt)("p",null,"To remove an expired lock, you need to use the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Extrinsics tab")," and call the ",(0,i.kt)("inlineCode",{parentName:"p"},"unlock")," function through\nthe ",(0,i.kt)("inlineCode",{parentName:"p"},"convictionVoting")," pallet. Note that if you voted on referenda in multiple tracks, the tokens\nwill be unlocked after removing votes and unlocking on all the tracks. Similarly, if you you\n",(0,i.kt)("a",{parentName:"p",href:"#delegations"},"delegated")," on multiple tracks, the funds will be unlocked after\n",(0,i.kt)("a",{parentName:"p",href:"#undelegate-votes"},"undelegating")," and unlocking on all the tracks."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"rm-voting-lock",src:a(43577).Z,width:"2382",height:"684"})),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"class")," is the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-origins"},"OpenGov track")," where you have the lock."),(0,i.kt)("p",null,"For additional instructions, check\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000184129-polkadot-js-ui-how-to-remove-expired-referenda-locks"},"this support guide.")),(0,i.kt)("h2",{id:"delegations"},"Delegations"),(0,i.kt)("admonition",{title:"Video Tutorial about Delegations using the Polkadot-JS UI",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"See ",(0,i.kt)("a",{parentName:"p",href:"https://youtu.be/PNGs11EvCB0"},"this video tutorial")," to learn about how to delegate, modify\ndelegations and remove delegations using the Polkadot-JS UI.")),(0,i.kt)("p",null,"For an overview of how delegation works in Polkadot OpenGov, check out the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov#multirole-delegation"},"Multirole Delegation")," section on the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},"Learn Polkadot OpenGov")," page."),(0,i.kt)("p",null,"Instructions to do delegations with Polkadot-JS are also available on the\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000184776-polkadot-js-ui-how-to-delegate-your-voting-power-on-polkadot-opengov"},"Support Pages"),"."),(0,i.kt)("h3",{id:"delegate-votes"},"Delegate Votes"),(0,i.kt)("p",null,'You can start delegating your votes by clicking the "Delegate" button on\n',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Governance > Referenda"),"."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"js-delegation-start",src:a(90691).Z,width:"1055",height:"497"})),(0,i.kt)("p",null,"If it is the first time you delegate or vote, there will be a banner message. You can delegate on a\nsingle track or all the tracks. You have an option to specify the number of votes (i.e., the number\nof tokens) and the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov#voluntary-locking"},"conviction multiplier"),'. After\nclicking "Next", you will need to specify the account to delegate your votes to, and after clicking\n"Delegate" and "Sign and Submit" your delegations will appear for each track (see below).'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"js-delegation-allTracks",src:a(62428).Z,width:"2116",height:"1438"})),(0,i.kt)("p",null,"Note that if you want to delegate just a few tracks, you have two options:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},'Repeat the process using the "Delegate" button multiple times'),(0,i.kt)("li",{parentName:"ul"},"Issue a batch call with multiple ",(0,i.kt)("inlineCode",{parentName:"li"},"convictionVoting.delegate")," extrinsics under\n",(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/extrinsics"},"Developer > Extrinsics"))),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"js-delegation-delegate",src:a(54853).Z,width:"2694",height:"1104"})),(0,i.kt)("p",null,'By clicking on "Add item" you can add new extrinsics for multiple tracks.'),(0,i.kt)("h3",{id:"undelegate-votes"},"Undelegate Votes"),(0,i.kt)("p",null,'The "Delegate" button on ',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Governance > Referenda")," is only\nfor delegating votes. You cannot undelegate or modify your delegations. If you wish to undelegate,\nyou will need to go to ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Developer > Extrinsics")," and\nsubmit a ",(0,i.kt)("inlineCode",{parentName:"p"},"convictionVoting.undelegate")," extrinsic, specifying the track you wish to undelegate."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"js-delegation-undelegate",src:a(9459).Z,width:"2708",height:"632"})),(0,i.kt)("p",null,'Undelegated tracks will show up as "0 votes" on the Delegate tab.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"js-delegation-undelegate",src:a(93996).Z,width:"2128",height:"1432"})),(0,i.kt)("p",null,"After you undelegated, the conviction lock will start the countdown, and your funds will be\navailable for unlocking after the countdown ends."),(0,i.kt)("h3",{id:"remove-expired-locks-from-delegations"},"Remove Expired Locks from Delegations"),(0,i.kt)("p",null,"To remove expired locks from delegations, you can\n",(0,i.kt)("a",{parentName:"p",href:"#removing-expired-voting-locks"},"follow the same procedure as how to remove expired voting locks"),"."),(0,i.kt)("h3",{id:"modify-your-delegations"},"Modify your Delegations"),(0,i.kt)("p",null,'The "Delegate" button on ',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Governance > Referenda")," is only\nfor delegating votes. You cannot undelegate or modify your delegations. If you wish to update the\ndelegated account, the conviction, and the number of votes you will need to go to\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Developer > Extrinsics"),", ",(0,i.kt)("a",{parentName:"p",href:"#undelegate-votes"},"undelegate"),"\nthe track and ",(0,i.kt)("a",{parentName:"p",href:"#delegate-votes"},"delegate")," again with updated information."),(0,i.kt)("h2",{id:"claiming-opengov-deposits"},"Claiming OpenGov Deposits"),(0,i.kt)("admonition",{title:"Video Tutorial about OpenGov deposits using the Polkadot-JS UI",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"See ",(0,i.kt)("a",{parentName:"p",href:"https://youtu.be/kkEq5cqW2Pk"},"this video tutorial")," to learn about how to claim OpenGov deposits\nusing the Polkadot-JS UI.")),(0,i.kt)("h3",{id:"claiming-the-preimage-and-decision-deposits"},"Claiming the Preimage and Decision Deposits"),(0,i.kt)("p",null,"After a referendum finishes its life cycle (and gets approved or rejected or timed out), the\npreimage and decision deposits can be claimed. For claiming the preimage deposit, navigate to\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/preimages"},"Polkadot-JS UI > Governance > Preimages")," and click on\nunnote button shown on the preimage you submitted."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Claim Preimage Deposit",src:a(80560).Z,width:"2828",height:"362"})),(0,i.kt)("p",null,"Similarly, to claim the decision deposit, navigate to\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Polkadot-JS UI > Governance > Referenda")," and scroll down\nto the end of the page to click on the referenda with the decision deposit and claim it."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Claim Referendum Deposits",src:a(62248).Z,width:"2830",height:"444"})),(0,i.kt)("h3",{id:"claiming-the-referendum-submission-deposit"},"Claiming the Referendum Submission Deposit"),(0,i.kt)("p",null,"The submission deposit for a referendum can be claimed\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/cfb29254f74412cea35e8048d8aea94bc789fcb1/substrate/frame/referenda/src/types.rs#L261"},"only if the referendum was ",(0,i.kt)("inlineCode",{parentName:"a"},"Approved")," or ",(0,i.kt)("inlineCode",{parentName:"a"},"Canceled")),".\nThe submission deposit can be claimed by issuing the ",(0,i.kt)("inlineCode",{parentName:"p"},"refundSubmissionDeposit")," extrinsic."),(0,i.kt)("p",null,"Users can not refund their submission deposit while the referendum is ",(0,i.kt)("inlineCode",{parentName:"p"},"Ongoing")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"Rejected"),".\nSimilarly, users cannot refund their submission deposit if the proposal has ",(0,i.kt)("inlineCode",{parentName:"p"},"TimedOut")," (failing to\nsubmit the decision deposit within a\n",(0,i.kt)(r.Z,{network:"polkadot",path:"const.referenda.undecidingTimeout",defaultValue:201600,filter:"blocksToDays",mdxType:"RPC"}),"","-day\nperiod will lead to a referendum timeout). This behavior exists so that users can refrain from\nspamming the chain with proposals that have no interest from the community. If a proposal is in the\n",(0,i.kt)("inlineCode",{parentName:"p"},"TimedOut")," state, any user can call ",(0,i.kt)("inlineCode",{parentName:"p"},"slash_proposal_deposit"),", which will move the funds from the\nuser to a runtime-configured account, like the treasury."),(0,i.kt)("p",null,"To refund your slashed deposit, you can start a new referendum and specifically request a refund\nfrom the treasury. You need to make sure you have enough balance for a new submission and decision\ndeposit, and you will need to select the right track to ask for a refund. For example, the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-origins#small-tipper"},"Small Tipper Track")," would be fine for any kind of\ndeposit refund up to 250 DOT."),(0,i.kt)("h2",{id:"cancel-or-kill-a-referendum"},"Cancel or Kill a Referendum"),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Anybody can cancel an ongoing referendum (i.e., a referendum within the Lead-in or\nvoting/confirmation period). For more information about the referenda timeline in Polkadot OpenGov,\nsee the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov#referenda-timeline"},"dedicated page"),"."),(0,i.kt)("p",{parentName:"admonition"},"To successfully cancel a referendum through the track ",(0,i.kt)("inlineCode",{parentName:"p"},"20 / Referendum Canceller"),", you will need to\nattain\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-origins#referendum-canceller"},"specific approval and support levels"),".")),(0,i.kt)("p",null,"To cancel a referendum, you need first to submit a preimage with the ",(0,i.kt)("inlineCode",{parentName:"p"},"referenda.cancel")," extrinsic.\nGo to the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Polkadot-JS UI > Governance > Referenda"),' and\nclick on the "Add Preimage" button. You must specify the ',(0,i.kt)("inlineCode",{parentName:"p"},"referenda.cancel")," extrinsic with the index\nequal to the ongoing Referendum you wish to cancel. In the screenshot below, the Referendum to be\ncancelled is 249."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"cancel-referenda-preimage-creation",src:a(78996).Z,width:"2144",height:"944"})),(0,i.kt)("p",null,"This call will cancel the referendum and return the deposit. You can also kill a referendum using\nthe ",(0,i.kt)("inlineCode",{parentName:"p"},"referenda.kill")," extrinsic. This will cancel the referendum and slash the deposit."),(0,i.kt)("admonition",{title:"Preimage Submission Deposit",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"A deposit is required for the preimage to be stored on chain. The preimage deposit is proportional\nto the amount of information stored within the preimage. The deposit amount required for a preimage\nwith a treasury spend transaction is around\n41 DOT. Ensure you have enough account\nbalance to pay for this submission deposit as well as the transaction fees.")),(0,i.kt)("p",null,"Once a preimage is submitted, it can be checked under\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/preimages"},"Governance > Preimages"),"."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"cancel-referenda-preimage-check",src:a(16212).Z,width:"2758",height:"190"})),(0,i.kt)("p",null,"You must copy the preimage to use it when you submit your proposal. To submit the proposal to cancel\nreferendum 249, for example, you need to go under\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Governance > Referenda"),' and click the "Submit Proposal"\nbutton.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"cancel-referenda-proposal",src:a(81405).Z,width:"2130",height:"1226"})),(0,i.kt)("p",null,"You must specify the account to submit the proposal (this can differ from the account used to create\nthe preimage). Then you will need to specify the track ",(0,i.kt)("inlineCode",{parentName:"p"},"20 / Referendum Canceller")," and add the\npreimage hash containing the specific action that will be enacted if the referendum passes. Note\nthat a submission deposit of\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.referenda.submissionDeposit",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),"","\nwill be reserved for submitting the proposal."),(0,i.kt)("p",null,"Once the proposal has been submitted, it will stay in the Lead-in period until there is enough space\nwithin the track, and a\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-origins#polkadot-opengov-terminology-and-parameters"},"track-dependent preparation period and decision deposit"),"\nhave been met. Failing to submit the decision deposit within a\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.referenda.undecidingTimeout",defaultValue:201600,filter:"blocksToDays",mdxType:"RPC"}),"","-day\nperiod will lead to a referendum timeout."))}k.isMDXComponent=!0},16212:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/cancel-referenda-preimage-check-45ef7f984450113a2b1a87e9e2751d69.png"},78996:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/cancel-referenda-preimage-creation-3923463db47aec298f74a426dba23166.png"},81405:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/cancel-referenda-proposal-b9c5e90784ec8216360053d8bda84980.png"},80560:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/claim-preimage-deposit-069843b91eba35d4829b237b59ab2d12.png"},62248:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/claim-referendum-decision-deposit-6352bbad189dac6fe7a651b5a3c8f5a5.png"},78249:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/encoded-call-hash-4e0347923993beea4d12d5a787649f8f.png"},80474:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/opengov-submit-preimage-whitelist-67d383745b6e7b3ef31a37567e044e80.png"},10579:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/opengov-submit-preimage-ddb9c9c348a6c169f24bf70b9439712e.png"},31993:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/opengov-submit-proposal-0c82b35f3f7b1d9e66130a621b76c44b.png"},62428:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/js-delegation-allTracks-788efa580f296aa78b65b77691570181.png"},54853:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/js-delegation-delegate-3bcce735bcc35b831079cd44ad0eef15.png"},90691:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/js-delegation-start-c8186f8875fd402b993abfd5ab09f515.png"},9459:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/js-delegation-undelegate-a5018d2ecd2d5523f711199cd6fa1e63.png"},93996:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/js-delegation-undelegated-9b5efde53d2016c4e4b1f0f6b651ecf5.png"},28422:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/rm-vote-8572ff30a00c8d6fe903fae7a39147f4.png"},43577:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/rm-voting-lock-214119c2fcfe92488190b321cdfe823a.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/c07c2447.9191ee0c.js b/assets/js/c07c2447.9191ee0c.js new file mode 100644 index 000000000000..4b26d1b5914e --- /dev/null +++ b/assets/js/c07c2447.9191ee0c.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[7654],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>c});var o=a(74165),n=a(15861),i=a(67294),r=a(87152),s=a(14741),l=a(67425);function p(e,t,a){return d.apply(this,arguments)}function d(){return(d=(0,n.Z)((0,o.Z)().mark((function e(t,a,n){var i,l,p,d,u;return(0,o.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:i=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return i="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return i="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return i="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return i="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==i){e.next=18;break}return e.abrupt("return");case 18:return p=new r.U(i),e.next=21,s.G.create({provider:p});case 21:d=e.sent,(u=a.split(".")).forEach((function(e){e in d&&(d=d[e])})),e.t1=u[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=d.toString(),e.abrupt("break",35);case 29:return e.next=31,d();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+u[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function u(e,t,a,o){switch(t){case"humanReadable":(0,l.HumanReadable)(e,a,o);break;case"precise":(0,l.Precise)(e,a,o);break;case"blocksToDays":(0,l.BlocksToDays)(e,o);break;case"erasToDays":(0,l.ErasToDays)(e,o,a);break;case"percentage":(0,l.Percentage)(e,o);break;case"permillToPercent":(0,l.PermillToPercent)(e,o);break;case"arrayLength":(0,l.ArrayLength)(e,o);break;default:return void console.log("Ignoring unknown filter type")}}const c=function(e){var t=e.network,a=e.path,r=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,d=(0,i.useState)(""),c=d[0],h=d[1];return t=t.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?u(r.toString(),l,t,h):h(r.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var i=function(){var e=(0,n.Z)((0,o.Z)().mark((function e(){var n;return(0,o.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,p(t,a,h);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?u(n,l,t,h):h(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{i()}catch(s){console.log(s)}}}),[]),c}},67425:e=>{var t="polkadot",a="kusama",o="statemine",n="statemint",i={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,r,s){var l=void 0;if(r===t||r===n)l=3;else{if(r!==a&&r!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),s((e=Number.isInteger(e/i[r].precision)?e/i[r].precision+" "+i[r].symbol:(e/i[r].precision).toFixed(l)+" "+i[r].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/i[t].precision+" "+i[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,i,r){var s=void 0;if(r===t||r===n)s=1;else{if(r!==a&&r!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}i((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},40569:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>p,default:()=>k,frontMatter:()=>l,metadata:()=>d,toc:()=>c});var o=a(87462),n=a(63366),i=(a(67294),a(3905)),r=a(47940),s=["components"],l={id:"learn-guides-polkadot-opengov",title:"Polkadot-JS Guides about OpenGov",sidebar_label:"OpenGov Guides",description:"Polkadot-JS Guides about Polkadot OpenGov.",keywords:["opengov","polkadot opengov","referenda","cancel","polkadot-js"],slug:"../learn-guides-polkadot-opengov"},p=void 0,d={unversionedId:"learn/learn-guides-polkadot-opengov",id:"learn/learn-guides-polkadot-opengov",title:"Polkadot-JS Guides about OpenGov",description:"Polkadot-JS Guides about Polkadot OpenGov.",source:"@site/../docs/learn/learn-guides-polkadot-opengov.md",sourceDirName:"learn",slug:"/learn-guides-polkadot-opengov",permalink:"/docs/learn-guides-polkadot-opengov",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-polkadot-opengov.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-polkadot-opengov",title:"Polkadot-JS Guides about OpenGov",sidebar_label:"OpenGov Guides",description:"Polkadot-JS Guides about Polkadot OpenGov.",keywords:["opengov","polkadot opengov","referenda","cancel","polkadot-js"],slug:"../learn-guides-polkadot-opengov"},sidebar:"docs",previous:{title:"Nomination Pool Guides",permalink:"/docs/learn-guides-staking-pools"},next:{title:"Treasury Guides",permalink:"/docs/learn-guides-treasury"}},u={},c=[{value:"Create a Referenda Proposal",id:"create-a-referenda-proposal",level:2},{value:"Submitting a Preimage",id:"submitting-a-preimage",level:3},{value:"Submitting a Proposal",id:"submitting-a-proposal",level:3},{value:"Submitting a Referendum on the Whitelisted Caller Track",id:"submitting-a-referendum-on-the-whitelisted-caller-track",level:3},{value:"Voting on Referenda",id:"voting-on-referenda",level:2},{value:"Removing Votes",id:"removing-votes",level:3},{value:"Removing Expired Voting Locks",id:"removing-expired-voting-locks",level:3},{value:"Delegations",id:"delegations",level:2},{value:"Delegate Votes",id:"delegate-votes",level:3},{value:"Undelegate Votes",id:"undelegate-votes",level:3},{value:"Remove Expired Locks from Delegations",id:"remove-expired-locks-from-delegations",level:3},{value:"Modify your Delegations",id:"modify-your-delegations",level:3},{value:"Claiming OpenGov Deposits",id:"claiming-opengov-deposits",level:2},{value:"Claiming the Preimage and Decision Deposits",id:"claiming-the-preimage-and-decision-deposits",level:3},{value:"Claiming the Referendum Submission Deposit",id:"claiming-the-referendum-submission-deposit",level:3},{value:"Cancel or Kill a Referendum",id:"cancel-or-kill-a-referendum",level:2}],h={toc:c},m="wrapper";function k(e){var t=e.components,l=(0,n.Z)(e,s);return(0,i.kt)(m,(0,o.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("div",{className:"sticky",style:{zIndex:1}},(0,i.kt)("br",null),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,i.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,i.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,i.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},"this page")," to learn about Polkadot OpenGov."),(0,i.kt)("p",null,"This guide will instruct token holders how to propose and vote on public referenda using the\nReferenda module (OpenGov). Below are a few links to stay informed and directly engage with the\ncommunity."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction")," - a place to discuss\ngovernance and the future of Polkadot."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Kusama-Direction:parity.io"},"Kusama Direction")," - a place to discuss\ngovernance and the future of Kusama."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.polkassembly.io"},"Polkadot")," and ",(0,i.kt)("a",{parentName:"li",href:"https://kusama.polkassembly.io"},"Kusama"),"\nPolkassembly - for current referenda, latest proposals, motions, treasury proposals, tips,\nbounties, and more."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://matrix.to/#/#dailydigest:web3.foundation"},"Polkadot Daily Digest")," - News about what is\nhappening in the Polkadot ecosystem, published every weekday except holidays.")),(0,i.kt)("h2",{id:"create-a-referenda-proposal"},"Create a Referenda Proposal"),(0,i.kt)("h3",{id:"submitting-a-preimage"},"Submitting a Preimage"),(0,i.kt)("p",null,"The act of creating a proposal is split from submitting the preimage for the proposal since the\nstorage cost of submitting a large preimage could be expensive. Allowing the preimage submission to\ncome as a separate transaction means that another account could submit the preimage for you and pay\nthe fee. The example below demonstrates the creation of a preimage to propose and approve a spend of\ntreasury funds."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"submit preimage",src:a(10579).Z,width:"1078",height:"606"})),(0,i.kt)("p",null,"Follow the steps below to submit a preimage as shown in the screenshot above."),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Navigate to Governance -> Referenda."),(0,i.kt)("li",{parentName:"ol"},'Click on the "Add preimage" button.'),(0,i.kt)("li",{parentName:"ol"},"From the ",(0,i.kt)("em",{parentName:"li"},"propose")," drop-down field, select ",(0,i.kt)("inlineCode",{parentName:"li"},"treasury"),"."),(0,i.kt)("li",{parentName:"ol"},"From the unlabeled drop-down field to the right of the ",(0,i.kt)("em",{parentName:"li"},"propose")," drop-down field, select\n",(0,i.kt)("inlineCode",{parentName:"li"},"spend(amount, beneficiary)"),"."),(0,i.kt)("li",{parentName:"ol"},"In the ",(0,i.kt)("inlineCode",{parentName:"li"},"amount: Compact (BalanceOf)")," text field, enter the spend amount."),(0,i.kt)("li",{parentName:"ol"},"The ",(0,i.kt)("inlineCode",{parentName:"li"},"beneficiary: MultiAddress (AccountIdLookupOf)")," drop-down field will have ",(0,i.kt)("inlineCode",{parentName:"li"},"Id")," selected by\ndefault. Select the beneficiary from the ",(0,i.kt)("inlineCode",{parentName:"li"},"Id: AccountId")," drop-down field.")),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Copy the ",(0,i.kt)("inlineCode",{parentName:"p"},"preimage hash"),' value before clicking the "Submit preimage" button.')),(0,i.kt)("ol",{start:7},(0,i.kt)("li",{parentName:"ol"},'Click the "Submit preimage" button.')),(0,i.kt)("p",null,"After the preimage is submitted successfully on-chain, Polkadot-JS UI lists it under the tab of\nGovernance -> Preimages."),(0,i.kt)("h3",{id:"submitting-a-proposal"},"Submitting a Proposal"),(0,i.kt)("p",null,'Submitting a proposal requires you to bond some tokens. On Polkadot-JS UI, you can navigate to the\nGovernance -> Referenda to make a new proposal. In order to submit a proposal, you will need to\nsubmit what\'s called the preimage hash. The preimage hash is simply the hash of the proposal to be\nenacted. The easiest way to get the preimage hash is by clicking on the "Submit preimage" button as\nshown in the previous section.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"submit proposal",src:a(31993).Z,width:"1936",height:"1118"})),(0,i.kt)("p",null,"The proposal will be registered from the account selected and the balance lock will be applied to\nit. An appropriate origin must be chosen, as each origin has different privileges, and acceptance\ncriteria. After entering the hash of the preimage for the proposal, the preimage length field is\nautomatically populated. The enactment delay can be specified either as a block number, or as a\nspecific number of blocks after the referendum is approved. The deposit for this proposal will be\nlocked for the referendum duration."),(0,i.kt)("h3",{id:"submitting-a-referendum-on-the-whitelisted-caller-track"},"Submitting a Referendum on the Whitelisted Caller Track"),(0,i.kt)("p",null,"Let's consider increasing the number of validators participating in parachain consensus. You could\n",(0,i.kt)("a",{parentName:"p",href:"#submitting-a-preimage"},"submit a preimage")," with the call that sets the number of validators to\n1,000 and submit a referendum to the Root track directly. However, this requires a large decision\ndeposit and has very conservative passing parameters such that it will probably need the entire\n28-day voting period to pass."),(0,i.kt)("p",null,"Operations that are deemed safe or time critical by the Polkadot Technical Fellowship can use the\nWhitelisted Caller track. This track requires less turnout in the first half of the decision period\nso that it can pass more quickly. This track is typically used for more neutral, technical proposals\nlike runtime upgrades or changing the system's parachain validation configuration."),(0,i.kt)("p",null,"Using the Whitelisted Caller track requires some special calls. Submitting a referendum in the same\nform as other tracks will not work. Namely, rather than voting on a particular ",(0,i.kt)("inlineCode",{parentName:"p"},"proposal"),", the\nWhitelisted Caller track requires a vote to ",(0,i.kt)("inlineCode",{parentName:"p"},"dispatch")," the ",(0,i.kt)("inlineCode",{parentName:"p"},"proposal")," via the Whitelist pallet.\nBefore opening a referendum on this track, you should also attempt to get a positive signal from the\nFellowship that they will whitelist the proposal. If they do not, then even if the public referendum\npasses, it will not execute."),(0,i.kt)("p",null,"Below are the steps to follow when submitting a proposal to the Whitelist track."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#submitting-a-preimage"},"Submit a preimage")," with the call to ",(0,i.kt)("em",{parentName:"li"},"dispatch")," the proposal (",(0,i.kt)("inlineCode",{parentName:"li"},"call"),") you\nwant to submit -- ",(0,i.kt)("inlineCode",{parentName:"li"},"whitelist.dispatchWhitelistedCallWithPreimage(call)")," -- and obtain the preimage\nhash. This is the preimage for the ",(0,i.kt)("em",{parentName:"li"},"public referendum")," on the Whitelisted Caller track.")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"preimage-whitelist",src:a(80474).Z,width:"2146",height:"1113"})),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"Obtain the hash of ",(0,i.kt)("inlineCode",{parentName:"p"},"call"),". The Polkadot Fellowship needs to start a Fellowship referendum to\nwhitelist the call with ",(0,i.kt)("inlineCode",{parentName:"p"},"whitelist.whitelistCall(callHash)"),". The Fellowship referendum gets voted\non by the Polkadot Fellowship members only."),(0,i.kt)("p",{parentName:"li"},(0,i.kt)("img",{alt:"call-hash",src:a(78249).Z,width:"2257",height:"858"}))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"The public now votes on the referendum. Someone must place a decision deposit to go into the\ndeciding phase.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"Once passed, it gets enacted successfully as long as the call has been whitelisted by the\nFellowship."))),(0,i.kt)("p",null,"Note that the public referendum and Fellowship referendum can happen simultaneously. However, if the\nFellowship does not whitelist the call, you must submit it directly to the Root origin."),(0,i.kt)("h2",{id:"voting-on-referenda"},"Voting on Referenda"),(0,i.kt)("p",null,"As Polkadot OpenGov takes both the approval and support into account, there are four options to\nchoose from when voting on a referendum:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Aye"),(0,i.kt)("li",{parentName:"ul"},"Nay"),(0,i.kt)("li",{parentName:"ul"},"Split"),(0,i.kt)("li",{parentName:"ul"},"Abstain")),(0,i.kt)("p",null,"Also, you have to specify the conviction multiplier for this vote. The longer you are willing to\nlock your tokens, the stronger your vote will be weighted. Unwillingness to lock your tokens means\nthat your vote only counts for 10% of the tokens that you hold."),(0,i.kt)("p",null,"For detailed instructions on how to vote on Polkadot OpenGov referenda, check\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000184120-polkadot-opengov-how-to-vote"},"this support guide.")),(0,i.kt)("admonition",{title:"Polkadot OpenGov uses Conviction Voting Pallet (Not Democracy Pallet)",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"Use ",(0,i.kt)("inlineCode",{parentName:"p"},"convictionVoting.vote")," for voting on Referenda in Polkadot OpenGov instead of ",(0,i.kt)("inlineCode",{parentName:"p"},"democracy.vote"),"\n(which only works for the old version of governance).")),(0,i.kt)("h3",{id:"removing-votes"},"Removing Votes"),(0,i.kt)("p",null,"To remove votes, you need to use the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Extrinsics tab")," and\ncall the ",(0,i.kt)("inlineCode",{parentName:"p"},"removeVote")," function through the ",(0,i.kt)("inlineCode",{parentName:"p"},"convictionVoting")," pallet."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"rm-vote",src:a(28422).Z,width:"2388",height:"594"})),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"class")," is the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-origins"},"OpenGov track")," of the referendum you voted\non and the ",(0,i.kt)("inlineCode",{parentName:"p"},"index")," is the referendum number."),(0,i.kt)("h3",{id:"removing-expired-voting-locks"},"Removing Expired Voting Locks"),(0,i.kt)("p",null,"To remove an expired lock, you need to use the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Extrinsics tab")," and call the ",(0,i.kt)("inlineCode",{parentName:"p"},"unlock")," function through\nthe ",(0,i.kt)("inlineCode",{parentName:"p"},"convictionVoting")," pallet. Note that if you voted on referenda in multiple tracks, the tokens\nwill be unlocked after removing votes and unlocking on all the tracks. Similarly, if you you\n",(0,i.kt)("a",{parentName:"p",href:"#delegations"},"delegated")," on multiple tracks, the funds will be unlocked after\n",(0,i.kt)("a",{parentName:"p",href:"#undelegate-votes"},"undelegating")," and unlocking on all the tracks."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"rm-voting-lock",src:a(43577).Z,width:"2382",height:"684"})),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"class")," is the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-origins"},"OpenGov track")," where you have the lock."),(0,i.kt)("p",null,"For additional instructions, check\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000184129-polkadot-js-ui-how-to-remove-expired-referenda-locks"},"this support guide.")),(0,i.kt)("h2",{id:"delegations"},"Delegations"),(0,i.kt)("admonition",{title:"Video Tutorial about Delegations using the Polkadot-JS UI",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"See ",(0,i.kt)("a",{parentName:"p",href:"https://youtu.be/PNGs11EvCB0"},"this video tutorial")," to learn about how to delegate, modify\ndelegations and remove delegations using the Polkadot-JS UI.")),(0,i.kt)("p",null,"For an overview of how delegation works in Polkadot OpenGov, check out the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov#multirole-delegation"},"Multirole Delegation")," section on the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},"Learn Polkadot OpenGov")," page."),(0,i.kt)("p",null,"Instructions to do delegations with Polkadot-JS are also available on the\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000184776-polkadot-js-ui-how-to-delegate-your-voting-power-on-polkadot-opengov"},"Support Pages"),"."),(0,i.kt)("h3",{id:"delegate-votes"},"Delegate Votes"),(0,i.kt)("p",null,'You can start delegating your votes by clicking the "Delegate" button on\n',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Governance > Referenda"),"."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"js-delegation-start",src:a(90691).Z,width:"1055",height:"497"})),(0,i.kt)("p",null,"If it is the first time you delegate or vote, there will be a banner message. You can delegate on a\nsingle track or all the tracks. You have an option to specify the number of votes (i.e., the number\nof tokens) and the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov#voluntary-locking"},"conviction multiplier"),'. After\nclicking "Next", you will need to specify the account to delegate your votes to, and after clicking\n"Delegate" and "Sign and Submit" your delegations will appear for each track (see below).'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"js-delegation-allTracks",src:a(62428).Z,width:"2116",height:"1438"})),(0,i.kt)("p",null,"Note that if you want to delegate just a few tracks, you have two options:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},'Repeat the process using the "Delegate" button multiple times'),(0,i.kt)("li",{parentName:"ul"},"Issue a batch call with multiple ",(0,i.kt)("inlineCode",{parentName:"li"},"convictionVoting.delegate")," extrinsics under\n",(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/extrinsics"},"Developer > Extrinsics"))),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"js-delegation-delegate",src:a(54853).Z,width:"2694",height:"1104"})),(0,i.kt)("p",null,'By clicking on "Add item" you can add new extrinsics for multiple tracks.'),(0,i.kt)("h3",{id:"undelegate-votes"},"Undelegate Votes"),(0,i.kt)("p",null,'The "Delegate" button on ',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Governance > Referenda")," is only\nfor delegating votes. You cannot undelegate or modify your delegations. If you wish to undelegate,\nyou will need to go to ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Developer > Extrinsics")," and\nsubmit a ",(0,i.kt)("inlineCode",{parentName:"p"},"convictionVoting.undelegate")," extrinsic, specifying the track you wish to undelegate."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"js-delegation-undelegate",src:a(9459).Z,width:"2708",height:"632"})),(0,i.kt)("p",null,'Undelegated tracks will show up as "0 votes" on the Delegate tab.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"js-delegation-undelegate",src:a(93996).Z,width:"2128",height:"1432"})),(0,i.kt)("p",null,"After you undelegated, the conviction lock will start the countdown, and your funds will be\navailable for unlocking after the countdown ends."),(0,i.kt)("h3",{id:"remove-expired-locks-from-delegations"},"Remove Expired Locks from Delegations"),(0,i.kt)("p",null,"To remove expired locks from delegations, you can\n",(0,i.kt)("a",{parentName:"p",href:"#removing-expired-voting-locks"},"follow the same procedure as how to remove expired voting locks"),"."),(0,i.kt)("h3",{id:"modify-your-delegations"},"Modify your Delegations"),(0,i.kt)("p",null,'The "Delegate" button on ',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Governance > Referenda")," is only\nfor delegating votes. You cannot undelegate or modify your delegations. If you wish to update the\ndelegated account, the conviction, and the number of votes you will need to go to\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Developer > Extrinsics"),", ",(0,i.kt)("a",{parentName:"p",href:"#undelegate-votes"},"undelegate"),"\nthe track and ",(0,i.kt)("a",{parentName:"p",href:"#delegate-votes"},"delegate")," again with updated information."),(0,i.kt)("h2",{id:"claiming-opengov-deposits"},"Claiming OpenGov Deposits"),(0,i.kt)("admonition",{title:"Video Tutorial about OpenGov deposits using the Polkadot-JS UI",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"See ",(0,i.kt)("a",{parentName:"p",href:"https://youtu.be/kkEq5cqW2Pk"},"this video tutorial")," to learn about how to claim OpenGov deposits\nusing the Polkadot-JS UI.")),(0,i.kt)("h3",{id:"claiming-the-preimage-and-decision-deposits"},"Claiming the Preimage and Decision Deposits"),(0,i.kt)("p",null,"After a referendum finishes its life cycle (and gets approved or rejected or timed out), the\npreimage and decision deposits can be claimed. For claiming the preimage deposit, navigate to\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/preimages"},"Polkadot-JS UI > Governance > Preimages")," and click on\nunnote button shown on the preimage you submitted."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Claim Preimage Deposit",src:a(80560).Z,width:"2828",height:"362"})),(0,i.kt)("p",null,"Similarly, to claim the decision deposit, navigate to\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Polkadot-JS UI > Governance > Referenda")," and scroll down\nto the end of the page to click on the referenda with the decision deposit and claim it."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Claim Referendum Deposits",src:a(62248).Z,width:"2830",height:"444"})),(0,i.kt)("h3",{id:"claiming-the-referendum-submission-deposit"},"Claiming the Referendum Submission Deposit"),(0,i.kt)("p",null,"The submission deposit for a referendum can be claimed\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/cfb29254f74412cea35e8048d8aea94bc789fcb1/substrate/frame/referenda/src/types.rs#L261"},"only if the referendum was ",(0,i.kt)("inlineCode",{parentName:"a"},"Approved")," or ",(0,i.kt)("inlineCode",{parentName:"a"},"Canceled")),".\nThe submission deposit can be claimed by issuing the ",(0,i.kt)("inlineCode",{parentName:"p"},"refundSubmissionDeposit")," extrinsic."),(0,i.kt)("p",null,"Users can not refund their submission deposit while the referendum is ",(0,i.kt)("inlineCode",{parentName:"p"},"Ongoing")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"Rejected"),".\nSimilarly, users cannot refund their submission deposit if the proposal has ",(0,i.kt)("inlineCode",{parentName:"p"},"TimedOut")," (failing to\nsubmit the decision deposit within a\n",(0,i.kt)(r.Z,{network:"polkadot",path:"const.referenda.undecidingTimeout",defaultValue:201600,filter:"blocksToDays",mdxType:"RPC"}),"","-day\nperiod will lead to a referendum timeout). This behavior exists so that users can refrain from\nspamming the chain with proposals that have no interest from the community. If a proposal is in the\n",(0,i.kt)("inlineCode",{parentName:"p"},"TimedOut")," state, any user can call ",(0,i.kt)("inlineCode",{parentName:"p"},"slash_proposal_deposit"),", which will move the funds from the\nuser to a runtime-configured account, like the treasury."),(0,i.kt)("p",null,"To refund your slashed deposit, you can start a new referendum and specifically request a refund\nfrom the treasury. You need to make sure you have enough balance for a new submission and decision\ndeposit, and you will need to select the right track to ask for a refund. For example, the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-origins#small-tipper"},"Small Tipper Track")," would be fine for any kind of\ndeposit refund up to 250 DOT."),(0,i.kt)("h2",{id:"cancel-or-kill-a-referendum"},"Cancel or Kill a Referendum"),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Anybody can cancel an ongoing referendum (i.e., a referendum within the Lead-in or\nvoting/confirmation period). For more information about the referenda timeline in Polkadot OpenGov,\nsee the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov#referenda-timeline"},"dedicated page"),"."),(0,i.kt)("p",{parentName:"admonition"},"To successfully cancel a referendum through the track ",(0,i.kt)("inlineCode",{parentName:"p"},"20 / Referendum Canceller"),", you will need to\nattain\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-origins#referendum-canceller"},"specific approval and support levels"),".")),(0,i.kt)("p",null,"To cancel a referendum, you need first to submit a preimage with the ",(0,i.kt)("inlineCode",{parentName:"p"},"referenda.cancel")," extrinsic.\nGo to the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Polkadot-JS UI > Governance > Referenda"),' and\nclick on the "Add Preimage" button. You must specify the ',(0,i.kt)("inlineCode",{parentName:"p"},"referenda.cancel")," extrinsic with the index\nequal to the ongoing Referendum you wish to cancel. In the screenshot below, the Referendum to be\ncancelled is 249."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"cancel-referenda-preimage-creation",src:a(78996).Z,width:"2144",height:"944"})),(0,i.kt)("p",null,"This call will cancel the referendum and return the deposit. You can also kill a referendum using\nthe ",(0,i.kt)("inlineCode",{parentName:"p"},"referenda.kill")," extrinsic. This will cancel the referendum and slash the deposit."),(0,i.kt)("admonition",{title:"Preimage Submission Deposit",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"A deposit is required for the preimage to be stored on chain. The preimage deposit is proportional\nto the amount of information stored within the preimage. The deposit amount required for a preimage\nwith a treasury spend transaction is around\n41 DOT. Ensure you have enough account\nbalance to pay for this submission deposit as well as the transaction fees.")),(0,i.kt)("p",null,"Once a preimage is submitted, it can be checked under\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/preimages"},"Governance > Preimages"),"."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"cancel-referenda-preimage-check",src:a(16212).Z,width:"2758",height:"190"})),(0,i.kt)("p",null,"You must copy the preimage to use it when you submit your proposal. To submit the proposal to cancel\nreferendum 249, for example, you need to go under\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Governance > Referenda"),' and click the "Submit Proposal"\nbutton.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"cancel-referenda-proposal",src:a(81405).Z,width:"2130",height:"1226"})),(0,i.kt)("p",null,"You must specify the account to submit the proposal (this can differ from the account used to create\nthe preimage). Then you will need to specify the track ",(0,i.kt)("inlineCode",{parentName:"p"},"20 / Referendum Canceller")," and add the\npreimage hash containing the specific action that will be enacted if the referendum passes. Note\nthat a submission deposit of\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.referenda.submissionDeposit",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),"","\nwill be reserved for submitting the proposal."),(0,i.kt)("p",null,"Once the proposal has been submitted, it will stay in the Lead-in period until there is enough space\nwithin the track, and a\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-origins#polkadot-opengov-terminology-and-parameters"},"track-dependent preparation period and decision deposit"),"\nhave been met. Failing to submit the decision deposit within a\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.referenda.undecidingTimeout",defaultValue:201600,filter:"blocksToDays",mdxType:"RPC"}),"","-day\nperiod will lead to a referendum timeout."))}k.isMDXComponent=!0},16212:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/cancel-referenda-preimage-check-45ef7f984450113a2b1a87e9e2751d69.png"},78996:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/cancel-referenda-preimage-creation-3923463db47aec298f74a426dba23166.png"},81405:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/cancel-referenda-proposal-b9c5e90784ec8216360053d8bda84980.png"},80560:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/claim-preimage-deposit-069843b91eba35d4829b237b59ab2d12.png"},62248:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/claim-referendum-decision-deposit-6352bbad189dac6fe7a651b5a3c8f5a5.png"},78249:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/encoded-call-hash-4e0347923993beea4d12d5a787649f8f.png"},80474:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/opengov-submit-preimage-whitelist-67d383745b6e7b3ef31a37567e044e80.png"},10579:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/opengov-submit-preimage-ddb9c9c348a6c169f24bf70b9439712e.png"},31993:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/opengov-submit-proposal-0c82b35f3f7b1d9e66130a621b76c44b.png"},62428:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/js-delegation-allTracks-788efa580f296aa78b65b77691570181.png"},54853:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/js-delegation-delegate-3bcce735bcc35b831079cd44ad0eef15.png"},90691:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/js-delegation-start-c8186f8875fd402b993abfd5ab09f515.png"},9459:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/js-delegation-undelegate-a5018d2ecd2d5523f711199cd6fa1e63.png"},93996:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/js-delegation-undelegated-9b5efde53d2016c4e4b1f0f6b651ecf5.png"},28422:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/rm-vote-8572ff30a00c8d6fe903fae7a39147f4.png"},43577:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/rm-voting-lock-214119c2fcfe92488190b321cdfe823a.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/c8dd560b.38bb1d58.js b/assets/js/c8dd560b.38bb1d58.js deleted file mode 100644 index e1ab40edec92..000000000000 --- a/assets/js/c8dd560b.38bb1d58.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[3978],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>d});var n=a(74165),o=a(15861),r=a(67294),i=a(87152),s=a(14741),p=a(67425);function u(e,t,a){return l.apply(this,arguments)}function l(){return(l=(0,o.Z)((0,n.Z)().mark((function e(t,a,o){var r,p,u,l,c;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=void 0,p=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return r="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return r="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return r="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return r="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==r){e.next=18;break}return e.abrupt("return");case 18:return u=new i.U(r),e.next=21,s.G.create({provider:u});case 21:l=e.sent,(c=a.split(".")).forEach((function(e){e in l&&(l=l[e])})),e.t1=c[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return p=l.toString(),e.abrupt("break",35);case 29:return e.next=31,l();case 31:return p=(p=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+c[0]+") in "+a);case 35:return e.abrupt("return",p);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function c(e,t,a,n){switch(t){case"humanReadable":(0,p.HumanReadable)(e,a,n);break;case"precise":(0,p.Precise)(e,a,n);break;case"blocksToDays":(0,p.BlocksToDays)(e,n);break;case"erasToDays":(0,p.ErasToDays)(e,n,a);break;case"percentage":(0,p.Percentage)(e,n);break;case"permillToPercent":(0,p.PermillToPercent)(e,n);break;case"arrayLength":(0,p.ArrayLength)(e,n);break;default:return void console.log("Ignoring unknown filter type")}}const d=function(e){var t=e.network,a=e.path,i=e.defaultValue,s=e.filter,p=void 0===s?void 0:s,l=(0,r.useState)(""),d=l[0],m=l[1];return t=t.toLowerCase(),(0,r.useEffect)((function(){void 0!==p?c(i.toString(),p,t,m):m(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var r=function(){var e=(0,o.Z)((0,n.Z)().mark((function e(){var o;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,u(t,a,m);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==p?c(o,p,t,m):m(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{r()}catch(s){console.log(s)}}}),[]),d}},67425:e=>{var t="polkadot",a="kusama",n="statemine",o="statemint",r={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,s){var p=void 0;if(i===t||i===o)p=3;else{if(i!==a&&i!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");p=6}e=parseFloat(e),s((e=Number.isInteger(e/r[i].precision)?e/r[i].precision+" "+r[i].symbol:(e/r[i].precision).toFixed(p)+" "+r[i].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/r[t].precision+" "+r[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,r,i){var s=void 0;if(i===t||i===o)s=1;else{if(i!==a&&i!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}r((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},82651:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>p,default:()=>h,frontMatter:()=>s,metadata:()=>u,toc:()=>c});var n=a(87462),o=a(63366),r=(a(67294),a(3905)),i=(a(47940),["components"]),s={id:"learn-guides-accounts-proxy-pure",title:"Polkadot-JS Guides about Pure Proxy Accounts",sidebar_label:"Pure Proxy Guides",description:"Polkadot-JS Guides about Pure Proxy Accounts",keyword:["guides","polkadot-js","accounts","proxy","pure proxy","anonymous proxy"],slug:"../learn-guides-accounts-proxy-pure"},p=void 0,u={unversionedId:"learn/learn-guides-accounts-proxy-pure",id:"learn/learn-guides-accounts-proxy-pure",title:"Polkadot-JS Guides about Pure Proxy Accounts",description:"Polkadot-JS Guides about Pure Proxy Accounts",source:"@site/../docs/learn/learn-guides-accounts-proxy-pure.md",sourceDirName:"learn",slug:"/learn-guides-accounts-proxy-pure",permalink:"/docs/learn-guides-accounts-proxy-pure",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-accounts-proxy-pure.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710309813,formattedLastUpdatedAt:"Mar 13, 2024",frontMatter:{id:"learn-guides-accounts-proxy-pure",title:"Polkadot-JS Guides about Pure Proxy Accounts",sidebar_label:"Pure Proxy Guides",description:"Polkadot-JS Guides about Pure Proxy Accounts",keyword:["guides","polkadot-js","accounts","proxy","pure proxy","anonymous proxy"],slug:"../learn-guides-accounts-proxy-pure"},sidebar:"docs",previous:{title:"Proxy Guides",permalink:"/docs/learn-guides-accounts-proxy"},next:{title:"Transfer Guides",permalink:"/docs/learn-guides-transfers"}},l={},c=[{value:"Create and Remove Pure Proxies with Polkadot-JS",id:"create-and-remove-pure-proxies-with-polkadot-js",level:2},{value:"Advanced Account Management with Pure Proxies",id:"advanced-account-management-with-pure-proxies",level:2},{value:"Pure Proxies and Multisigs",id:"pure-proxies-and-multisigs",level:2},{value:"Scenario One: One Pure Proxy within a Multisig",id:"scenario-one-one-pure-proxy-within-a-multisig",level:3},{value:"Scenario Two: Multisig made of Pure Proxies",id:"scenario-two-multisig-made-of-pure-proxies",level:3},{value:"Scenario Three: Multisig controlling a Pure Proxy",id:"scenario-three-multisig-controlling-a-pure-proxy",level:3}],d={toc:c},m="wrapper";function h(e){var t=e.components,s=(0,o.Z)(e,i);return(0,r.kt)(m,(0,n.Z)({},d,s,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("admonition",{title:"The Account Tab in the Polkadot-JS UI cannot handle complex proxy setups",type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"The Accounts Tab in the Polkadot-JS UI cannot handle complex proxy setups (e.g. a proxy -> multisig\n-> a pure proxy which is part of another multisig). These complex setups must be done using the\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Extrinsics Tab")," directly."),(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("strong",{parentName:"p"},"We recommend to use the ",(0,r.kt)("a",{parentName:"strong",href:"/docs/learn-DOT#getting-tokens-on-the-westend-testnet"},"Westend Testnet")," if\nyou are testing features for the first time.")," By performing the complex proxy setups on the\ntestnet, you can comfortably replicate the procedure on the main networks.")),(0,r.kt)("admonition",{title:"Risk of loss of funds",type:"danger"},(0,r.kt)("p",{parentName:"admonition"},"Read carefully the text below and before performing any action using anonymous proxies on\nPolkadot, experiment on the Westend testnet.")),(0,r.kt)("h2",{id:"create-and-remove-pure-proxies-with-polkadot-js"},"Create and Remove Pure Proxies with Polkadot-JS"),(0,r.kt)("p",null,"To create a ",(0,r.kt)("strong",{parentName:"p"},"pure proxy")," see\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182196"},"this support article"),", or\nwatch ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=T443RcCYP24"},"this technical explainer video"),"."),(0,r.kt)("admonition",{title:"Removing Pure Proxies",type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"The procedure for removing a ",(0,r.kt)("em",{parentName:"p"},"pure"),' proxy is different from the one used to remove other proxies.\nVisit the section "Removing an Anonymous Proxy" on\n',(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182196"},"this support article"),", or\nwatch ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=T443RcCYP24"},"this technical explainer video"),".")),(0,r.kt)("p",null,"Learn more about pure proxies from our\n",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=YkYApbhU3i0"},"technical explainer video"),"."),(0,r.kt)("h2",{id:"advanced-account-management-with-pure-proxies"},"Advanced Account Management with Pure Proxies"),(0,r.kt)("admonition",{title:"Walk-through tutorial video of Account Management",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"You can see ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=YkYApbhU3i0"},"this video tutorial")," that goes through the\nexample below. The tutorial requires some familiarity with the Extrinsic Tab of the Polkadot-JS UI.")),(0,r.kt)("p",null,"Let's take for example 3 accounts belonging to Charlie, Dan and Eleanor working for Company X.\nCharlie holds funds belonging to Company X, but he wants to leave the company and transfer the\neconomic responsibility to Eleanor. Dan is a staking proxy of Charlie."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Without ",(0,r.kt)("em",{parentName:"strong"},"Pure")," Proxy"),", Charlie must (see ",(0,r.kt)("em",{parentName:"p"},"left")," side of the Figure below):"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Remove Dan as a staking proxy, this step requires 1 signature"),(0,r.kt)("li",{parentName:"ul"},"Stop nominating and unbound all funds , this step requires 2 signatures"),(0,r.kt)("li",{parentName:"ul"},"Transfer the funds to Eleanor, this step requires 1 signature")),(0,r.kt)("p",null,"Then Eleanor adds Dan as a staking proxy (1 signature). The whole process requires 5 signatures.\nHere we are presenting a simple example, in fact, with multi-signature accounts and multiple proxies\nthe procedure would be more time-consuming and labor-intensive."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"why anonymous proxies",src:a(9518).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"With ",(0,r.kt)("em",{parentName:"strong"},"Pure")," Proxy")," (see ",(0,r.kt)("em",{parentName:"p"},"right")," side of the Figure above), Charlie must add Eleanor as ",(0,r.kt)("em",{parentName:"p"},"any"),"\nproxy of the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy, and remove himself (or Eleanor can remove him). The process requires just\n2 signatures (1 signature to add the new ",(0,r.kt)("em",{parentName:"p"},"any")," proxy and 1 signature the remove the old one). The\nfunds remain in the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy, and it is not necessary to stop nominating or unbond funds. Also,\nany proxy relationships with the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy stay in place. Thus, if we use the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy, with\nan increasing number of proxies we will always have to sign twice (not necessarily true in\nmulti-signature accounts). While if we are not using the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy, the more the proxies the more\nsignatures we need to detach them from the old stash and attach them to the new stash (see Figure\nbelow)."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"anon vs stash plot",src:a(78618).Z,width:"1920",height:"800"})),(0,r.kt)("h2",{id:"pure-proxies-and-multisigs"},"Pure Proxies and Multisigs"),(0,r.kt)("h3",{id:"scenario-one-one-pure-proxy-within-a-multisig"},"Scenario One: One Pure Proxy within a Multisig"),(0,r.kt)("admonition",{title:"Walk-through tutorial video",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"You can see ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=iGRoGstB_pQ"},"this video tutorial")," that goes through\nthis scenario. The tutorial requires some familiarity with the Extrinsic Tab of the Polkadot-JS UI.")),(0,r.kt)("p",null,"It is possible to put a ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy within a multisig, and then transactions will be signed by the\n",(0,r.kt)("em",{parentName:"p"},"any")," proxy on behalf of the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy (proxied account). Let's take for example the diagram\nbelow. Alice, Bob and Anon are part of the multisig ABC, a multisig account with threshold 2. P-C is\na ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy spawned by Charlie, who now acts as ",(0,r.kt)("em",{parentName:"p"},"any")," proxy and thus signs anything on behalf of\nP-C. The ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy cannot sign directly because it does not have a private key. So, for example,\nto send funds from the multisig to Dan, Charly needs to submit a ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic to P-C,\nwhich in turn will submit a ",(0,r.kt)("inlineCode",{parentName:"p"},"multisig.asMulti")," extrinsic to ABC containing the call data for the\n",(0,r.kt)("inlineCode",{parentName:"p"},"balances.transferKeepAlive")," extrinsic about the transfer of some funds from ABC to Dan. Alice can\nthen approve the transfer by submitting a ",(0,r.kt)("inlineCode",{parentName:"p"},"multisig.asMulti")," extrinsic also containing the call data\nfor the ",(0,r.kt)("inlineCode",{parentName:"p"},"balances.transferKeepAlive")," extrinsic about the transfer of some funds from ABC to Dan."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"multisig with one anon",src:a(19372).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"If Charly wants to leave the multisig, a new ",(0,r.kt)("em",{parentName:"p"},"any")," proxy can be added to P-C and Charly can be\nremoved (by himself or by the new ",(0,r.kt)("em",{parentName:"p"},"any")," proxy). Note that the multisig also contains Bob that in\nthis specific example does not do anything."),(0,r.kt)("admonition",{title:"Proxy calls",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"To use a ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy within a multisig you need to use the Extrinsic Tab and generate a\n",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic. If you try to sign a multisig transaction using the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy you will\nbe prompted with a warning. Remember, you cannot sign something directly if you do not have a\nprivate key.")),(0,r.kt)("h3",{id:"scenario-two-multisig-made-of-pure-proxies"},"Scenario Two: Multisig made of Pure Proxies"),(0,r.kt)("admonition",{title:"Walk-through Tutorial Video",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"You can see ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=F82C3zDNJyk"},"this video tutorial")," that goes through\nthis scenario. The tutorial requires some familiarity with the Extrinsic Tab of the Polkadot-JS UI.")),(0,r.kt)("p",null,"The diagram below shows a multisig that is made only with ",(0,r.kt)("em",{parentName:"p"},"pure")," proxies (P-A, P-B and P-C). In this\nsituation Alice, Bob or Charly can leave the multisig at any time without the requirement of\ncreating a new multisig. If for example, Bob leaves the multisig the procedure will require somebody\nelse to be added as ",(0,r.kt)("em",{parentName:"p"},"any")," proxy to P-B, and then Bob can remove himself (or the new ",(0,r.kt)("em",{parentName:"p"},"any")," proxy can\nremove Bob)."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"multisig with anons",src:a(58047).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"In the diagram above, Alice submits the ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic to P-A, which in turn submits the\n",(0,r.kt)("inlineCode",{parentName:"p"},"multisig.asMulti")," extrinsic containing the ",(0,r.kt)("inlineCode",{parentName:"p"},"balances.transferKeepAlive")," extrinsic about the\ntransfer of some tokens from ABC to Dan. Then, Charly does the same to confirm the transaction. Note\nthat Charly will need to pay for some weight, for the computation that is necessary to execute the\ntransaction."),(0,r.kt)("h3",{id:"scenario-three-multisig-controlling-a-pure-proxy"},"Scenario Three: Multisig controlling a Pure Proxy"),(0,r.kt)("p",null,"This setup is used by the ",(0,r.kt)("a",{parentName:"p",href:"/docs/multisig-apps#multix"},"MultiX")," tool."),(0,r.kt)("p",null,"After its creation, a multi-signature account creates a pure proxy that becomes the proxied account.\nThe multi-signature account behaves as ",(0,r.kt)("em",{parentName:"p"},"any")," proxy of the pure. If signatories of the\nmulti-signature account change, a new multisig can be created, assigned as ",(0,r.kt)("em",{parentName:"p"},"any")," proxy of the pure,\nand then the old multisig can be removed as a proxy."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"multisig with pure",src:a(5348).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"Compared to ",(0,r.kt)("a",{parentName:"p",href:"#scenario-two-multisig-made-of-pure-proxies"},"Scenario Two"),", signatories do not need to\ncreate pure proxies here. Multisig controlling a Pure Proxy is a more practical solution, where the\nsignatories, number of signatories and/or the threshold can be changed, which changes the multisig\naddress but does not impact the pure proxy address. In Scenario Two, if signatories behind the pure\nproxies change, the address of the multisig stays the same. However, changing the number of\nsignatories and threshold would not be possible."))}h.isMDXComponent=!0},78618:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/anon-vs-stash-plot-fa8f730710dbf5cbec2d7db43d5d962d.png"},58047:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/multisig-with-anons-209a0f481e6a13ed943a952be07e1a75.png"},19372:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/multisig-with-one-anon-b8bb0a5183fbdc1d1809d4cd58489ab4.png"},5348:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/multisig-with-pure-684efe47eba1ab52cd41218daf674357.png"},9518:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/why-anon-proxy-48fc32ddd2da9a5e9342554c68372d98.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/c8dd560b.741f4575.js b/assets/js/c8dd560b.741f4575.js new file mode 100644 index 000000000000..338b12e4f549 --- /dev/null +++ b/assets/js/c8dd560b.741f4575.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[3978],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>d});var n=a(74165),o=a(15861),r=a(67294),i=a(87152),s=a(14741),p=a(67425);function u(e,t,a){return l.apply(this,arguments)}function l(){return(l=(0,o.Z)((0,n.Z)().mark((function e(t,a,o){var r,p,u,l,c;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=void 0,p=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return r="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return r="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return r="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return r="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==r){e.next=18;break}return e.abrupt("return");case 18:return u=new i.U(r),e.next=21,s.G.create({provider:u});case 21:l=e.sent,(c=a.split(".")).forEach((function(e){e in l&&(l=l[e])})),e.t1=c[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return p=l.toString(),e.abrupt("break",35);case 29:return e.next=31,l();case 31:return p=(p=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+c[0]+") in "+a);case 35:return e.abrupt("return",p);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function c(e,t,a,n){switch(t){case"humanReadable":(0,p.HumanReadable)(e,a,n);break;case"precise":(0,p.Precise)(e,a,n);break;case"blocksToDays":(0,p.BlocksToDays)(e,n);break;case"erasToDays":(0,p.ErasToDays)(e,n,a);break;case"percentage":(0,p.Percentage)(e,n);break;case"permillToPercent":(0,p.PermillToPercent)(e,n);break;case"arrayLength":(0,p.ArrayLength)(e,n);break;default:return void console.log("Ignoring unknown filter type")}}const d=function(e){var t=e.network,a=e.path,i=e.defaultValue,s=e.filter,p=void 0===s?void 0:s,l=(0,r.useState)(""),d=l[0],m=l[1];return t=t.toLowerCase(),(0,r.useEffect)((function(){void 0!==p?c(i.toString(),p,t,m):m(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var r=function(){var e=(0,o.Z)((0,n.Z)().mark((function e(){var o;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,u(t,a,m);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==p?c(o,p,t,m):m(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{r()}catch(s){console.log(s)}}}),[]),d}},67425:e=>{var t="polkadot",a="kusama",n="statemine",o="statemint",r={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,s){var p=void 0;if(i===t||i===o)p=3;else{if(i!==a&&i!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");p=6}e=parseFloat(e),s((e=Number.isInteger(e/r[i].precision)?e/r[i].precision+" "+r[i].symbol:(e/r[i].precision).toFixed(p)+" "+r[i].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/r[t].precision+" "+r[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,r,i){var s=void 0;if(i===t||i===o)s=1;else{if(i!==a&&i!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}r((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},82651:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>p,default:()=>h,frontMatter:()=>s,metadata:()=>u,toc:()=>c});var n=a(87462),o=a(63366),r=(a(67294),a(3905)),i=(a(47940),["components"]),s={id:"learn-guides-accounts-proxy-pure",title:"Polkadot-JS Guides about Pure Proxy Accounts",sidebar_label:"Pure Proxy Guides",description:"Polkadot-JS Guides about Pure Proxy Accounts",keyword:["guides","polkadot-js","accounts","proxy","pure proxy","anonymous proxy"],slug:"../learn-guides-accounts-proxy-pure"},p=void 0,u={unversionedId:"learn/learn-guides-accounts-proxy-pure",id:"learn/learn-guides-accounts-proxy-pure",title:"Polkadot-JS Guides about Pure Proxy Accounts",description:"Polkadot-JS Guides about Pure Proxy Accounts",source:"@site/../docs/learn/learn-guides-accounts-proxy-pure.md",sourceDirName:"learn",slug:"/learn-guides-accounts-proxy-pure",permalink:"/docs/learn-guides-accounts-proxy-pure",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-accounts-proxy-pure.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-accounts-proxy-pure",title:"Polkadot-JS Guides about Pure Proxy Accounts",sidebar_label:"Pure Proxy Guides",description:"Polkadot-JS Guides about Pure Proxy Accounts",keyword:["guides","polkadot-js","accounts","proxy","pure proxy","anonymous proxy"],slug:"../learn-guides-accounts-proxy-pure"},sidebar:"docs",previous:{title:"Proxy Guides",permalink:"/docs/learn-guides-accounts-proxy"},next:{title:"Transfer Guides",permalink:"/docs/learn-guides-transfers"}},l={},c=[{value:"Create and Remove Pure Proxies with Polkadot-JS",id:"create-and-remove-pure-proxies-with-polkadot-js",level:2},{value:"Advanced Account Management with Pure Proxies",id:"advanced-account-management-with-pure-proxies",level:2},{value:"Pure Proxies and Multisigs",id:"pure-proxies-and-multisigs",level:2},{value:"Scenario One: One Pure Proxy within a Multisig",id:"scenario-one-one-pure-proxy-within-a-multisig",level:3},{value:"Scenario Two: Multisig made of Pure Proxies",id:"scenario-two-multisig-made-of-pure-proxies",level:3},{value:"Scenario Three: Multisig controlling a Pure Proxy",id:"scenario-three-multisig-controlling-a-pure-proxy",level:3}],d={toc:c},m="wrapper";function h(e){var t=e.components,s=(0,o.Z)(e,i);return(0,r.kt)(m,(0,n.Z)({},d,s,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"sticky",style:{zIndex:1}},(0,r.kt)("br",null),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,r.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,r.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,r.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,r.kt)("admonition",{title:"The Account Tab in the Polkadot-JS UI cannot handle complex proxy setups",type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"The Accounts Tab in the Polkadot-JS UI cannot handle complex proxy setups (e.g. a proxy -> multisig\n-> a pure proxy which is part of another multisig). These complex setups must be done using the\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Extrinsics Tab")," directly."),(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("strong",{parentName:"p"},"We recommend to use the ",(0,r.kt)("a",{parentName:"strong",href:"/docs/learn-DOT#getting-tokens-on-the-westend-testnet"},"Westend Testnet")," if\nyou are testing features for the first time.")," By performing the complex proxy setups on the\ntestnet, you can comfortably replicate the procedure on the main networks.")),(0,r.kt)("admonition",{title:"Risk of loss of funds",type:"danger"},(0,r.kt)("p",{parentName:"admonition"},"Read carefully the text below and before performing any action using anonymous proxies on\nPolkadot, experiment on the Westend testnet.")),(0,r.kt)("h2",{id:"create-and-remove-pure-proxies-with-polkadot-js"},"Create and Remove Pure Proxies with Polkadot-JS"),(0,r.kt)("p",null,"To create a ",(0,r.kt)("strong",{parentName:"p"},"pure proxy")," see\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182196"},"this support article"),", or\nwatch ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=T443RcCYP24"},"this technical explainer video"),"."),(0,r.kt)("admonition",{title:"Removing Pure Proxies",type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"The procedure for removing a ",(0,r.kt)("em",{parentName:"p"},"pure"),' proxy is different from the one used to remove other proxies.\nVisit the section "Removing an Anonymous Proxy" on\n',(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182196"},"this support article"),", or\nwatch ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=T443RcCYP24"},"this technical explainer video"),".")),(0,r.kt)("p",null,"Learn more about pure proxies from our\n",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=YkYApbhU3i0"},"technical explainer video"),"."),(0,r.kt)("h2",{id:"advanced-account-management-with-pure-proxies"},"Advanced Account Management with Pure Proxies"),(0,r.kt)("admonition",{title:"Walk-through tutorial video of Account Management",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"You can see ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=YkYApbhU3i0"},"this video tutorial")," that goes through the\nexample below. The tutorial requires some familiarity with the Extrinsic Tab of the Polkadot-JS UI.")),(0,r.kt)("p",null,"Let's take for example 3 accounts belonging to Charlie, Dan and Eleanor working for Company X.\nCharlie holds funds belonging to Company X, but he wants to leave the company and transfer the\neconomic responsibility to Eleanor. Dan is a staking proxy of Charlie."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Without ",(0,r.kt)("em",{parentName:"strong"},"Pure")," Proxy"),", Charlie must (see ",(0,r.kt)("em",{parentName:"p"},"left")," side of the Figure below):"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Remove Dan as a staking proxy, this step requires 1 signature"),(0,r.kt)("li",{parentName:"ul"},"Stop nominating and unbound all funds , this step requires 2 signatures"),(0,r.kt)("li",{parentName:"ul"},"Transfer the funds to Eleanor, this step requires 1 signature")),(0,r.kt)("p",null,"Then Eleanor adds Dan as a staking proxy (1 signature). The whole process requires 5 signatures.\nHere we are presenting a simple example, in fact, with multi-signature accounts and multiple proxies\nthe procedure would be more time-consuming and labor-intensive."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"why anonymous proxies",src:a(9518).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"With ",(0,r.kt)("em",{parentName:"strong"},"Pure")," Proxy")," (see ",(0,r.kt)("em",{parentName:"p"},"right")," side of the Figure above), Charlie must add Eleanor as ",(0,r.kt)("em",{parentName:"p"},"any"),"\nproxy of the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy, and remove himself (or Eleanor can remove him). The process requires just\n2 signatures (1 signature to add the new ",(0,r.kt)("em",{parentName:"p"},"any")," proxy and 1 signature the remove the old one). The\nfunds remain in the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy, and it is not necessary to stop nominating or unbond funds. Also,\nany proxy relationships with the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy stay in place. Thus, if we use the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy, with\nan increasing number of proxies we will always have to sign twice (not necessarily true in\nmulti-signature accounts). While if we are not using the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy, the more the proxies the more\nsignatures we need to detach them from the old stash and attach them to the new stash (see Figure\nbelow)."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"anon vs stash plot",src:a(78618).Z,width:"1920",height:"800"})),(0,r.kt)("h2",{id:"pure-proxies-and-multisigs"},"Pure Proxies and Multisigs"),(0,r.kt)("h3",{id:"scenario-one-one-pure-proxy-within-a-multisig"},"Scenario One: One Pure Proxy within a Multisig"),(0,r.kt)("admonition",{title:"Walk-through tutorial video",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"You can see ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=iGRoGstB_pQ"},"this video tutorial")," that goes through\nthis scenario. The tutorial requires some familiarity with the Extrinsic Tab of the Polkadot-JS UI.")),(0,r.kt)("p",null,"It is possible to put a ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy within a multisig, and then transactions will be signed by the\n",(0,r.kt)("em",{parentName:"p"},"any")," proxy on behalf of the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy (proxied account). Let's take for example the diagram\nbelow. Alice, Bob and Anon are part of the multisig ABC, a multisig account with threshold 2. P-C is\na ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy spawned by Charlie, who now acts as ",(0,r.kt)("em",{parentName:"p"},"any")," proxy and thus signs anything on behalf of\nP-C. The ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy cannot sign directly because it does not have a private key. So, for example,\nto send funds from the multisig to Dan, Charly needs to submit a ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic to P-C,\nwhich in turn will submit a ",(0,r.kt)("inlineCode",{parentName:"p"},"multisig.asMulti")," extrinsic to ABC containing the call data for the\n",(0,r.kt)("inlineCode",{parentName:"p"},"balances.transferKeepAlive")," extrinsic about the transfer of some funds from ABC to Dan. Alice can\nthen approve the transfer by submitting a ",(0,r.kt)("inlineCode",{parentName:"p"},"multisig.asMulti")," extrinsic also containing the call data\nfor the ",(0,r.kt)("inlineCode",{parentName:"p"},"balances.transferKeepAlive")," extrinsic about the transfer of some funds from ABC to Dan."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"multisig with one anon",src:a(19372).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"If Charly wants to leave the multisig, a new ",(0,r.kt)("em",{parentName:"p"},"any")," proxy can be added to P-C and Charly can be\nremoved (by himself or by the new ",(0,r.kt)("em",{parentName:"p"},"any")," proxy). Note that the multisig also contains Bob that in\nthis specific example does not do anything."),(0,r.kt)("admonition",{title:"Proxy calls",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"To use a ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy within a multisig you need to use the Extrinsic Tab and generate a\n",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic. If you try to sign a multisig transaction using the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy you will\nbe prompted with a warning. Remember, you cannot sign something directly if you do not have a\nprivate key.")),(0,r.kt)("h3",{id:"scenario-two-multisig-made-of-pure-proxies"},"Scenario Two: Multisig made of Pure Proxies"),(0,r.kt)("admonition",{title:"Walk-through Tutorial Video",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"You can see ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=F82C3zDNJyk"},"this video tutorial")," that goes through\nthis scenario. The tutorial requires some familiarity with the Extrinsic Tab of the Polkadot-JS UI.")),(0,r.kt)("p",null,"The diagram below shows a multisig that is made only with ",(0,r.kt)("em",{parentName:"p"},"pure")," proxies (P-A, P-B and P-C). In this\nsituation Alice, Bob or Charly can leave the multisig at any time without the requirement of\ncreating a new multisig. If for example, Bob leaves the multisig the procedure will require somebody\nelse to be added as ",(0,r.kt)("em",{parentName:"p"},"any")," proxy to P-B, and then Bob can remove himself (or the new ",(0,r.kt)("em",{parentName:"p"},"any")," proxy can\nremove Bob)."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"multisig with anons",src:a(58047).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"In the diagram above, Alice submits the ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic to P-A, which in turn submits the\n",(0,r.kt)("inlineCode",{parentName:"p"},"multisig.asMulti")," extrinsic containing the ",(0,r.kt)("inlineCode",{parentName:"p"},"balances.transferKeepAlive")," extrinsic about the\ntransfer of some tokens from ABC to Dan. Then, Charly does the same to confirm the transaction. Note\nthat Charly will need to pay for some weight, for the computation that is necessary to execute the\ntransaction."),(0,r.kt)("h3",{id:"scenario-three-multisig-controlling-a-pure-proxy"},"Scenario Three: Multisig controlling a Pure Proxy"),(0,r.kt)("p",null,"This setup is used by the ",(0,r.kt)("a",{parentName:"p",href:"/docs/multisig-apps#multix"},"MultiX")," tool."),(0,r.kt)("p",null,"After its creation, a multi-signature account creates a pure proxy that becomes the proxied account.\nThe multi-signature account behaves as ",(0,r.kt)("em",{parentName:"p"},"any")," proxy of the pure. If signatories of the\nmulti-signature account change, a new multisig can be created, assigned as ",(0,r.kt)("em",{parentName:"p"},"any")," proxy of the pure,\nand then the old multisig can be removed as a proxy."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"multisig with pure",src:a(5348).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"Compared to ",(0,r.kt)("a",{parentName:"p",href:"#scenario-two-multisig-made-of-pure-proxies"},"Scenario Two"),", signatories do not need to\ncreate pure proxies here. Multisig controlling a Pure Proxy is a more practical solution, where the\nsignatories, number of signatories and/or the threshold can be changed, which changes the multisig\naddress but does not impact the pure proxy address. In Scenario Two, if signatories behind the pure\nproxies change, the address of the multisig stays the same. However, changing the number of\nsignatories and threshold would not be possible."))}h.isMDXComponent=!0},78618:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/anon-vs-stash-plot-fa8f730710dbf5cbec2d7db43d5d962d.png"},58047:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/multisig-with-anons-209a0f481e6a13ed943a952be07e1a75.png"},19372:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/multisig-with-one-anon-b8bb0a5183fbdc1d1809d4cd58489ab4.png"},5348:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/multisig-with-pure-684efe47eba1ab52cd41218daf674357.png"},9518:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/why-anon-proxy-48fc32ddd2da9a5e9342554c68372d98.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/dbbd9e76.985d034c.js b/assets/js/dbbd9e76.985d034c.js new file mode 100644 index 000000000000..71fa15314f24 --- /dev/null +++ b/assets/js/dbbd9e76.985d034c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3669],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>m});var n=a(67294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var p=n.createContext({}),s=function(e){var t=n.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},d=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},u="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var a=e.components,i=e.mdxType,o=e.originalType,p=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=s(a),c=i,m=u["".concat(p,".").concat(c)]||u[c]||h[c]||o;return a?n.createElement(m,r(r({ref:t},d),{},{components:a})):n.createElement(m,r({ref:t},d))}));function m(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=a.length,r=new Array(o);r[0]=c;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:i,r[1]=l;for(var s=2;s{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>p,default:()=>m,frontMatter:()=>l,metadata:()=>s,toc:()=>u});var n=a(87462),i=a(63366),o=(a(67294),a(3905)),r=["components"],l={id:"learn-guides-vault",title:"Polkadot-JS Guides about the Vault App",sidebar_label:"Polkadot Vault Guides",description:"Polkadot-JS Guides about Polkadot Vault.",keywords:["parity signer","signer","polkadot vault","polkadot-js"],slug:"../learn-guides-vault"},p=void 0,s={unversionedId:"learn/learn-guides-vault",id:"learn/learn-guides-vault",title:"Polkadot-JS Guides about the Vault App",description:"Polkadot-JS Guides about Polkadot Vault.",source:"@site/../docs/learn/learn-guides-vault.md",sourceDirName:"learn",slug:"/learn-guides-vault",permalink:"/docs/learn-guides-vault",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-vault.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-vault",title:"Polkadot-JS Guides about the Vault App",sidebar_label:"Polkadot Vault Guides",description:"Polkadot-JS Guides about Polkadot Vault.",keywords:["parity signer","signer","polkadot vault","polkadot-js"],slug:"../learn-guides-vault"},sidebar:"docs",previous:{title:"Ledger Guides",permalink:"/docs/learn-guides-ledger"},next:{title:"Asset Hub Guides",permalink:"/docs/learn-guides-assets"}},d={},u=[{value:"Sending a Transfer with the Vault App",id:"sending-a-transfer-with-the-vault-app",level:2},{value:"Import Vault Accounts into Polkadot-JS",id:"import-vault-accounts-into-polkadot-js",level:2},{value:"Do Your Own Chain Spec and Metadata Update",id:"do-your-own-chain-spec-and-metadata-update",level:2},{value:"Chain Specification",id:"chain-specification",level:3},{value:"Chain Spec QR",id:"chain-spec-qr",level:4},{value:"Generating Signature",id:"generating-signature",level:4},{value:"Signing Chain Spec",id:"signing-chain-spec",level:4},{value:"Metadata Updates",id:"metadata-updates",level:3},{value:"Metadata QR Fountain",id:"metadata-qr-fountain",level:4},{value:"Generating Signature",id:"generating-signature-1",level:4},{value:"Signing Metadata",id:"signing-metadata",level:4},{value:"Add Chain & Update Metadata",id:"add-chain--update-metadata",level:3},{value:"Metadata Portal",id:"metadata-portal",level:3},{value:"Modify config File",id:"modify-config-file",level:4},{value:"Rename Chain's Files",id:"rename-chains-files",level:4},{value:"Run Portal",id:"run-portal",level:4}],h={toc:u},c="wrapper";function m(e){var t=e.components,a=(0,i.Z)(e,r);return(0,o.kt)(c,(0,n.Z)({},h,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("div",{className:"sticky",style:{zIndex:1}},(0,o.kt)("br",null),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,o.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,o.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,o.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"These guides apply to both Parity Signer and Polkadot Vault apps.")),(0,o.kt)("h2",{id:"sending-a-transfer-with-the-vault-app"},"Sending a Transfer with the Vault App"),(0,o.kt)("admonition",{title:"Verifying Extrinsics",type:"danger"},(0,o.kt)("p",{parentName:"admonition"},"Visit the\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000179161-how-can-i-verify-what-extrinsic-i-m-signing-#Verify-an-extrinsic-using-Ledger"},(0,o.kt)("strong",{parentName:"a"},"dedicated support page")),"\nand see ",(0,o.kt)("a",{parentName:"p",href:"https://youtu.be/bxMs-9fBtFk?t=360"},(0,o.kt)("strong",{parentName:"a"},"this video tutorial"))," tutorial to learn about how to\nverify extrinsics before signing them. The video will also mention potential attacks that can happen\nto you while signing for transactions.")),(0,o.kt)("p",null,"General instructions to send a transfer can be found on\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000170304-how-to-send-transfer-funds-out-of-your-dot-account-on-the-polkadot-js-ui"},"this support page"),".\nTo sign transactions with the Polkadot Vault app check\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182000-how-to-sign-a-transaction-in-parity-signer"},"this support article"),"\nor see ",(0,o.kt)("a",{parentName:"p",href:"https://youtu.be/gbvrHzr4EDY?t=281"},"this video tutorial"),"."),(0,o.kt)("h2",{id:"import-vault-accounts-into-polkadot-js"},"Import Vault Accounts into Polkadot-JS"),(0,o.kt)("p",null,"See\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000184118-polkadot-vault-how-to-add-your-account-on-polkadot-js-ui"},"this support article"),"\nto import a Polkadot Vault account into the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/polkadotjs#polkadot-js-extension"},"Polkadot-JS Browser Extension")," or\n",(0,o.kt)("a",{parentName:"p",href:"https://chrome.google.com/webstore/detail/parity-signer-companion/damllfnhhcbmclmjilomenbhkappdjgb"},"Parity Signer Companion"),".\nAccounts added to those extensions will be injected into the Polkadot-JS UI."),(0,o.kt)("h2",{id:"do-your-own-chain-spec-and-metadata-update"},"Do Your Own Chain Spec and Metadata Update"),(0,o.kt)("admonition",{title:"This section is for developers and power users only",type:"danger"},(0,o.kt)("p",{parentName:"admonition"},"By requesting the chain specification and metadata you trust the specific endpoint you are using\n(unless you are using you own node).")),(0,o.kt)("p",null,"The following guide bases on the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/parity-signer"},"Parity Signer")," Github\npage (to create the Chain Spec QR code and the metadata QR code fountain) and\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/metadata-portal"},"Metadata Portal")," Github page (to embed the Chain\nSpec and Metadata into a portal)."),(0,o.kt)("h3",{id:"chain-specification"},"Chain Specification"),(0,o.kt)("h4",{id:"chain-spec-qr"},"Chain Spec QR"),(0,o.kt)("p",null,"To add more chains on the Vault app you can follow the instructions\n",(0,o.kt)("a",{parentName:"p",href:"https://paritytech.github.io/parity-signer/tutorials/Add-New-Network.html#add-network-specs"},"here"),".\nIn this example we will add the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-assets"},"Asset Hub")," system parachain. Briefly,\nfork the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/parity-signer"},"Parity Signer GitHub repository"),", start the\nterminal within the ",(0,o.kt)("inlineCode",{parentName:"p"},"/generate_message")," folder and type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"cargo run add-specs -d -u wss://kusama-asset-hub-rpc.polkadot.io --encryption sr25519")),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},"wss://kusama-asset.hub-rpc.polkadot.io")," is the Parity RPC endpoint for the Asset Hub on\nKusama. This will create the file ",(0,o.kt)("inlineCode",{parentName:"p"},"sign_me_add_specs_statemine_sr25510")," under the\n",(0,o.kt)("inlineCode",{parentName:"p"},"files/in_progress")," folder. See\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/polkadot-js/apps/blob/089fd77b14169749e35e073a93f7e7276963009c/packages/apps-config/src/endpoints/productionRelayPolkadot.ts"},"this GitHub page")," for a list of all endpoints listed in the Polkadot-JS UI.",""),(0,o.kt)("h4",{id:"generating-signature"},"Generating Signature"),(0,o.kt)("admonition",{title:"Use a hot account",type:"danger"},(0,o.kt)("p",{parentName:"admonition"},"Make sure that the account used to sign the chain specification is a hot account. Never use a cold\naccount from the Vault app or Ledger, as after typing the seed phrase into the terminal that account\nwill be considered hot.")),(0,o.kt)("p",null,"Start the terminal within the ",(0,o.kt)("inlineCode",{parentName:"p"},"files/in_progress")," folder and type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},'cat sign_me_add_specs_statemine_sr25519 | subkey sign --suri "YOUR SEED PHRASE"')),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},'"YOUR SEED PHRASE"')," is the seed phrase of the account that will be used to sign and\nauthenticate both the chain spec and later on the metadata. Running the code above will return a\nsignature similar to that below:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"0xc4ce72db959000b6166af96d3bda55a927fd837747bf1bf1ae8a69e57c9ef37c25a88707c47b105a9eb1fbcf9345680eff57eb978cf73919506f6c738834e78a")),(0,o.kt)("h4",{id:"signing-chain-spec"},"Signing Chain Spec"),(0,o.kt)("p",null,"Now, go back to the ",(0,o.kt)("inlineCode",{parentName:"p"},"/generate_message")," folder and type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"cargo run --release make --goal qr --crypto sr25519 --msg add-specs --payload sign_me_add_specs_statemine_sr25519 --verifier-hex PUBLIC KEY --signature-hex SIGNATURE")),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},"PUBLIC KEY")," is the public key of the account with seed ",(0,o.kt)("inlineCode",{parentName:"p"},'"YOUR SEED PHRASE"'),", and ",(0,o.kt)("inlineCode",{parentName:"p"},"SIGNATURE"),"\nis the signature generated in the previous step. Running the code above will create the file\n",(0,o.kt)("inlineCode",{parentName:"p"},"add_specs_statemine-sr25519")," under the ",(0,o.kt)("inlineCode",{parentName:"p"},"files/completed")," folder."),(0,o.kt)("h3",{id:"metadata-updates"},"Metadata Updates"),(0,o.kt)("p",null,"Similarly to what we did for the chain specification, we now generate and sign the Asset Hub\nmetadata."),(0,o.kt)("h4",{id:"metadata-qr-fountain"},"Metadata QR Fountain"),(0,o.kt)("p",null,"To update the chain metadata for the Asset Hub specs on the Vault app you can follow the\ninstructions\n",(0,o.kt)("a",{parentName:"p",href:"https://paritytech.github.io/parity-signer/tutorials/Add-New-Network.html#add-network-metadata"},"here"),".\nBriefly, in the Parity Signer repository, start the terminal within the ",(0,o.kt)("inlineCode",{parentName:"p"},"/generate_message")," folder\nand type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"cargo run load-metadata -d -u wss://kusama-asset-hub-rpc.polkadot.io")),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},"wss://kusama-asset-hub-rpc.polkadot.io")," is the Parity RPC endpoint for the Asset Hub on\nKusama. This will create the file ",(0,o.kt)("inlineCode",{parentName:"p"},"sign_me_load_metadata_statemineV9370")," under the\n",(0,o.kt)("inlineCode",{parentName:"p"},"files/in_progress")," folder. Note that for future metadata updates the file name will change as the\nversion at the time of writing was ",(0,o.kt)("inlineCode",{parentName:"p"},"V9370"),"."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Note that the name of the file changes according to the network version. That is, ",(0,o.kt)("inlineCode",{parentName:"p"},"????")," in\n",(0,o.kt)("inlineCode",{parentName:"p"},"sign_me_load_metadata_statemineV????")," will be the latest version at fetch time.")),(0,o.kt)("h4",{id:"generating-signature-1"},"Generating Signature"),(0,o.kt)("admonition",{title:"Use a hot account",type:"danger"},(0,o.kt)("p",{parentName:"admonition"},"Make sure that the account used to sign the metadata is a hot account. Never use a cold account from\nthe Vault app or Ledger, as after typing the seed phrase into the terminal that account will be\nconsidered hot.")),(0,o.kt)("p",null,"Start the terminal within the ",(0,o.kt)("inlineCode",{parentName:"p"},"files/in_progress")," folder and type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},'cat sign_me_load_metadata_statemineV9370 | subkey sign --suri "YOUR SEED PHRASE"')),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},'"YOUR SEED PHRASE"')," is the seed phrase of the account you used to sign the chain\nspecification. Running the code above will return a signature similar to that below:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"0xde1ad7aeb252acb3cf42a522dcc8dc3f317a49be2ed636836dd6df8f7e47135f2c712480055822eba87e9ea5ac7d3bba96045992ae795856fdf4eea09a411f85")),(0,o.kt)("admonition",{title:"Do not copy the code lines above",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Note that the name of the file changes according to the network version. That is, ",(0,o.kt)("inlineCode",{parentName:"p"},"????")," in\n",(0,o.kt)("inlineCode",{parentName:"p"},"sign_me_load_metadata_statemineV????")," will be the latest version at fetch time. So, do not copy the\ncode line above, but change the version with the appropriate one saved under the ",(0,o.kt)("inlineCode",{parentName:"p"},"files/in_progress"),"\nfolder. The signature changes as well.")),(0,o.kt)("h4",{id:"signing-metadata"},"Signing Metadata"),(0,o.kt)("p",null,"Now, go back to the ",(0,o.kt)("inlineCode",{parentName:"p"},"/generate_message")," folder and type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"cargo run --release make --goal qr --crypto sr25519 --msg load-metadata --payload sign_me_load_metadata_statemineV9370 --verifier-hex PUBLIC KEY --signature-hex SIGNATURE")),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},"PUBLIC KEY")," is the public key of the account with seed ",(0,o.kt)("inlineCode",{parentName:"p"},'"YOUR SEED PHRASE"'),", and ",(0,o.kt)("inlineCode",{parentName:"p"},"SIGNATURE"),"\nis the signature generated in the previous step. Running the code above will create the file\n",(0,o.kt)("inlineCode",{parentName:"p"},"load_metadata_statemineV9370")," under the ",(0,o.kt)("inlineCode",{parentName:"p"},"files/completed")," folder."),(0,o.kt)("h3",{id:"add-chain--update-metadata"},"Add Chain & Update Metadata"),(0,o.kt)("p",null,"You can open ",(0,o.kt)("inlineCode",{parentName:"p"},"add_specs_statemine-sr25519")," on your browser (just drag the file on an open tab). This\nis a .png file containing the QR code to add the Asset Hub chain specification into the Vault App.\nYou can do the same with the ",(0,o.kt)("inlineCode",{parentName:"p"},"load_metadata_statemineV9370"),". This is a .apng file containing the QR\ncode fountain to do the metadata update for the Asset Hub on Kusama."),(0,o.kt)("h3",{id:"metadata-portal"},"Metadata Portal"),(0,o.kt)("h4",{id:"modify-config-file"},"Modify ",(0,o.kt)("inlineCode",{parentName:"h4"},"config")," File"),(0,o.kt)("p",null,"Alternatively, you can add the chain specification QR code and the metadata QR code fountain in a\nmetadata portal. Briefly, fork the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/metadata-portal"},"Parity's Metadata Portal GitHub repository"),". You can\nmodify the following fields of the ",(0,o.kt)("inlineCode",{parentName:"p"},"config.toml")," file:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"name"),": your name / institution"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"public_key"),": the public key of the account you use to sign the chain spec and the metadata."),(0,o.kt)("li",{parentName:"ul"},"At the bottom of the file add the following information:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'[[chains]]\nname = "Statemine"\ntitle = "Kusama Asset Hub"\nrpc_endpoint = "wss://kusama-asset-hub-rpc.polkadot.io"\ncolor = "#f27230"\n\n[chains.github_release]\nowner = "paritytech"\nrepo = "statemint"\ngenesis_hash = "0x48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a"\n')),(0,o.kt)("p",null,"For each additional chain, you need to add the respective information. Information about the genesis\nhash can be found on the Polkadot-JS UI > connect to the relevant chain > Developer > Chain State."),(0,o.kt)("h4",{id:"rename-chains-files"},"Rename Chain's Files"),(0,o.kt)("p",null,"Rename the signed chain specification and metadata files as follow:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Chain specification: ",(0,o.kt)("inlineCode",{parentName:"p"},"add_specs_statemine-sr25519")," --\x3e ",(0,o.kt)("inlineCode",{parentName:"p"},"statemine_specs.png"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Metadata updates: ",(0,o.kt)("inlineCode",{parentName:"p"},"load_metadata_statemineV9370"),"--\x3e ",(0,o.kt)("inlineCode",{parentName:"p"},"statemine_metadata_9370.apng")))),(0,o.kt)("p",null,"Thus, for chain specification the file must be renamed to ",(0,o.kt)("inlineCode",{parentName:"p"},"chainName_specs.png")," while for metadata\nthe file must be renamed to ",(0,o.kt)("inlineCode",{parentName:"p"},"chainName_metadata_version.apng")," where ",(0,o.kt)("inlineCode",{parentName:"p"},"chainName")," is the name of the\nchain and ",(0,o.kt)("inlineCode",{parentName:"p"},"version")," is the version of the metadata."),(0,o.kt)("p",null,"Add the renamed files to the ",(0,o.kt)("inlineCode",{parentName:"p"},"/public/qr folder")," within the Metadata Portal repository."),(0,o.kt)("h4",{id:"run-portal"},"Run Portal"),(0,o.kt)("p",null,"Open the terminal within the Metadata Portal repository and run ",(0,o.kt)("inlineCode",{parentName:"p"},"make updater"),". Then run\n",(0,o.kt)("inlineCode",{parentName:"p"},"make collector"),"; this will create the ",(0,o.kt)("inlineCode",{parentName:"p"},"_latest.apng")," files for each of the chains (removed by the\ncommand ",(0,o.kt)("inlineCode",{parentName:"p"},"make cleaner"),"). Finally, run ",(0,o.kt)("inlineCode",{parentName:"p"},"yarn start")," to load the metadata portal on your localhost."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/dbbd9e76.fc3facd2.js b/assets/js/dbbd9e76.fc3facd2.js deleted file mode 100644 index c32f4bfe5ad0..000000000000 --- a/assets/js/dbbd9e76.fc3facd2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3669],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>m});var n=a(67294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var p=n.createContext({}),s=function(e){var t=n.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},d=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},u="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var a=e.components,i=e.mdxType,o=e.originalType,p=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=s(a),c=i,m=u["".concat(p,".").concat(c)]||u[c]||h[c]||o;return a?n.createElement(m,r(r({ref:t},d),{},{components:a})):n.createElement(m,r({ref:t},d))}));function m(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=a.length,r=new Array(o);r[0]=c;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:i,r[1]=l;for(var s=2;s{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>p,default:()=>m,frontMatter:()=>l,metadata:()=>s,toc:()=>u});var n=a(87462),i=a(63366),o=(a(67294),a(3905)),r=["components"],l={id:"learn-guides-vault",title:"Polkadot-JS Guides about the Vault App",sidebar_label:"Polkadot Vault Guides",description:"Polkadot-JS Guides about Polkadot Vault.",keywords:["parity signer","signer","polkadot vault","polkadot-js"],slug:"../learn-guides-vault"},p=void 0,s={unversionedId:"learn/learn-guides-vault",id:"learn/learn-guides-vault",title:"Polkadot-JS Guides about the Vault App",description:"Polkadot-JS Guides about Polkadot Vault.",source:"@site/../docs/learn/learn-guides-vault.md",sourceDirName:"learn",slug:"/learn-guides-vault",permalink:"/docs/learn-guides-vault",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-vault.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710309813,formattedLastUpdatedAt:"Mar 13, 2024",frontMatter:{id:"learn-guides-vault",title:"Polkadot-JS Guides about the Vault App",sidebar_label:"Polkadot Vault Guides",description:"Polkadot-JS Guides about Polkadot Vault.",keywords:["parity signer","signer","polkadot vault","polkadot-js"],slug:"../learn-guides-vault"},sidebar:"docs",previous:{title:"Ledger Guides",permalink:"/docs/learn-guides-ledger"},next:{title:"Asset Hub Guides",permalink:"/docs/learn-guides-assets-index"}},d={},u=[{value:"Sending a Transfer with the Vault App",id:"sending-a-transfer-with-the-vault-app",level:2},{value:"Import Vault Accounts into Polkadot-JS",id:"import-vault-accounts-into-polkadot-js",level:2},{value:"Do Your Own Chain Spec and Metadata Update",id:"do-your-own-chain-spec-and-metadata-update",level:2},{value:"Chain Specification",id:"chain-specification",level:3},{value:"Chain Spec QR",id:"chain-spec-qr",level:4},{value:"Generating Signature",id:"generating-signature",level:4},{value:"Signing Chain Spec",id:"signing-chain-spec",level:4},{value:"Metadata Updates",id:"metadata-updates",level:3},{value:"Metadata QR Fountain",id:"metadata-qr-fountain",level:4},{value:"Generating Signature",id:"generating-signature-1",level:4},{value:"Signing Metadata",id:"signing-metadata",level:4},{value:"Add Chain & Update Metadata",id:"add-chain--update-metadata",level:3},{value:"Metadata Portal",id:"metadata-portal",level:3},{value:"Modify config File",id:"modify-config-file",level:4},{value:"Rename Chain's Files",id:"rename-chains-files",level:4},{value:"Run Portal",id:"run-portal",level:4}],h={toc:u},c="wrapper";function m(e){var t=e.components,a=(0,i.Z)(e,r);return(0,o.kt)(c,(0,n.Z)({},h,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"These guides apply to both Parity Signer and Polkadot Vault apps.")),(0,o.kt)("h2",{id:"sending-a-transfer-with-the-vault-app"},"Sending a Transfer with the Vault App"),(0,o.kt)("admonition",{title:"Verifying Extrinsics",type:"danger"},(0,o.kt)("p",{parentName:"admonition"},"Visit the\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000179161-how-can-i-verify-what-extrinsic-i-m-signing-#Verify-an-extrinsic-using-Ledger"},(0,o.kt)("strong",{parentName:"a"},"dedicated support page")),"\nand see ",(0,o.kt)("a",{parentName:"p",href:"https://youtu.be/bxMs-9fBtFk?t=360"},(0,o.kt)("strong",{parentName:"a"},"this video tutorial"))," tutorial to learn about how to\nverify extrinsics before signing them. The video will also mention potential attacks that can happen\nto you while signing for transactions.")),(0,o.kt)("p",null,"General instructions to send a transfer can be found on\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000170304-how-to-send-transfer-funds-out-of-your-dot-account-on-the-polkadot-js-ui"},"this support page"),".\nTo sign transactions with the Polkadot Vault app check\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182000-how-to-sign-a-transaction-in-parity-signer"},"this support article"),"\nor see ",(0,o.kt)("a",{parentName:"p",href:"https://youtu.be/gbvrHzr4EDY?t=281"},"this video tutorial"),"."),(0,o.kt)("h2",{id:"import-vault-accounts-into-polkadot-js"},"Import Vault Accounts into Polkadot-JS"),(0,o.kt)("p",null,"See\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000184118-polkadot-vault-how-to-add-your-account-on-polkadot-js-ui"},"this support article"),"\nto import a Polkadot Vault account into the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/polkadotjs#polkadot-js-extension"},"Polkadot-JS Browser Extension")," or\n",(0,o.kt)("a",{parentName:"p",href:"https://chrome.google.com/webstore/detail/parity-signer-companion/damllfnhhcbmclmjilomenbhkappdjgb"},"Parity Signer Companion"),".\nAccounts added to those extensions will be injected into the Polkadot-JS UI."),(0,o.kt)("h2",{id:"do-your-own-chain-spec-and-metadata-update"},"Do Your Own Chain Spec and Metadata Update"),(0,o.kt)("admonition",{title:"This section is for developers and power users only",type:"danger"},(0,o.kt)("p",{parentName:"admonition"},"By requesting the chain specification and metadata you trust the specific endpoint you are using\n(unless you are using you own node).")),(0,o.kt)("p",null,"The following guide bases on the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/parity-signer"},"Parity Signer")," Github\npage (to create the Chain Spec QR code and the metadata QR code fountain) and\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/metadata-portal"},"Metadata Portal")," Github page (to embed the Chain\nSpec and Metadata into a portal)."),(0,o.kt)("h3",{id:"chain-specification"},"Chain Specification"),(0,o.kt)("h4",{id:"chain-spec-qr"},"Chain Spec QR"),(0,o.kt)("p",null,"To add more chains on the Vault app you can follow the instructions\n",(0,o.kt)("a",{parentName:"p",href:"https://paritytech.github.io/parity-signer/tutorials/Add-New-Network.html#add-network-specs"},"here"),".\nIn this example we will add the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-assets"},"Asset Hub")," system parachain. Briefly,\nfork the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/parity-signer"},"Parity Signer GitHub repository"),", start the\nterminal within the ",(0,o.kt)("inlineCode",{parentName:"p"},"/generate_message")," folder and type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"cargo run add-specs -d -u wss://kusama-asset-hub-rpc.polkadot.io --encryption sr25519")),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},"wss://kusama-asset.hub-rpc.polkadot.io")," is the Parity RPC endpoint for the Asset Hub on\nKusama. This will create the file ",(0,o.kt)("inlineCode",{parentName:"p"},"sign_me_add_specs_statemine_sr25510")," under the\n",(0,o.kt)("inlineCode",{parentName:"p"},"files/in_progress")," folder. See\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/polkadot-js/apps/blob/089fd77b14169749e35e073a93f7e7276963009c/packages/apps-config/src/endpoints/productionRelayPolkadot.ts"},"this GitHub page")," for a list of all endpoints listed in the Polkadot-JS UI.",""),(0,o.kt)("h4",{id:"generating-signature"},"Generating Signature"),(0,o.kt)("admonition",{title:"Use a hot account",type:"danger"},(0,o.kt)("p",{parentName:"admonition"},"Make sure that the account used to sign the chain specification is a hot account. Never use a cold\naccount from the Vault app or Ledger, as after typing the seed phrase into the terminal that account\nwill be considered hot.")),(0,o.kt)("p",null,"Start the terminal within the ",(0,o.kt)("inlineCode",{parentName:"p"},"files/in_progress")," folder and type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},'cat sign_me_add_specs_statemine_sr25519 | subkey sign --suri "YOUR SEED PHRASE"')),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},'"YOUR SEED PHRASE"')," is the seed phrase of the account that will be used to sign and\nauthenticate both the chain spec and later on the metadata. Running the code above will return a\nsignature similar to that below:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"0xc4ce72db959000b6166af96d3bda55a927fd837747bf1bf1ae8a69e57c9ef37c25a88707c47b105a9eb1fbcf9345680eff57eb978cf73919506f6c738834e78a")),(0,o.kt)("h4",{id:"signing-chain-spec"},"Signing Chain Spec"),(0,o.kt)("p",null,"Now, go back to the ",(0,o.kt)("inlineCode",{parentName:"p"},"/generate_message")," folder and type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"cargo run --release make --goal qr --crypto sr25519 --msg add-specs --payload sign_me_add_specs_statemine_sr25519 --verifier-hex PUBLIC KEY --signature-hex SIGNATURE")),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},"PUBLIC KEY")," is the public key of the account with seed ",(0,o.kt)("inlineCode",{parentName:"p"},'"YOUR SEED PHRASE"'),", and ",(0,o.kt)("inlineCode",{parentName:"p"},"SIGNATURE"),"\nis the signature generated in the previous step. Running the code above will create the file\n",(0,o.kt)("inlineCode",{parentName:"p"},"add_specs_statemine-sr25519")," under the ",(0,o.kt)("inlineCode",{parentName:"p"},"files/completed")," folder."),(0,o.kt)("h3",{id:"metadata-updates"},"Metadata Updates"),(0,o.kt)("p",null,"Similarly to what we did for the chain specification, we now generate and sign the Asset Hub\nmetadata."),(0,o.kt)("h4",{id:"metadata-qr-fountain"},"Metadata QR Fountain"),(0,o.kt)("p",null,"To update the chain metadata for the Asset Hub specs on the Vault app you can follow the\ninstructions\n",(0,o.kt)("a",{parentName:"p",href:"https://paritytech.github.io/parity-signer/tutorials/Add-New-Network.html#add-network-metadata"},"here"),".\nBriefly, in the Parity Signer repository, start the terminal within the ",(0,o.kt)("inlineCode",{parentName:"p"},"/generate_message")," folder\nand type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"cargo run load-metadata -d -u wss://kusama-asset-hub-rpc.polkadot.io")),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},"wss://kusama-asset-hub-rpc.polkadot.io")," is the Parity RPC endpoint for the Asset Hub on\nKusama. This will create the file ",(0,o.kt)("inlineCode",{parentName:"p"},"sign_me_load_metadata_statemineV9370")," under the\n",(0,o.kt)("inlineCode",{parentName:"p"},"files/in_progress")," folder. Note that for future metadata updates the file name will change as the\nversion at the time of writing was ",(0,o.kt)("inlineCode",{parentName:"p"},"V9370"),"."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Note that the name of the file changes according to the network version. That is, ",(0,o.kt)("inlineCode",{parentName:"p"},"????")," in\n",(0,o.kt)("inlineCode",{parentName:"p"},"sign_me_load_metadata_statemineV????")," will be the latest version at fetch time.")),(0,o.kt)("h4",{id:"generating-signature-1"},"Generating Signature"),(0,o.kt)("admonition",{title:"Use a hot account",type:"danger"},(0,o.kt)("p",{parentName:"admonition"},"Make sure that the account used to sign the metadata is a hot account. Never use a cold account from\nthe Vault app or Ledger, as after typing the seed phrase into the terminal that account will be\nconsidered hot.")),(0,o.kt)("p",null,"Start the terminal within the ",(0,o.kt)("inlineCode",{parentName:"p"},"files/in_progress")," folder and type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},'cat sign_me_load_metadata_statemineV9370 | subkey sign --suri "YOUR SEED PHRASE"')),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},'"YOUR SEED PHRASE"')," is the seed phrase of the account you used to sign the chain\nspecification. Running the code above will return a signature similar to that below:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"0xde1ad7aeb252acb3cf42a522dcc8dc3f317a49be2ed636836dd6df8f7e47135f2c712480055822eba87e9ea5ac7d3bba96045992ae795856fdf4eea09a411f85")),(0,o.kt)("admonition",{title:"Do not copy the code lines above",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Note that the name of the file changes according to the network version. That is, ",(0,o.kt)("inlineCode",{parentName:"p"},"????")," in\n",(0,o.kt)("inlineCode",{parentName:"p"},"sign_me_load_metadata_statemineV????")," will be the latest version at fetch time. So, do not copy the\ncode line above, but change the version with the appropriate one saved under the ",(0,o.kt)("inlineCode",{parentName:"p"},"files/in_progress"),"\nfolder. The signature changes as well.")),(0,o.kt)("h4",{id:"signing-metadata"},"Signing Metadata"),(0,o.kt)("p",null,"Now, go back to the ",(0,o.kt)("inlineCode",{parentName:"p"},"/generate_message")," folder and type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"cargo run --release make --goal qr --crypto sr25519 --msg load-metadata --payload sign_me_load_metadata_statemineV9370 --verifier-hex PUBLIC KEY --signature-hex SIGNATURE")),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},"PUBLIC KEY")," is the public key of the account with seed ",(0,o.kt)("inlineCode",{parentName:"p"},'"YOUR SEED PHRASE"'),", and ",(0,o.kt)("inlineCode",{parentName:"p"},"SIGNATURE"),"\nis the signature generated in the previous step. Running the code above will create the file\n",(0,o.kt)("inlineCode",{parentName:"p"},"load_metadata_statemineV9370")," under the ",(0,o.kt)("inlineCode",{parentName:"p"},"files/completed")," folder."),(0,o.kt)("h3",{id:"add-chain--update-metadata"},"Add Chain & Update Metadata"),(0,o.kt)("p",null,"You can open ",(0,o.kt)("inlineCode",{parentName:"p"},"add_specs_statemine-sr25519")," on your browser (just drag the file on an open tab). This\nis a .png file containing the QR code to add the Asset Hub chain specification into the Vault App.\nYou can do the same with the ",(0,o.kt)("inlineCode",{parentName:"p"},"load_metadata_statemineV9370"),". This is a .apng file containing the QR\ncode fountain to do the metadata update for the Asset Hub on Kusama."),(0,o.kt)("h3",{id:"metadata-portal"},"Metadata Portal"),(0,o.kt)("h4",{id:"modify-config-file"},"Modify ",(0,o.kt)("inlineCode",{parentName:"h4"},"config")," File"),(0,o.kt)("p",null,"Alternatively, you can add the chain specification QR code and the metadata QR code fountain in a\nmetadata portal. Briefly, fork the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/metadata-portal"},"Parity's Metadata Portal GitHub repository"),". You can\nmodify the following fields of the ",(0,o.kt)("inlineCode",{parentName:"p"},"config.toml")," file:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"name"),": your name / institution"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"public_key"),": the public key of the account you use to sign the chain spec and the metadata."),(0,o.kt)("li",{parentName:"ul"},"At the bottom of the file add the following information:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'[[chains]]\nname = "Statemine"\ntitle = "Kusama Asset Hub"\nrpc_endpoint = "wss://kusama-asset-hub-rpc.polkadot.io"\ncolor = "#f27230"\n\n[chains.github_release]\nowner = "paritytech"\nrepo = "statemint"\ngenesis_hash = "0x48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a"\n')),(0,o.kt)("p",null,"For each additional chain, you need to add the respective information. Information about the genesis\nhash can be found on the Polkadot-JS UI > connect to the relevant chain > Developer > Chain State."),(0,o.kt)("h4",{id:"rename-chains-files"},"Rename Chain's Files"),(0,o.kt)("p",null,"Rename the signed chain specification and metadata files as follow:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Chain specification: ",(0,o.kt)("inlineCode",{parentName:"p"},"add_specs_statemine-sr25519")," --\x3e ",(0,o.kt)("inlineCode",{parentName:"p"},"statemine_specs.png"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Metadata updates: ",(0,o.kt)("inlineCode",{parentName:"p"},"load_metadata_statemineV9370"),"--\x3e ",(0,o.kt)("inlineCode",{parentName:"p"},"statemine_metadata_9370.apng")))),(0,o.kt)("p",null,"Thus, for chain specification the file must be renamed to ",(0,o.kt)("inlineCode",{parentName:"p"},"chainName_specs.png")," while for metadata\nthe file must be renamed to ",(0,o.kt)("inlineCode",{parentName:"p"},"chainName_metadata_version.apng")," where ",(0,o.kt)("inlineCode",{parentName:"p"},"chainName")," is the name of the\nchain and ",(0,o.kt)("inlineCode",{parentName:"p"},"version")," is the version of the metadata."),(0,o.kt)("p",null,"Add the renamed files to the ",(0,o.kt)("inlineCode",{parentName:"p"},"/public/qr folder")," within the Metadata Portal repository."),(0,o.kt)("h4",{id:"run-portal"},"Run Portal"),(0,o.kt)("p",null,"Open the terminal within the Metadata Portal repository and run ",(0,o.kt)("inlineCode",{parentName:"p"},"make updater"),". Then run\n",(0,o.kt)("inlineCode",{parentName:"p"},"make collector"),"; this will create the ",(0,o.kt)("inlineCode",{parentName:"p"},"_latest.apng")," files for each of the chains (removed by the\ncommand ",(0,o.kt)("inlineCode",{parentName:"p"},"make cleaner"),"). Finally, run ",(0,o.kt)("inlineCode",{parentName:"p"},"yarn start")," to load the metadata portal on your localhost."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/dc36d550.79355b50.js b/assets/js/dc36d550.399f8361.js similarity index 92% rename from assets/js/dc36d550.79355b50.js rename to assets/js/dc36d550.399f8361.js index c0a769c7f4a4..a8a0d7b57f4e 100644 --- a/assets/js/dc36d550.79355b50.js +++ b/assets/js/dc36d550.399f8361.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4359],{3905:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>f});var n=r(67294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},m=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,a=e.originalType,l=e.parentName,m=o(e,["components","mdxType","originalType","parentName"]),d=s(r),p=i,f=d["".concat(l,".").concat(p)]||d[p]||u[p]||a;return r?n.createElement(f,c(c({ref:t},m),{},{components:r})):n.createElement(f,c({ref:t},m))}));function f(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=r.length,c=new Array(a);c[0]=p;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o[d]="string"==typeof e?e:i,c[1]=o;for(var s=2;s{r.d(t,{Z:()=>h});var n=r(67294),i=r(86010),a=r(53438),c=r(39960),o=r(13919),l=r(95999);const s={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function m(e){var t=e.href,r=e.children;return n.createElement(c.Z,{href:t,className:(0,i.Z)("card padding--lg",s.cardContainer)},r)}function d(e){var t=e.href,r=e.icon,a=e.title,c=e.description;return n.createElement(m,{href:t},n.createElement("h2",{className:(0,i.Z)("text--truncate",s.cardTitle),title:a},r," ",a),c&&n.createElement("p",{className:(0,i.Z)("text--truncate",s.cardDescription),title:c},c))}function u(e){var t,r=e.item,i=(0,a.Wl)(r);return i?n.createElement(d,{href:i,icon:"\ud83d\uddc3\ufe0f",title:r.label,description:null!=(t=r.description)?t:(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:r.items.length})}):null}function p(e){var t,r,i=e.item,c=(0,o.Z)(i.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,a.xz)(null!=(t=i.docId)?t:void 0);return n.createElement(d,{href:i.href,icon:c,title:i.label,description:null!=(r=i.description)?r:null==l?void 0:l.description})}function f(e){var t=e.item;switch(t.type){case"link":return n.createElement(p,{item:t});case"category":return n.createElement(u,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}function v(e){var t=e.className,r=(0,a.jA)();return n.createElement(h,{items:r.items,className:t})}function h(e){var t=e.items,r=e.className;if(!t)return n.createElement(v,e);var c=(0,a.MN)(t);return n.createElement("section",{className:(0,i.Z)("row",r)},c.map((function(e,t){return n.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},n.createElement(f,{item:e}))})))}},62252:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>v,frontMatter:()=>l,metadata:()=>m,toc:()=>u});var n=r(87462),i=r(63366),a=(r(67294),r(3905)),c=r(52991),o=["components"],l={id:"maintain-archive",title:"Maintain Archive",sidebar_label:"Archive",description:"Archive for the Maintain Section.",keywords:["Democracy","Council","Gov1","Councillor"],slug:"../maintain-archive"},s=void 0,m={unversionedId:"maintain/maintain-archive",id:"maintain/maintain-archive",title:"Maintain Archive",description:"Archive for the Maintain Section.",source:"@site/../docs/maintain/maintain-archive.md",sourceDirName:"maintain",slug:"/maintain-archive",permalink:"/docs/maintain-archive",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/maintain/maintain-archive.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710167319,formattedLastUpdatedAt:"Mar 11, 2024",frontMatter:{id:"maintain-archive",title:"Maintain Archive",sidebar_label:"Archive",description:"Archive for the Maintain Section.",keywords:["Democracy","Council","Gov1","Councillor"],slug:"../maintain-archive"},sidebar:"docs",previous:{title:"Validator Best Practices",permalink:"/docs/maintain-guides-avoid-slashing"},next:{title:"Participate in Democracy",permalink:"/docs/maintain/maintain-guides-democracy"}},d={},u=[],p={toc:u},f="wrapper";function v(e){var t=e.components,r=(0,i.Z)(e,o);return(0,a.kt)(f,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("div",{className:"sticky"},(0,a.kt)("br",null),(0,a.kt)("p",null,"This section contains archived pages. The content in them no longer applies to Polkadot but can\nstill be relevant for parachains and related projects.")),(0,a.kt)(c.Z,{mdxType:"DocCardList"}))}v.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4359],{3905:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>f});var n=r(67294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},m=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,a=e.originalType,l=e.parentName,m=o(e,["components","mdxType","originalType","parentName"]),d=s(r),p=i,f=d["".concat(l,".").concat(p)]||d[p]||u[p]||a;return r?n.createElement(f,c(c({ref:t},m),{},{components:r})):n.createElement(f,c({ref:t},m))}));function f(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=r.length,c=new Array(a);c[0]=p;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o[d]="string"==typeof e?e:i,c[1]=o;for(var s=2;s{r.d(t,{Z:()=>h});var n=r(67294),i=r(86010),a=r(53438),c=r(39960),o=r(13919),l=r(95999);const s={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function m(e){var t=e.href,r=e.children;return n.createElement(c.Z,{href:t,className:(0,i.Z)("card padding--lg",s.cardContainer)},r)}function d(e){var t=e.href,r=e.icon,a=e.title,c=e.description;return n.createElement(m,{href:t},n.createElement("h2",{className:(0,i.Z)("text--truncate",s.cardTitle),title:a},r," ",a),c&&n.createElement("p",{className:(0,i.Z)("text--truncate",s.cardDescription),title:c},c))}function u(e){var t,r=e.item,i=(0,a.Wl)(r);return i?n.createElement(d,{href:i,icon:"\ud83d\uddc3\ufe0f",title:r.label,description:null!=(t=r.description)?t:(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:r.items.length})}):null}function p(e){var t,r,i=e.item,c=(0,o.Z)(i.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,a.xz)(null!=(t=i.docId)?t:void 0);return n.createElement(d,{href:i.href,icon:c,title:i.label,description:null!=(r=i.description)?r:null==l?void 0:l.description})}function f(e){var t=e.item;switch(t.type){case"link":return n.createElement(p,{item:t});case"category":return n.createElement(u,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}function v(e){var t=e.className,r=(0,a.jA)();return n.createElement(h,{items:r.items,className:t})}function h(e){var t=e.items,r=e.className;if(!t)return n.createElement(v,e);var c=(0,a.MN)(t);return n.createElement("section",{className:(0,i.Z)("row",r)},c.map((function(e,t){return n.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},n.createElement(f,{item:e}))})))}},62252:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>v,frontMatter:()=>l,metadata:()=>m,toc:()=>u});var n=r(87462),i=r(63366),a=(r(67294),r(3905)),c=r(52991),o=["components"],l={id:"maintain-archive",title:"Maintain Archive",sidebar_label:"Archive",description:"Archive for the Maintain Section.",keywords:["Democracy","Council","Gov1","Councillor"],slug:"../maintain-archive"},s=void 0,m={unversionedId:"maintain/maintain-archive",id:"maintain/maintain-archive",title:"Maintain Archive",description:"Archive for the Maintain Section.",source:"@site/../docs/maintain/maintain-archive.md",sourceDirName:"maintain",slug:"/maintain-archive",permalink:"/docs/maintain-archive",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/maintain/maintain-archive.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"maintain-archive",title:"Maintain Archive",sidebar_label:"Archive",description:"Archive for the Maintain Section.",keywords:["Democracy","Council","Gov1","Councillor"],slug:"../maintain-archive"},sidebar:"docs",previous:{title:"Validator Best Practices",permalink:"/docs/maintain-guides-avoid-slashing"},next:{title:"Participate in Democracy",permalink:"/docs/maintain/maintain-guides-democracy"}},d={},u=[],p={toc:u},f="wrapper";function v(e){var t=e.components,r=(0,i.Z)(e,o);return(0,a.kt)(f,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("div",{className:"sticky",style:{zIndex:1}},(0,a.kt)("br",null),(0,a.kt)("p",null,"This section contains archived pages. The content in them no longer applies to Polkadot but can\nstill be relevant for parachains and related projects.")),(0,a.kt)(c.Z,{mdxType:"DocCardList"}))}v.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e495ca4d.1def4ea6.js b/assets/js/e495ca4d.1def4ea6.js deleted file mode 100644 index 4d79b5f21c31..000000000000 --- a/assets/js/e495ca4d.1def4ea6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8951],{3905:(e,t,o)=>{o.d(t,{Zo:()=>d,kt:()=>m});var n=o(67294);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function r(e){for(var t=1;t=0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var s=n.createContext({}),c=function(e){var t=n.useContext(s),o=t;return e&&(o="function"==typeof e?e(t):r(r({},t),e)),o},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var o=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=c(o),u=a,m=p["".concat(s,".").concat(u)]||p[u]||h[u]||i;return o?n.createElement(m,r(r({ref:t},d),{},{components:o})):n.createElement(m,r({ref:t},d))}));function m(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=o.length,r=new Array(i);r[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:a,r[1]=l;for(var c=2;c{o.r(t),o.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>m,frontMatter:()=>l,metadata:()=>c,toc:()=>p});var n=o(87462),a=o(63366),i=(o(67294),o(3905)),r=["components"],l={id:"maintain-guides-democracy",title:"Participate in Democracy",sidebar_label:"Participate in Democracy",description:"Steps on how to participate in democracy.",keywords:["democracy","council","action","proposal"],slug:"../maintain-guides-democracy"},s=void 0,c={unversionedId:"maintain/archive/maintain-guides-democracy",id:"maintain/archive/maintain-guides-democracy",title:"Participate in Democracy",description:"Steps on how to participate in democracy.",source:"@site/../docs/maintain/archive/maintain-guides-democracy.md",sourceDirName:"maintain/archive",slug:"/maintain/maintain-guides-democracy",permalink:"/docs/maintain/maintain-guides-democracy",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/maintain/archive/maintain-guides-democracy.md",tags:[],version:"current",lastUpdatedBy:"bader y",lastUpdatedAt:1711003964,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"maintain-guides-democracy",title:"Participate in Democracy",sidebar_label:"Participate in Democracy",description:"Steps on how to participate in democracy.",keywords:["democracy","council","action","proposal"],slug:"../maintain-guides-democracy"},sidebar:"docs",previous:{title:"Archive",permalink:"/docs/maintain-archive"},next:{title:"Join the Council",permalink:"/docs/maintain/maintain-guides-how-to-join-council"}},d={},p=[{value:"Important Parameters",id:"important-parameters",level:2},{value:"Proposing an Action",id:"proposing-an-action",level:2},{value:"Submitting a Preimage",id:"submitting-a-preimage",level:2},{value:"Endorsing a Proposal",id:"endorsing-a-proposal",level:2},{value:"Voting on a Proposal",id:"voting-on-a-proposal",level:2},{value:"Unlocking Locked Tokens",id:"unlocking-locked-tokens",level:2},{value:"With a Ledger hardware wallet or Unlocking Very Old Locks",id:"with-a-ledger-hardware-wallet-or-unlocking-very-old-locks",level:4},{value:"Delegate a Vote",id:"delegate-a-vote",level:2},{value:"Undelegate a Vote",id:"undelegate-a-vote",level:2},{value:"Voting with a Governance Proxy",id:"voting-with-a-governance-proxy",level:2},{value:"Interpreting On-Chain Voting Data",id:"interpreting-on-chain-voting-data",level:2}],h={toc:p},u="wrapper";function m(e){var t=e.components,l=(0,a.Z)(e,r);return(0,i.kt)(u,(0,n.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("div",{className:"sticky"},(0,i.kt)("br",null),(0,i.kt)("p",null,"The content on this page is archived. For up-to-date information about governance, see the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},"Polkadot OpenGov page"),".")),(0,i.kt)("p",null,"The public referenda chamber is one of the three bodies of on-chain governance as it's instantiated\nin Polkadot and Kusama. The other two bodies are the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain/maintain-guides-how-to-join-council"},"council")," and the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn/learn-governance#technical-committee"},"technical committee"),"."),(0,i.kt)("p",null,"Public referenda can be proposed and voted on by any token holder in the system as long as they\nprovide a bond. After a proposal is made, others can agree with it by ",(0,i.kt)("em",{parentName:"p"},"endorsing")," it and putting up\ntokens equal to the original bond. During every launch period, the most endorsed proposal will be\nmoved to the public referenda table where it can be voted upon. Voters who are willing to lock up\ntheir tokens for a greater duration of time can do so and get their votes amplified. For more\ndetails on the governance system please see ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn/learn-governance"},"here"),"."),(0,i.kt)("p",null,"This guide will instruct token holders how to propose and vote on public referenda using the\nDemocracy module. Below are a few links to stay informed and directly engage with the community."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction")," - a place to discuss\ngovernance and the future of Polkadot."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Kusama-Direction:parity.io"},"Kusama Direction")," - a place to discuss\ngovernance and the future of Kusama."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.polkassembly.io"},"Polkadot")," and ",(0,i.kt)("a",{parentName:"li",href:"https://kusama.polkassembly.io"},"Kusama"),"\nPolkassembly - for current referenda, latest proposals, motions, treasury proposals, tips,\nbounties, and more."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://matrix.to/#/#dailydigest:web3.foundation"},"Polkadot Daily Digest")," - News about what is\nhappening in the Polkadot ecosystem, published every weekday except holidays.")),(0,i.kt)("h2",{id:"important-parameters"},"Important Parameters"),(0,i.kt)("p",null,"The important parameters to be aware of when voting using the Democracy module are as follows:"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Launch Period")," - How often new public referenda are launched."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Voting Period")," - How often votes for referenda are tallied."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Emergency Voting Period")," - The minimum voting period for a fast-tracked emergency referendum."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Minimum Deposit")," - The minimum amount to be used as a deposit for a public referendum proposal."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Enactment Period")," - The minimum period for locking funds ",(0,i.kt)("em",{parentName:"p"},"and")," the period between a proposal\nbeing approved and enacted."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Cooloff Period")," - The period in blocks where a proposal may not be re-submitted after being\nvetoed."),(0,i.kt)("h2",{id:"proposing-an-action"},"Proposing an Action"),(0,i.kt)("p",null,'Proposing an action to be taken requires you to bond some tokens. In order to ensure you have enough\ntokens to make the minimum deposit, you can check the parameter in the chain state. Navigate to\nDeveloper > Chain State > Constants > selected constant query: democracy > minimumDeposit: u128 and\nthen click on the plus button. The bonded tokens will only be released once the proposal is tabled\n(that is, brought to a vote); there is no way for the user to "revoke" their proposal and get the\nbond back before it has become a referendum. Since it is essentially impossible to predict\ndefinitely when a proposal may become a referendum (if ever), this means that any tokens bonded will\nbe locked for an indeterminate amount of time.'),(0,i.kt)("admonition",{title:"Proposals cannot be revoked by the proposer, even if they never turn into a referendum",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"It is important to realize that there is no guarantee that DOT you use for proposing or endorsing a\nproposal will be returned to that account in any given timeframe.")),(0,i.kt)("p",null,'order to submit a proposal, you will need to submit what\'s called the preimage hash. The preimage\nhash is simply the hash of the proposal to be enacted. The easiest way to get the preimage hash is\nby clicking on the "Submit preimage" button and configuring the action that you are proposing.'),(0,i.kt)("p",null,"The example below demonstrates the creation of a proposal on Kusama (",(0,i.kt)("strong",{parentName:"p"},"the same procedure applies to\nPolkadot"),'). If you wanted to propose that a remark "Expect Chaos!" is added, the preimage hash\nwould be ',(0,i.kt)("inlineCode",{parentName:"p"},"0x8ac3f722caf7677254e25ca4ad77d533ca893c7d2ad4009e258d749f2004ef94"),". You can copy this\npreimage hash and save it for the next step. There is no need to click Submit Preimage at this\npoint, though you could. We'll go over that in the next section."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"submit preimage",src:o(71214).Z,width:"1182",height:"526"})),(0,i.kt)("p",null,'Now you will click on the "Submit proposal" button and enter the preimage hash in the input titled\n"preimage hash" and ',(0,i.kt)("em",{parentName:"p"},"at least"),' the minimum deposit into the "locked balance" field. Click on the\n"Submit proposal" button and confirm the transaction. You should now see your proposal appear in the\n"proposals" column on the page.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"submit proposal",src:o(95545).Z,width:"1184",height:"456"})),(0,i.kt)("p",null,"Now your proposal is visible to anyone who accesses the chain and others can endorse it or submit a\npreimage. However, it's hard to tell what exactly this proposal does since it shows the hash of the\naction. Other holders will not be able to make a judgement on whether they endorse it or not until\nsomeone submits the actual preimage for this proposal. In the next step, you will submit the\npreimage."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"proposal hash",src:o(70657).Z,width:"1424",height:"276"})),(0,i.kt)("h2",{id:"submitting-a-preimage"},"Submitting a Preimage"),(0,i.kt)("p",null,"The act of making a proposal is split from submitting the preimage for the proposal since the\nstorage cost of submitting a large preimage could be pretty expensive. Allowing for the preimage\nsubmission to come as a separate transaction means that another account could submit the preimage\nfor you if you don't have the funds to do so. It also means that you don't have to pay so many funds\nright away as you can prove the preimage hash out-of-band."),(0,i.kt)("p",null,"However, at some point before the proposal passes you will need to submit the preimage or else the\nproposal cannot be enacted. The guide will now show you how to do this."),(0,i.kt)("p",null,'Click on the blue "Submit preimage" button and configure it to be the same as what you did before to\nacquire the preimage hash. This time, instead of copying the hash to another tab, you will follow\nthrough and click "Submit preimage" and confirm the transaction.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"submit preimage",src:o(71214).Z,width:"1182",height:"526"})),(0,i.kt)("p",null,"Once the transaction is included you should see the UI update with the information for your already\nsubmitted proposal."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"proposals",src:o(60580).Z,width:"1424",height:"276"})),(0,i.kt)("h2",{id:"endorsing-a-proposal"},"Endorsing a Proposal"),(0,i.kt)("p",null,"Endorsing a proposal means that you are agreeing with the proposal and backing it with an equal\namount of deposit as was originally locked. The bonded tokens will be released once the proposal is\ntabled (that is, brought to a vote), just like the original proposer's bond. By endorsing a proposal\nyou will move it higher up the rank of proposals. The most endorsed proposal ","\u2014"," in value, not\nthe number of supporters ","\u2014"," will be brought to a referendum every launch period."),(0,i.kt)("p",null,"It is important to note that there is no way to stop or cancel endorsing a proposal once it has been\ndone. Therefore, the DOT that was endorsed will be reserved until the proposal is tabled as a\nreferendum. This is an indeterminate amount of time, since there is no guarantee that a proposal\nwill become a referendum for a given period, as other proposals may be proposed and tabled before\nit."),(0,i.kt)("p",null,"Note that it is possible for a single account to endorse a proposal multiple times. This is by\ndesign; it is the value, not the number of endorsements ",(0,i.kt)("em",{parentName:"p"},"per se"),", that counts in terms of weighting.\nIf there were a limit of one endorsement per account, it would be trivial for a user with, for\nexample, 1000 DOT to create ten accounts with 100 DOT instead of a single account with 1000 DOT.\nThus, no restrictions are made on the number of times a single account can endorse a proposal."),(0,i.kt)("p",null,'To endorse a proposal, navigate to the proposal you want to endorse and click on the "Endorse"\nbutton.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"endorsement button",src:o(16014).Z,width:"1440",height:"128"})),(0,i.kt)("p",null,'You will be prompted with the full details of the proposal (if the preimage has been submitted!) and\ncan then broadcast the transaction by clicking the blue "Endorse" button.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"endorsement confirmed",src:o(50937).Z,width:"1184",height:"356"})),(0,i.kt)("p",null,"Once successful, you will see your endorsement appear in the dropdown in the proposal details."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"endorsement result",src:o(33346).Z,width:"1440",height:"336"})),(0,i.kt)("h2",{id:"voting-on-a-proposal"},"Voting on a Proposal"),(0,i.kt)("p",null,"At the end of each launch period, the most endorsed proposal will move to a referendum. During this\ntime you can cast a vote for or against the proposal. You may also lock up your tokens for a greater\nlength of time to weigh your vote more strongly. During the time your tokens are locked, you are\nunable to transfer them, however they can still be used for further votes. Locks are layered on top\nof each other, so an eight-week lock does not become a 15-week lock if you vote again a week later,\nrather another eight-week lock is placed to extend the lock just one extra week."),(0,i.kt)("admonition",{title:"Voting and staking locks can overlap",type:"info"},(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},"A user can use staked funds to vote on referenda (and/or to vote for Councillors)."),(0,i.kt)("li",{parentName:"ul"},"A user is only prohibited from transferring these funds to another account."))),(0,i.kt)("p",null,"To vote on a referendum, navigate to the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/democracy/"},'"Democracy" tab of Polkadot Apps'),'. Any active referendum\nwill show in the "referenda" column. Click the blue button "Vote" to cast a vote for the referendum.'),(0,i.kt)("p",null,'If you would like to cast your vote for the proposal select the "Aye, I approve" option. If you\nwould like to cast your vote against the proposal in the referendum you will select "Nay, I do not\napprove" option.'),(0,i.kt)("p",null,"The endorsement option is to select your conviction for this vote. The longer you are willing to\nlock your tokens, the stronger your vote will be weighted. The timeline for the conviction starts\nafter the voting period ends; tokens used for voting will always be locked until the end of the\nvoting period, no matter what conviction you vote with. Unwillingness to lock your tokens means that\nyour vote only counts for 10% of the tokens that you hold, while the maximum lock-up of 896 days\nmeans you can make your vote count for 600% of the tokens that you hold. It is possible to vote with\ntokens already locked by staking."),(0,i.kt)("p",null,'When you are comfortable with the decision you have made, click the blue "Vote" button to submit\nyour transaction and wait for it to be included in a block.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"voting",src:o(76544).Z,width:"940",height:"712"})),(0,i.kt)("h2",{id:"unlocking-locked-tokens"},"Unlocking Locked Tokens"),(0,i.kt)("p",null,"Like ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-DOT#lazy-vesting"},"vesting"),", the tokens that are locked in democracy are\nunlocked lazily. This means that you, the user, must explicitly call an unlock extrinsic to make\nyour funds available again after the lock expires. Unbonding is another term you hear a lot in\nPolkadot, it means withdrawing your DOT that was used in staking. To know more about it, please see\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nominator"},"here"),"."),(0,i.kt)("p",null,'You can do this from the "Accounts" page in\n',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Polkadot-JS Apps"),', unless you use Ledger (see below).\nFirst, check that your account has a "democracy" lock by opening the details on your balance. In the\nexample below the account has 150 KSM locked in democracy.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"democracy balance details",src:o(41451).Z,width:"342",height:"214"})),(0,i.kt)("p",null,'Now you can click the menu button (the three dots) and find the option that says "Clear expired\ndemocracy locks". After selecting this option you may confirm the transaction and your locks will be\ncleared when successful.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"democracy clear locks",src:o(99381).Z,width:"366",height:"933"})),(0,i.kt)("h4",{id:"with-a-ledger-hardware-wallet-or-unlocking-very-old-locks"},"With a Ledger hardware wallet or Unlocking Very Old Locks"),(0,i.kt)("p",null,"If you do not see an option to clear expired democracy votes, it may be that the lock is very old.\nOr, if you are using the Ledger hardware wallet, you will not be able to issue the batch Unlock\naction from the UI."),(0,i.kt)("p",null,"Instead, you must clear the lock by directly issuing the correct extrinsics."),(0,i.kt)("p",null,"Navigate to the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Extrinsics page")," and submit the\nfollowing extrinsic: ",(0,i.kt)("inlineCode",{parentName:"p"},"democracy.removeVote(index)"),' using the account that you voted with. For the\nindex number (ReferendumIndex), enter the number of the referendum for which you voted ("12" in the\nimage below).'),(0,i.kt)("p",null,"The number of the referendum for which you voted is visible in an explorer such as Subscan."),(0,i.kt)("p",null,'You need to press the "Submit Transaction" button to submit the extrinsic.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"democracy clear_lock_extrinsic_1",src:o(33022).Z,width:"871",height:"234"})),(0,i.kt)("p",null,"Now submit the following extrinsic: `democracy.unlock(target), where the target is your account\naddress."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"democracy clear_lock_extrinsic_2",src:o(5066).Z,width:"869",height:"237"})),(0,i.kt)("p",null,"If you return to the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Accounts page"),", you should see that\nthe democracy lock has been released."),(0,i.kt)("p",null,"Note that this applies only to locked DOT that were used for voting on referenda. In order to unlock\nDOT locked by voting for members of the Polkadot Council, you need to go to the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/council"},"Council"),' page, click "Vote", and then click on "Unvote\nAll".'),(0,i.kt)("h2",{id:"delegate-a-vote"},"Delegate a Vote"),(0,i.kt)("p",null,"If you are too busy to keep up and vote on upcoming referenda, there is an option to delegate your\nvote to another account whose opinion you trust. When you delegate to another account, that account\ngets the added voting power of your tokens along with the conviction that you set. The conviction\nfor delegation works just like the conviction for regular voting, except your tokens may be locked\nlonger than they would normally since locking resets when you undelegate your vote."),(0,i.kt)("p",null,"The account that is being delegated to does not make any special action once the delegation is in\nplace. They can continue to vote on referenda how they see fit. The difference is now when the\nDemocracy system tallies votes, the delegated tokens now are added to whatever vote the delegatee\nhas made."),(0,i.kt)("p",null,'You can delegate your vote to another account and even attach a "Conviction" to the delegation.\nNavigate to the ',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},'"Accounts" tab on Polkadot-JS UI'),' and\nclick on the three vertical dots and select "Delegate democracy votes" option for the account of\nyour choice. Then you would be presented with a pop-up window which lets you enter the account\ndetails of the delegated account, delegated amount and conviction. You can enter the relevant\ndetails and click on the delegate button and then sign and submit the transaction.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"delegate",src:o(40639).Z,width:"1880",height:"724"})),(0,i.kt)("p",null,"Your delegation will count toward whatever account you delegated for votes on until you explicitly\nundelegate your vote."),(0,i.kt)("admonition",{title:"Query the chain state for an account's delegation preferences",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"It is possible to query the delegation preferences of any actively delegating account on the network\nthrough ",(0,i.kt)("inlineCode",{parentName:"p"},"democracy.votingOf")," extrinsic."),(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("img",{alt:"query delegation",src:o(83181).Z,width:"2002",height:"992"}))),(0,i.kt)("h2",{id:"undelegate-a-vote"},"Undelegate a Vote"),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"If there is an existing lock due to a previous delegation change or undelegation, any new change or\nundelegation will restart the lock period for the larger DOT amount and the longest conviction\nperiod between the existing and the new lock."),(0,i.kt)("p",{parentName:"admonition"},"This will only matter to accounts with conviction, as the accounts with no conviction don't have any\nlock period."),(0,i.kt)("p",{parentName:"admonition"},"Examples:"),(0,i.kt)("ol",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Delegate 500 DOT with 1x conviction, then change delegation to 1000 DOT with 1x conviction, the\nlock period will reset for 1000 DOT with 1x conviction.")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Delegate 500 DOT with 3x conviction, then change the delegation to 1000 DOT with 1x conviction,\nthe lock period will reset for 1000 DOT with 3x conviction.")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Delegate 500 DOT with 1x conviction, then change the delegation to 200 DOT with 1x conviction,\nthe lock period will reset for 500 DOT with 1x conviction."))),(0,i.kt)("p",{parentName:"admonition"},"To understand this in further detail checkout\n",(0,i.kt)("a",{parentName:"p",href:"https://substrate.stackexchange.com/questions/5067/delegating-and-undelegating-during-the-lock-period-extends-it-for-the-initial-am"},"this stackexchange post."))),(0,i.kt)("p",null,'You may decide at some point in the future to remove your delegation to a target account. In this\ncase, your tokens will be locked for the maximum amount of time in accordance with the conviction\nyou set at the beginning of the delegation. For example, if you chose "2x" delegation for four weeks\nof lock-up time, your tokens will be locked for 4 weeks after sending the ',(0,i.kt)("inlineCode",{parentName:"p"},"undelegate")," transaction.\nOnce your vote has been undelegated, you are in control of making votes with it once again. You can\nstart to vote directly, or choose a different account to act as your delegate."),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"undelegate")," transaction must be sent from the account that you wish to clear of its delegation.\nFor example, if Alice has delegated her tokens to Bob, Alice would need to be the one to call the\n",(0,i.kt)("inlineCode",{parentName:"p"},"undelegate")," transaction to clear her delegation."),(0,i.kt)("p",null,"The easiest way to do this is from the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},'"Accounts" tab on Polkadot-JS UI')," where you can manage the\ndelegation of your account."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"manage delegation",src:o(43339).Z,width:"1990",height:"224"})),(0,i.kt)("p",null,"When you click on \"manage delegation\", you would be presented with a pre-populated pop-up window\nwith that account's delegation preferences. Here, you have an option to undelegate or save the\nmodifications made to the account's delegation preferences."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"undelegate",src:o(55002).Z,width:"1884",height:"732"})),(0,i.kt)("h2",{id:"voting-with-a-governance-proxy"},"Voting with a Governance Proxy"),(0,i.kt)("p",null,'Making a vote on behalf of a stash requires a "proxy" transaction from the Proxy pallet. When you\nchoose this transaction from the "Extrinsics" tab, it will let you select "vote" from the Democracy\npallet, and you will specify the index of the referendum that is being voted, the judgement (i.e.\n"Aye" for approval or "Nay" for rejection), and the conviction, just like a normal vote.'),(0,i.kt)("p",null,"For more material on adding and removing Governance proxies, as well as other types, please see the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-proxies"},"Proxy page"),"."),(0,i.kt)("h2",{id:"interpreting-on-chain-voting-data"},"Interpreting On-Chain Voting Data"),(0,i.kt)("p",null,"Consider the following example showcasing how votes would be displayed on a block explorer."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"Nay 0.1x => 0\nNay 1x => 1\nNay 2x => 2\nNay 3x => 3\nNay 4x => 4\nNay 5x => 5\nNay 6x => 6\nAye 0.1x => 128\nAye 1x => 129\nAye 2x => 130\nAye 3x => 131\nAye 4x => 132\nAye 5x => 133\nAye 6x => 134\n")),(0,i.kt)("p",null,'At first glance, it may be difficult to interpret what you voted on. We need to take a step back and\nconsider the "voting data" at the binary level.'),(0,i.kt)("p",null,"The vote is stored as a byte using a bitfield data structure and displayed on the block explorer as\na decimal integer. The bitfield stores both the conviction and aye/nay boolean, where the boolean is\nrepresented using the MSB of the byte. This would mean that the grouping of the 7 remaining bits is\nused to store the conviction."))}m.isMDXComponent=!0},40639:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/delegate-vote-a8b4d534e0e004f8d0d4a32a45f3a77a.png"},50937:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/endorse-7e22987ceebef0c1ce17f475510eacc9.png"},16014:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/endorse1-6f9ed6c3eb99cad52bd07e250307b397.png"},33346:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/endorsed-list-460b771aedaf6e91f9caaaf728d76dfd.png"},43339:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/manage-delegation-19501197d96e688a08f257a1443f18cd.png"},70657:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/proposal-hash-1ae67063393c7e77001e538b9d4a67af.png"},60580:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/proposals-9b3cc3a8bd2ff1c01c0dbc7c90950d3f.png"},83181:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/query-delegation-fece7720f6282de8928688d61ee38477.png"},71214:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/submit_preimage-b0165c4aa5615a416bc1698ff21cba2e.png"},95545:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/submit_proposal-24cc24bb4fdb502da80a28082f779da8.png"},55002:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/undelegate-save-002a17067954a098e2942aa1a7583698.png"},76544:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/voting-4abb1178436833648da30b63d860aa10.png"},41451:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/democracy_balance_details-56b5c71fe66fc4a0d66ba4820a3cc6a9.png"},33022:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/democracy_clear_lock_extrinsic_1-c42556da5e59023abb388eac1a12aee2.png"},5066:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/democracy_clear_lock_extrinsic_2-f6a313a6755d15eb6ab26d33edb80a72.png"},99381:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/democracy_clear_locks-028d6202e19ad4410e07a5da8bb69277.png"}}]); \ No newline at end of file diff --git a/assets/js/e495ca4d.541dd60b.js b/assets/js/e495ca4d.541dd60b.js new file mode 100644 index 000000000000..a4bb97291417 --- /dev/null +++ b/assets/js/e495ca4d.541dd60b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8951],{3905:(e,t,o)=>{o.d(t,{Zo:()=>d,kt:()=>m});var n=o(67294);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function r(e){for(var t=1;t=0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var s=n.createContext({}),c=function(e){var t=n.useContext(s),o=t;return e&&(o="function"==typeof e?e(t):r(r({},t),e)),o},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var o=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=c(o),u=a,m=p["".concat(s,".").concat(u)]||p[u]||h[u]||i;return o?n.createElement(m,r(r({ref:t},d),{},{components:o})):n.createElement(m,r({ref:t},d))}));function m(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=o.length,r=new Array(i);r[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:a,r[1]=l;for(var c=2;c{o.r(t),o.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>m,frontMatter:()=>l,metadata:()=>c,toc:()=>p});var n=o(87462),a=o(63366),i=(o(67294),o(3905)),r=["components"],l={id:"maintain-guides-democracy",title:"Participate in Democracy",sidebar_label:"Participate in Democracy",description:"Steps on how to participate in democracy.",keywords:["democracy","council","action","proposal"],slug:"../maintain-guides-democracy"},s=void 0,c={unversionedId:"maintain/archive/maintain-guides-democracy",id:"maintain/archive/maintain-guides-democracy",title:"Participate in Democracy",description:"Steps on how to participate in democracy.",source:"@site/../docs/maintain/archive/maintain-guides-democracy.md",sourceDirName:"maintain/archive",slug:"/maintain/maintain-guides-democracy",permalink:"/docs/maintain/maintain-guides-democracy",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/maintain/archive/maintain-guides-democracy.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"maintain-guides-democracy",title:"Participate in Democracy",sidebar_label:"Participate in Democracy",description:"Steps on how to participate in democracy.",keywords:["democracy","council","action","proposal"],slug:"../maintain-guides-democracy"},sidebar:"docs",previous:{title:"Archive",permalink:"/docs/maintain-archive"},next:{title:"Join the Council",permalink:"/docs/maintain/maintain-guides-how-to-join-council"}},d={},p=[{value:"Important Parameters",id:"important-parameters",level:2},{value:"Proposing an Action",id:"proposing-an-action",level:2},{value:"Submitting a Preimage",id:"submitting-a-preimage",level:2},{value:"Endorsing a Proposal",id:"endorsing-a-proposal",level:2},{value:"Voting on a Proposal",id:"voting-on-a-proposal",level:2},{value:"Unlocking Locked Tokens",id:"unlocking-locked-tokens",level:2},{value:"With a Ledger hardware wallet or Unlocking Very Old Locks",id:"with-a-ledger-hardware-wallet-or-unlocking-very-old-locks",level:4},{value:"Delegate a Vote",id:"delegate-a-vote",level:2},{value:"Undelegate a Vote",id:"undelegate-a-vote",level:2},{value:"Voting with a Governance Proxy",id:"voting-with-a-governance-proxy",level:2},{value:"Interpreting On-Chain Voting Data",id:"interpreting-on-chain-voting-data",level:2}],h={toc:p},u="wrapper";function m(e){var t=e.components,l=(0,a.Z)(e,r);return(0,i.kt)(u,(0,n.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("div",{className:"sticky",style:{zIndex:1}},(0,i.kt)("br",null),(0,i.kt)("p",null,"The content on this page is archived. For up-to-date information about governance, see the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},"Polkadot OpenGov page"),".")),(0,i.kt)("p",null,"The public referenda chamber is one of the three bodies of on-chain governance as it's instantiated\nin Polkadot and Kusama. The other two bodies are the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain/maintain-guides-how-to-join-council"},"council")," and the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn/learn-governance#technical-committee"},"technical committee"),"."),(0,i.kt)("p",null,"Public referenda can be proposed and voted on by any token holder in the system as long as they\nprovide a bond. After a proposal is made, others can agree with it by ",(0,i.kt)("em",{parentName:"p"},"endorsing")," it and putting up\ntokens equal to the original bond. During every launch period, the most endorsed proposal will be\nmoved to the public referenda table where it can be voted upon. Voters who are willing to lock up\ntheir tokens for a greater duration of time can do so and get their votes amplified. For more\ndetails on the governance system please see ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn/learn-governance"},"here"),"."),(0,i.kt)("p",null,"This guide will instruct token holders how to propose and vote on public referenda using the\nDemocracy module. Below are a few links to stay informed and directly engage with the community."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction")," - a place to discuss\ngovernance and the future of Polkadot."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Kusama-Direction:parity.io"},"Kusama Direction")," - a place to discuss\ngovernance and the future of Kusama."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.polkassembly.io"},"Polkadot")," and ",(0,i.kt)("a",{parentName:"li",href:"https://kusama.polkassembly.io"},"Kusama"),"\nPolkassembly - for current referenda, latest proposals, motions, treasury proposals, tips,\nbounties, and more."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://matrix.to/#/#dailydigest:web3.foundation"},"Polkadot Daily Digest")," - News about what is\nhappening in the Polkadot ecosystem, published every weekday except holidays.")),(0,i.kt)("h2",{id:"important-parameters"},"Important Parameters"),(0,i.kt)("p",null,"The important parameters to be aware of when voting using the Democracy module are as follows:"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Launch Period")," - How often new public referenda are launched."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Voting Period")," - How often votes for referenda are tallied."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Emergency Voting Period")," - The minimum voting period for a fast-tracked emergency referendum."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Minimum Deposit")," - The minimum amount to be used as a deposit for a public referendum proposal."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Enactment Period")," - The minimum period for locking funds ",(0,i.kt)("em",{parentName:"p"},"and")," the period between a proposal\nbeing approved and enacted."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Cooloff Period")," - The period in blocks where a proposal may not be re-submitted after being\nvetoed."),(0,i.kt)("h2",{id:"proposing-an-action"},"Proposing an Action"),(0,i.kt)("p",null,'Proposing an action to be taken requires you to bond some tokens. In order to ensure you have enough\ntokens to make the minimum deposit, you can check the parameter in the chain state. Navigate to\nDeveloper > Chain State > Constants > selected constant query: democracy > minimumDeposit: u128 and\nthen click on the plus button. The bonded tokens will only be released once the proposal is tabled\n(that is, brought to a vote); there is no way for the user to "revoke" their proposal and get the\nbond back before it has become a referendum. Since it is essentially impossible to predict\ndefinitely when a proposal may become a referendum (if ever), this means that any tokens bonded will\nbe locked for an indeterminate amount of time.'),(0,i.kt)("admonition",{title:"Proposals cannot be revoked by the proposer, even if they never turn into a referendum",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"It is important to realize that there is no guarantee that DOT you use for proposing or endorsing a\nproposal will be returned to that account in any given timeframe.")),(0,i.kt)("p",null,'order to submit a proposal, you will need to submit what\'s called the preimage hash. The preimage\nhash is simply the hash of the proposal to be enacted. The easiest way to get the preimage hash is\nby clicking on the "Submit preimage" button and configuring the action that you are proposing.'),(0,i.kt)("p",null,"The example below demonstrates the creation of a proposal on Kusama (",(0,i.kt)("strong",{parentName:"p"},"the same procedure applies to\nPolkadot"),'). If you wanted to propose that a remark "Expect Chaos!" is added, the preimage hash\nwould be ',(0,i.kt)("inlineCode",{parentName:"p"},"0x8ac3f722caf7677254e25ca4ad77d533ca893c7d2ad4009e258d749f2004ef94"),". You can copy this\npreimage hash and save it for the next step. There is no need to click Submit Preimage at this\npoint, though you could. We'll go over that in the next section."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"submit preimage",src:o(71214).Z,width:"1182",height:"526"})),(0,i.kt)("p",null,'Now you will click on the "Submit proposal" button and enter the preimage hash in the input titled\n"preimage hash" and ',(0,i.kt)("em",{parentName:"p"},"at least"),' the minimum deposit into the "locked balance" field. Click on the\n"Submit proposal" button and confirm the transaction. You should now see your proposal appear in the\n"proposals" column on the page.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"submit proposal",src:o(95545).Z,width:"1184",height:"456"})),(0,i.kt)("p",null,"Now your proposal is visible to anyone who accesses the chain and others can endorse it or submit a\npreimage. However, it's hard to tell what exactly this proposal does since it shows the hash of the\naction. Other holders will not be able to make a judgement on whether they endorse it or not until\nsomeone submits the actual preimage for this proposal. In the next step, you will submit the\npreimage."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"proposal hash",src:o(70657).Z,width:"1424",height:"276"})),(0,i.kt)("h2",{id:"submitting-a-preimage"},"Submitting a Preimage"),(0,i.kt)("p",null,"The act of making a proposal is split from submitting the preimage for the proposal since the\nstorage cost of submitting a large preimage could be pretty expensive. Allowing for the preimage\nsubmission to come as a separate transaction means that another account could submit the preimage\nfor you if you don't have the funds to do so. It also means that you don't have to pay so many funds\nright away as you can prove the preimage hash out-of-band."),(0,i.kt)("p",null,"However, at some point before the proposal passes you will need to submit the preimage or else the\nproposal cannot be enacted. The guide will now show you how to do this."),(0,i.kt)("p",null,'Click on the blue "Submit preimage" button and configure it to be the same as what you did before to\nacquire the preimage hash. This time, instead of copying the hash to another tab, you will follow\nthrough and click "Submit preimage" and confirm the transaction.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"submit preimage",src:o(71214).Z,width:"1182",height:"526"})),(0,i.kt)("p",null,"Once the transaction is included you should see the UI update with the information for your already\nsubmitted proposal."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"proposals",src:o(60580).Z,width:"1424",height:"276"})),(0,i.kt)("h2",{id:"endorsing-a-proposal"},"Endorsing a Proposal"),(0,i.kt)("p",null,"Endorsing a proposal means that you are agreeing with the proposal and backing it with an equal\namount of deposit as was originally locked. The bonded tokens will be released once the proposal is\ntabled (that is, brought to a vote), just like the original proposer's bond. By endorsing a proposal\nyou will move it higher up the rank of proposals. The most endorsed proposal ","\u2014"," in value, not\nthe number of supporters ","\u2014"," will be brought to a referendum every launch period."),(0,i.kt)("p",null,"It is important to note that there is no way to stop or cancel endorsing a proposal once it has been\ndone. Therefore, the DOT that was endorsed will be reserved until the proposal is tabled as a\nreferendum. This is an indeterminate amount of time, since there is no guarantee that a proposal\nwill become a referendum for a given period, as other proposals may be proposed and tabled before\nit."),(0,i.kt)("p",null,"Note that it is possible for a single account to endorse a proposal multiple times. This is by\ndesign; it is the value, not the number of endorsements ",(0,i.kt)("em",{parentName:"p"},"per se"),", that counts in terms of weighting.\nIf there were a limit of one endorsement per account, it would be trivial for a user with, for\nexample, 1000 DOT to create ten accounts with 100 DOT instead of a single account with 1000 DOT.\nThus, no restrictions are made on the number of times a single account can endorse a proposal."),(0,i.kt)("p",null,'To endorse a proposal, navigate to the proposal you want to endorse and click on the "Endorse"\nbutton.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"endorsement button",src:o(16014).Z,width:"1440",height:"128"})),(0,i.kt)("p",null,'You will be prompted with the full details of the proposal (if the preimage has been submitted!) and\ncan then broadcast the transaction by clicking the blue "Endorse" button.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"endorsement confirmed",src:o(50937).Z,width:"1184",height:"356"})),(0,i.kt)("p",null,"Once successful, you will see your endorsement appear in the dropdown in the proposal details."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"endorsement result",src:o(33346).Z,width:"1440",height:"336"})),(0,i.kt)("h2",{id:"voting-on-a-proposal"},"Voting on a Proposal"),(0,i.kt)("p",null,"At the end of each launch period, the most endorsed proposal will move to a referendum. During this\ntime you can cast a vote for or against the proposal. You may also lock up your tokens for a greater\nlength of time to weigh your vote more strongly. During the time your tokens are locked, you are\nunable to transfer them, however they can still be used for further votes. Locks are layered on top\nof each other, so an eight-week lock does not become a 15-week lock if you vote again a week later,\nrather another eight-week lock is placed to extend the lock just one extra week."),(0,i.kt)("admonition",{title:"Voting and staking locks can overlap",type:"info"},(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},"A user can use staked funds to vote on referenda (and/or to vote for Councillors)."),(0,i.kt)("li",{parentName:"ul"},"A user is only prohibited from transferring these funds to another account."))),(0,i.kt)("p",null,"To vote on a referendum, navigate to the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/democracy/"},'"Democracy" tab of Polkadot Apps'),'. Any active referendum\nwill show in the "referenda" column. Click the blue button "Vote" to cast a vote for the referendum.'),(0,i.kt)("p",null,'If you would like to cast your vote for the proposal select the "Aye, I approve" option. If you\nwould like to cast your vote against the proposal in the referendum you will select "Nay, I do not\napprove" option.'),(0,i.kt)("p",null,"The endorsement option is to select your conviction for this vote. The longer you are willing to\nlock your tokens, the stronger your vote will be weighted. The timeline for the conviction starts\nafter the voting period ends; tokens used for voting will always be locked until the end of the\nvoting period, no matter what conviction you vote with. Unwillingness to lock your tokens means that\nyour vote only counts for 10% of the tokens that you hold, while the maximum lock-up of 896 days\nmeans you can make your vote count for 600% of the tokens that you hold. It is possible to vote with\ntokens already locked by staking."),(0,i.kt)("p",null,'When you are comfortable with the decision you have made, click the blue "Vote" button to submit\nyour transaction and wait for it to be included in a block.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"voting",src:o(76544).Z,width:"940",height:"712"})),(0,i.kt)("h2",{id:"unlocking-locked-tokens"},"Unlocking Locked Tokens"),(0,i.kt)("p",null,"Like ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-DOT#lazy-vesting"},"vesting"),", the tokens that are locked in democracy are\nunlocked lazily. This means that you, the user, must explicitly call an unlock extrinsic to make\nyour funds available again after the lock expires. Unbonding is another term you hear a lot in\nPolkadot, it means withdrawing your DOT that was used in staking. To know more about it, please see\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nominator"},"here"),"."),(0,i.kt)("p",null,'You can do this from the "Accounts" page in\n',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Polkadot-JS Apps"),', unless you use Ledger (see below).\nFirst, check that your account has a "democracy" lock by opening the details on your balance. In the\nexample below the account has 150 KSM locked in democracy.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"democracy balance details",src:o(41451).Z,width:"342",height:"214"})),(0,i.kt)("p",null,'Now you can click the menu button (the three dots) and find the option that says "Clear expired\ndemocracy locks". After selecting this option you may confirm the transaction and your locks will be\ncleared when successful.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"democracy clear locks",src:o(99381).Z,width:"366",height:"933"})),(0,i.kt)("h4",{id:"with-a-ledger-hardware-wallet-or-unlocking-very-old-locks"},"With a Ledger hardware wallet or Unlocking Very Old Locks"),(0,i.kt)("p",null,"If you do not see an option to clear expired democracy votes, it may be that the lock is very old.\nOr, if you are using the Ledger hardware wallet, you will not be able to issue the batch Unlock\naction from the UI."),(0,i.kt)("p",null,"Instead, you must clear the lock by directly issuing the correct extrinsics."),(0,i.kt)("p",null,"Navigate to the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Extrinsics page")," and submit the\nfollowing extrinsic: ",(0,i.kt)("inlineCode",{parentName:"p"},"democracy.removeVote(index)"),' using the account that you voted with. For the\nindex number (ReferendumIndex), enter the number of the referendum for which you voted ("12" in the\nimage below).'),(0,i.kt)("p",null,"The number of the referendum for which you voted is visible in an explorer such as Subscan."),(0,i.kt)("p",null,'You need to press the "Submit Transaction" button to submit the extrinsic.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"democracy clear_lock_extrinsic_1",src:o(33022).Z,width:"871",height:"234"})),(0,i.kt)("p",null,"Now submit the following extrinsic: `democracy.unlock(target), where the target is your account\naddress."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"democracy clear_lock_extrinsic_2",src:o(5066).Z,width:"869",height:"237"})),(0,i.kt)("p",null,"If you return to the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Accounts page"),", you should see that\nthe democracy lock has been released."),(0,i.kt)("p",null,"Note that this applies only to locked DOT that were used for voting on referenda. In order to unlock\nDOT locked by voting for members of the Polkadot Council, you need to go to the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/council"},"Council"),' page, click "Vote", and then click on "Unvote\nAll".'),(0,i.kt)("h2",{id:"delegate-a-vote"},"Delegate a Vote"),(0,i.kt)("p",null,"If you are too busy to keep up and vote on upcoming referenda, there is an option to delegate your\nvote to another account whose opinion you trust. When you delegate to another account, that account\ngets the added voting power of your tokens along with the conviction that you set. The conviction\nfor delegation works just like the conviction for regular voting, except your tokens may be locked\nlonger than they would normally since locking resets when you undelegate your vote."),(0,i.kt)("p",null,"The account that is being delegated to does not make any special action once the delegation is in\nplace. They can continue to vote on referenda how they see fit. The difference is now when the\nDemocracy system tallies votes, the delegated tokens now are added to whatever vote the delegatee\nhas made."),(0,i.kt)("p",null,'You can delegate your vote to another account and even attach a "Conviction" to the delegation.\nNavigate to the ',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},'"Accounts" tab on Polkadot-JS UI'),' and\nclick on the three vertical dots and select "Delegate democracy votes" option for the account of\nyour choice. Then you would be presented with a pop-up window which lets you enter the account\ndetails of the delegated account, delegated amount and conviction. You can enter the relevant\ndetails and click on the delegate button and then sign and submit the transaction.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"delegate",src:o(40639).Z,width:"1880",height:"724"})),(0,i.kt)("p",null,"Your delegation will count toward whatever account you delegated for votes on until you explicitly\nundelegate your vote."),(0,i.kt)("admonition",{title:"Query the chain state for an account's delegation preferences",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"It is possible to query the delegation preferences of any actively delegating account on the network\nthrough ",(0,i.kt)("inlineCode",{parentName:"p"},"democracy.votingOf")," extrinsic."),(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("img",{alt:"query delegation",src:o(83181).Z,width:"2002",height:"992"}))),(0,i.kt)("h2",{id:"undelegate-a-vote"},"Undelegate a Vote"),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"If there is an existing lock due to a previous delegation change or undelegation, any new change or\nundelegation will restart the lock period for the larger DOT amount and the longest conviction\nperiod between the existing and the new lock."),(0,i.kt)("p",{parentName:"admonition"},"This will only matter to accounts with conviction, as the accounts with no conviction don't have any\nlock period."),(0,i.kt)("p",{parentName:"admonition"},"Examples:"),(0,i.kt)("ol",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Delegate 500 DOT with 1x conviction, then change delegation to 1000 DOT with 1x conviction, the\nlock period will reset for 1000 DOT with 1x conviction.")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Delegate 500 DOT with 3x conviction, then change the delegation to 1000 DOT with 1x conviction,\nthe lock period will reset for 1000 DOT with 3x conviction.")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Delegate 500 DOT with 1x conviction, then change the delegation to 200 DOT with 1x conviction,\nthe lock period will reset for 500 DOT with 1x conviction."))),(0,i.kt)("p",{parentName:"admonition"},"To understand this in further detail checkout\n",(0,i.kt)("a",{parentName:"p",href:"https://substrate.stackexchange.com/questions/5067/delegating-and-undelegating-during-the-lock-period-extends-it-for-the-initial-am"},"this stackexchange post."))),(0,i.kt)("p",null,'You may decide at some point in the future to remove your delegation to a target account. In this\ncase, your tokens will be locked for the maximum amount of time in accordance with the conviction\nyou set at the beginning of the delegation. For example, if you chose "2x" delegation for four weeks\nof lock-up time, your tokens will be locked for 4 weeks after sending the ',(0,i.kt)("inlineCode",{parentName:"p"},"undelegate")," transaction.\nOnce your vote has been undelegated, you are in control of making votes with it once again. You can\nstart to vote directly, or choose a different account to act as your delegate."),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"undelegate")," transaction must be sent from the account that you wish to clear of its delegation.\nFor example, if Alice has delegated her tokens to Bob, Alice would need to be the one to call the\n",(0,i.kt)("inlineCode",{parentName:"p"},"undelegate")," transaction to clear her delegation."),(0,i.kt)("p",null,"The easiest way to do this is from the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},'"Accounts" tab on Polkadot-JS UI')," where you can manage the\ndelegation of your account."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"manage delegation",src:o(43339).Z,width:"1990",height:"224"})),(0,i.kt)("p",null,"When you click on \"manage delegation\", you would be presented with a pre-populated pop-up window\nwith that account's delegation preferences. Here, you have an option to undelegate or save the\nmodifications made to the account's delegation preferences."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"undelegate",src:o(55002).Z,width:"1884",height:"732"})),(0,i.kt)("h2",{id:"voting-with-a-governance-proxy"},"Voting with a Governance Proxy"),(0,i.kt)("p",null,'Making a vote on behalf of a stash requires a "proxy" transaction from the Proxy pallet. When you\nchoose this transaction from the "Extrinsics" tab, it will let you select "vote" from the Democracy\npallet, and you will specify the index of the referendum that is being voted, the judgement (i.e.\n"Aye" for approval or "Nay" for rejection), and the conviction, just like a normal vote.'),(0,i.kt)("p",null,"For more material on adding and removing Governance proxies, as well as other types, please see the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-proxies"},"Proxy page"),"."),(0,i.kt)("h2",{id:"interpreting-on-chain-voting-data"},"Interpreting On-Chain Voting Data"),(0,i.kt)("p",null,"Consider the following example showcasing how votes would be displayed on a block explorer."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"Nay 0.1x => 0\nNay 1x => 1\nNay 2x => 2\nNay 3x => 3\nNay 4x => 4\nNay 5x => 5\nNay 6x => 6\nAye 0.1x => 128\nAye 1x => 129\nAye 2x => 130\nAye 3x => 131\nAye 4x => 132\nAye 5x => 133\nAye 6x => 134\n")),(0,i.kt)("p",null,'At first glance, it may be difficult to interpret what you voted on. We need to take a step back and\nconsider the "voting data" at the binary level.'),(0,i.kt)("p",null,"The vote is stored as a byte using a bitfield data structure and displayed on the block explorer as\na decimal integer. The bitfield stores both the conviction and aye/nay boolean, where the boolean is\nrepresented using the MSB of the byte. This would mean that the grouping of the 7 remaining bits is\nused to store the conviction."))}m.isMDXComponent=!0},40639:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/delegate-vote-a8b4d534e0e004f8d0d4a32a45f3a77a.png"},50937:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/endorse-7e22987ceebef0c1ce17f475510eacc9.png"},16014:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/endorse1-6f9ed6c3eb99cad52bd07e250307b397.png"},33346:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/endorsed-list-460b771aedaf6e91f9caaaf728d76dfd.png"},43339:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/manage-delegation-19501197d96e688a08f257a1443f18cd.png"},70657:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/proposal-hash-1ae67063393c7e77001e538b9d4a67af.png"},60580:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/proposals-9b3cc3a8bd2ff1c01c0dbc7c90950d3f.png"},83181:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/query-delegation-fece7720f6282de8928688d61ee38477.png"},71214:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/submit_preimage-b0165c4aa5615a416bc1698ff21cba2e.png"},95545:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/submit_proposal-24cc24bb4fdb502da80a28082f779da8.png"},55002:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/undelegate-save-002a17067954a098e2942aa1a7583698.png"},76544:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/voting-4abb1178436833648da30b63d860aa10.png"},41451:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/democracy_balance_details-56b5c71fe66fc4a0d66ba4820a3cc6a9.png"},33022:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/democracy_clear_lock_extrinsic_1-c42556da5e59023abb388eac1a12aee2.png"},5066:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/democracy_clear_lock_extrinsic_2-f6a313a6755d15eb6ab26d33edb80a72.png"},99381:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/democracy_clear_locks-028d6202e19ad4410e07a5da8bb69277.png"}}]); \ No newline at end of file diff --git a/assets/js/ed3409b3.0dd74408.js b/assets/js/ed3409b3.0dd74408.js deleted file mode 100644 index 1ad24683f70c..000000000000 --- a/assets/js/ed3409b3.0dd74408.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[8609],{47940:(e,t,o)=>{"use strict";o.d(t,{Z:()=>c});var a=o(74165),n=o(15861),r=o(67294),i=o(87152),s=o(14741),u=o(67425);function d(e,t,o){return l.apply(this,arguments)}function l(){return(l=(0,n.Z)((0,a.Z)().mark((function e(t,o,n){var r,u,d,l,p;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=void 0,u=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return r="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return r="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return r="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return r="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==r){e.next=18;break}return e.abrupt("return");case 18:return d=new i.U(r),e.next=21,s.G.create({provider:d});case 21:l=e.sent,(p=o.split(".")).forEach((function(e){e in l&&(l=l[e])})),e.t1=p[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return u=l.toString(),e.abrupt("break",35);case 29:return e.next=31,l();case 31:return u=(u=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+p[0]+") in "+o);case 35:return e.abrupt("return",u);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function p(e,t,o,a){switch(t){case"humanReadable":(0,u.HumanReadable)(e,o,a);break;case"precise":(0,u.Precise)(e,o,a);break;case"blocksToDays":(0,u.BlocksToDays)(e,a);break;case"erasToDays":(0,u.ErasToDays)(e,a,o);break;case"percentage":(0,u.Percentage)(e,a);break;case"permillToPercent":(0,u.PermillToPercent)(e,a);break;case"arrayLength":(0,u.ArrayLength)(e,a);break;default:return void console.log("Ignoring unknown filter type")}}const c=function(e){var t=e.network,o=e.path,i=e.defaultValue,s=e.filter,u=void 0===s?void 0:s,l=(0,r.useState)(""),c=l[0],h=l[1];return t=t.toLowerCase(),(0,r.useEffect)((function(){void 0!==u?p(i.toString(),u,t,h):h(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var r=function(){var e=(0,n.Z)((0,a.Z)().mark((function e(){var n;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,d(t,o,h);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==u?p(n,u,t,h):h(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{r()}catch(s){console.log(s)}}}),[]),c}},67425:e=>{var t="polkadot",o="kusama",a="statemine",n="statemint",r={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,s){var u=void 0;if(i===t||i===n)u=3;else{if(i!==o&&i!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");u=6}e=parseFloat(e),s((e=Number.isInteger(e/r[i].precision)?e/r[i].precision+" "+r[i].symbol:(e/r[i].precision).toFixed(u)+" "+r[i].symbol).toString())},Precise:function(e,t,o){o(e=(e=parseFloat(e))/r[t].precision+" "+r[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,r,i){var s=void 0;if(i===t||i===n)s=1;else{if(i!==o&&i!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}r((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},64539:(e,t,o)=>{"use strict";o.r(t),o.d(t,{assets:()=>p,contentTitle:()=>d,default:()=>b,frontMatter:()=>u,metadata:()=>l,toc:()=>c});var a=o(87462),n=o(63366),r=(o(67294),o(3905)),i=o(47940),s=["components"],u={id:"learn-guides-bounties",title:"Polkadot-JS Guides about Bounties",sidebar_label:"Bounty Guides",description:"Polkadot-JS Guides for Bounties",keyword:["treasury","bounties","guides","child bounty","polkadot-js"],slug:"../learn-guides-bounties"},d=void 0,l={unversionedId:"learn/learn-guides-bounties",id:"learn/learn-guides-bounties",title:"Polkadot-JS Guides about Bounties",description:"Polkadot-JS Guides for Bounties",source:"@site/../docs/learn/learn-guides-bounties.md",sourceDirName:"learn",slug:"/learn-guides-bounties",permalink:"/docs/learn-guides-bounties",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-bounties.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710309813,formattedLastUpdatedAt:"Mar 13, 2024",frontMatter:{id:"learn-guides-bounties",title:"Polkadot-JS Guides about Bounties",sidebar_label:"Bounty Guides",description:"Polkadot-JS Guides for Bounties",keyword:["treasury","bounties","guides","child bounty","polkadot-js"],slug:"../learn-guides-bounties"},sidebar:"docs",previous:{title:"Treasury Guides",permalink:"/docs/learn-guides-treasury"},next:{title:"Identity Guides",permalink:"/docs/learn-guides-identity"}},p={},c=[{value:"Submit a Bounty Proposal",id:"submit-a-bounty-proposal",level:2},{value:"Assign a Curator to a Bounty",id:"assign-a-curator-to-a-bounty",level:2},{value:"Create and Award Child Bounties",id:"create-and-award-child-bounties",level:2},{value:"Claim a Child Bounty Reward",id:"claim-a-child-bounty-reward",level:2}],h={toc:c},m="wrapper";function b(e){var t=e.components,u=(0,n.Z)(e,s);return(0,r.kt)(m,(0,a.Z)({},h,u,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-treasury#bounties"},"this page")," to learn about Bounties."),(0,r.kt)("admonition",{title:"Notify the Polkadot Direction Channel",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Remember always to notify the\n",(0,r.kt)("a",{parentName:"p",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction Element Channel")," about\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov#referenda"},"OpenGov referenda")," so that the community can start reviewing\nthem and voting on them.")),(0,r.kt)("h2",{id:"submit-a-bounty-proposal"},"Submit a Bounty Proposal"),(0,r.kt)("admonition",{title:"Step-by-step written tutorial",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See\n",(0,r.kt)("a",{parentName:"p",href:"https://scribehow.com/shared/How_to_Submit_a_Bounty_Proposal_on_Polkadotjs_Apps__Ps_zfmNXRbm6PuZaj28JBQ"},"this written tutorial"),"\nto learn more about how to submit a bounty proposal.")),(0,r.kt)("p",null,"See the video tutorial below to learn how you can create a bounty and submit it for approval through\nan OpenGov referendum."),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=8Cft1-8RWmk"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/8Cft1-8RWmk/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=8Cft1-8RWmk"},"Submit a Bounty")))),(0,r.kt)("p",null,'When you add a bounty, this will show as "proposed" in the main\n',(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/bounties"},"Bounties page"),'. Once the community approves your bounty\nproposal as an OpenGov referendum, the bounty will show as "funded" at the end of the\n',(0,r.kt)("a",{parentName:"p",href:"/docs/glossary#spend-period"},"spending period")," on the main\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/bounties"},"Bounties page"),". You can then proceed with assigning\ncurators to the bounty."),(0,r.kt)("p",null,"To minimize storage on chain in the same way as any proposal, bounties don't contain contextual\ninformation. When a user submits a bounty spending proposal, they will need to find an off-chain\nmedium to explain the proposal, for example a bounty proposal document on\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/opengov"},"Polkassembly")," or\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.subsquare.io/"},"Subsquare"),".\n",(0,r.kt)("a",{parentName:"p",href:"https://docs.google.com/document/d/1-IBz_owspV5OcvezWXpksWDQReWowschD0TFuaVKKcU/edit?usp=sharing"},"This template"),"\ncan be used to submit all the information needed by OpenGov voters to make an informed decision."),(0,r.kt)("p",null,"Submitting a bounty proposal will reserve\n",(0,r.kt)(i.Z,{network:"polkadot",path:"consts.bounties.bountyDepositBase",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),"","."),(0,r.kt)("h2",{id:"assign-a-curator-to-a-bounty"},"Assign a Curator to a Bounty"),(0,r.kt)("admonition",{title:"Step-by-step written tutorial",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See\n",(0,r.kt)("a",{parentName:"p",href:"https://scribehow.com/shared/How_to_Assign_a_Curator_to_a_Bounty_on_Polkadotjs_Apps__JgK3eSfXQdm_PSvtz8TelQ"},"this written tutorial"),"\nto learn more about how to assign a curator to a bounty.")),(0,r.kt)("p",null,'Once your bounty is shown as "funded" on the main\n',(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/bounties"},"Bounties page"),", you can propose a bounty curator. See the\nvideo tutorial below to learn how you can add a curator to a bounty and submit it for approval\nthrough an OpenGov referendum."),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=TM7vk3oP9IA"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/TM7vk3oP9IA/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=TM7vk3oP9IA"},"Assign Curator to a Bounty")))),(0,r.kt)("p",null,"Once your OpenGov referendum has been approved by the community and served the required\n",(0,r.kt)("a",{parentName:"p",href:"/docs/glossary#spend-period"},"spending period"),', the bounty will still show as "funded" on\nthe main ',(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/bounties"},"Bounties page")," and await the curator's\nacceptance. The curator must formally accept the curator role by signing a ",(0,r.kt)("inlineCode",{parentName:"p"},"bounties.acceptCurator"),"\nextrinsic. More information about when to do this can be found on the main\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/bounties"},"Bounties page"),'. Only after the curators claim their\ncandidacy the bounty will show as "active" on the main Bounty page.'),(0,r.kt)("admonition",{title:"Curator assignment call must be executed after bounty is funded",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Curator assignment must take place after the bounty has been funded, and approved bounties are\nfunded after a spend period has been completed. A curator assignment referendum cannot be executed\nduring the same spend period when the bounty is funded."),(0,r.kt)("p",{parentName:"admonition"},"If your bounty has been awarded but is not funded yet, you need to make sure that the curator\nassignment referendum gets enacted in the subsequent spending period (you can set a delay in\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-guides-polkadot-opengov#submitting-a-proposal"},"Polkadot-JS")," when you submit the proposal\nduring the current spend period).")),(0,r.kt)("h2",{id:"create-and-award-child-bounties"},"Create and Award Child Bounties"),(0,r.kt)("admonition",{title:"Step-by-step written tutorial",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See\n",(0,r.kt)("a",{parentName:"p",href:"https://scribehow.com/shared/How_to_Create_and_Award_a_Child_Bounty__Q-YFGkYAR3WxMnvYGHiU3Q"},"this written tutorial"),"\nto learn more about how to create and award child bounties.")),(0,r.kt)("admonition",{title:"Remember to add contextual information about child bounties",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"When you add child bounties, please add contextual information on the governance forums\n",(0,r.kt)("a",{parentName:"p",href:"https://polkassembly.io/"},"Polkassembly")," or ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.subsquare.io/"},"Subsquare"),".")),(0,r.kt)("p",null,"See the video tutorial below to learn how to create a child bounty, assign a curator, and award a\nchild bounty."),(0,r.kt)("p",null,"The video will show how to create and award a child bounty using a batch call. We will also include\nproposing and approving curator candidacy for the child bounty. The calls can be executed\nseparately, depending on the process curators consider appropriate for their bounty."),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=mLpvx0OQoyM"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/mLpvx0OQoyM/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=mLpvx0OQoyM"},"Create and Award Child Bounties")))),(0,r.kt)("p",null,"Note that once a child bounty is awarded, awardees need to wait for the\n8-day delay to be complete before claiming the\nchild bounty."),(0,r.kt)("h2",{id:"claim-a-child-bounty-reward"},"Claim a Child Bounty Reward"),(0,r.kt)("admonition",{title:"Step-by-step written tutorial",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See\n",(0,r.kt)("a",{parentName:"p",href:"https://scribehow.com/shared/How_to_claim_a_Child_Bounty_reward_on_Polkadotjs__t3V7NDUjQlus40EUjc-5Kw"},"this written tutorial"),"\nto learn more about how to claim a child bounty reward.")),(0,r.kt)("p",null,"The status of child bounties can be viewed on the\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/bounties"},"Polkassembly Bounty page"),' under the specific parent\nbounty. A child bounty status can be "Added", "Awarded", or "Claimed". For example, the parent\nbounty 17 refers to the Community Events Bounty, which has 183 child bounties.'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"polkassembly-child-bounties",src:o(83001).Z,width:"2408",height:"1053"})),(0,r.kt)("p",null,"After a child bounty has been awarded and the\n",(0,r.kt)(i.Z,{network:"polkadot",path:"consts.bounties.bountyDepositPayoutDelay",defaultValue:115200,filter:"blocksToDays",mdxType:"RPC"}),"","-day\ndelay elapsed, follow the guidelines in the video tutorial below to learn how to claim a child\nbounty reward. Note that the extrinsic to claim the child bounty reward is permissionless, and\nanyone can initiate the claim on behalf of the beneficiary."),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=db82aHgy23c"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/db82aHgy23c/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=db82aHgy23c"},"Claim Child Bounty Reward")))))}b.isMDXComponent=!0},83001:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/polkassembly-child-bounties-fde994e770f3e109a07752068aa417b1.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/ed3409b3.31e512ea.js b/assets/js/ed3409b3.31e512ea.js new file mode 100644 index 000000000000..329e753091fb --- /dev/null +++ b/assets/js/ed3409b3.31e512ea.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[8609],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>c});var o=a(74165),n=a(15861),r=a(67294),i=a(87152),s=a(14741),u=a(67425);function d(e,t,a){return l.apply(this,arguments)}function l(){return(l=(0,n.Z)((0,o.Z)().mark((function e(t,a,n){var r,u,d,l,p;return(0,o.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=void 0,u=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return r="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return r="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return r="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return r="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==r){e.next=18;break}return e.abrupt("return");case 18:return d=new i.U(r),e.next=21,s.G.create({provider:d});case 21:l=e.sent,(p=a.split(".")).forEach((function(e){e in l&&(l=l[e])})),e.t1=p[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return u=l.toString(),e.abrupt("break",35);case 29:return e.next=31,l();case 31:return u=(u=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+p[0]+") in "+a);case 35:return e.abrupt("return",u);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function p(e,t,a,o){switch(t){case"humanReadable":(0,u.HumanReadable)(e,a,o);break;case"precise":(0,u.Precise)(e,a,o);break;case"blocksToDays":(0,u.BlocksToDays)(e,o);break;case"erasToDays":(0,u.ErasToDays)(e,o,a);break;case"percentage":(0,u.Percentage)(e,o);break;case"permillToPercent":(0,u.PermillToPercent)(e,o);break;case"arrayLength":(0,u.ArrayLength)(e,o);break;default:return void console.log("Ignoring unknown filter type")}}const c=function(e){var t=e.network,a=e.path,i=e.defaultValue,s=e.filter,u=void 0===s?void 0:s,l=(0,r.useState)(""),c=l[0],h=l[1];return t=t.toLowerCase(),(0,r.useEffect)((function(){void 0!==u?p(i.toString(),u,t,h):h(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var r=function(){var e=(0,n.Z)((0,o.Z)().mark((function e(){var n;return(0,o.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,d(t,a,h);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==u?p(n,u,t,h):h(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{r()}catch(s){console.log(s)}}}),[]),c}},67425:e=>{var t="polkadot",a="kusama",o="statemine",n="statemint",r={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,s){var u=void 0;if(i===t||i===n)u=3;else{if(i!==a&&i!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");u=6}e=parseFloat(e),s((e=Number.isInteger(e/r[i].precision)?e/r[i].precision+" "+r[i].symbol:(e/r[i].precision).toFixed(u)+" "+r[i].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/r[t].precision+" "+r[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,r,i){var s=void 0;if(i===t||i===n)s=1;else{if(i!==a&&i!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}r((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},64539:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>d,default:()=>b,frontMatter:()=>u,metadata:()=>l,toc:()=>c});var o=a(87462),n=a(63366),r=(a(67294),a(3905)),i=a(47940),s=["components"],u={id:"learn-guides-bounties",title:"Polkadot-JS Guides about Bounties",sidebar_label:"Bounty Guides",description:"Polkadot-JS Guides for Bounties",keyword:["treasury","bounties","guides","child bounty","polkadot-js"],slug:"../learn-guides-bounties"},d=void 0,l={unversionedId:"learn/learn-guides-bounties",id:"learn/learn-guides-bounties",title:"Polkadot-JS Guides about Bounties",description:"Polkadot-JS Guides for Bounties",source:"@site/../docs/learn/learn-guides-bounties.md",sourceDirName:"learn",slug:"/learn-guides-bounties",permalink:"/docs/learn-guides-bounties",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-bounties.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-bounties",title:"Polkadot-JS Guides about Bounties",sidebar_label:"Bounty Guides",description:"Polkadot-JS Guides for Bounties",keyword:["treasury","bounties","guides","child bounty","polkadot-js"],slug:"../learn-guides-bounties"},sidebar:"docs",previous:{title:"Treasury Guides",permalink:"/docs/learn-guides-treasury"},next:{title:"Identity Guides",permalink:"/docs/learn-guides-identity"}},p={},c=[{value:"Submit a Bounty Proposal",id:"submit-a-bounty-proposal",level:2},{value:"Assign a Curator to a Bounty",id:"assign-a-curator-to-a-bounty",level:2},{value:"Create and Award Child Bounties",id:"create-and-award-child-bounties",level:2},{value:"Claim a Child Bounty Reward",id:"claim-a-child-bounty-reward",level:2}],h={toc:c},m="wrapper";function b(e){var t=e.components,u=(0,n.Z)(e,s);return(0,r.kt)(m,(0,o.Z)({},h,u,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"sticky",style:{zIndex:1}},(0,r.kt)("br",null),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,r.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,r.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,r.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-treasury#bounties"},"this page")," to learn about Bounties."),(0,r.kt)("admonition",{title:"Notify the Polkadot Direction Channel",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Remember always to notify the\n",(0,r.kt)("a",{parentName:"p",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction Element Channel")," about\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov#referenda"},"OpenGov referenda")," so that the community can start reviewing\nthem and voting on them.")),(0,r.kt)("h2",{id:"submit-a-bounty-proposal"},"Submit a Bounty Proposal"),(0,r.kt)("admonition",{title:"Step-by-step written tutorial",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See\n",(0,r.kt)("a",{parentName:"p",href:"https://scribehow.com/shared/How_to_Submit_a_Bounty_Proposal_on_Polkadotjs_Apps__Ps_zfmNXRbm6PuZaj28JBQ"},"this written tutorial"),"\nto learn more about how to submit a bounty proposal.")),(0,r.kt)("p",null,"See the video tutorial below to learn how you can create a bounty and submit it for approval through\nan OpenGov referendum."),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=8Cft1-8RWmk"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/8Cft1-8RWmk/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=8Cft1-8RWmk"},"Submit a Bounty")))),(0,r.kt)("p",null,'When you add a bounty, this will show as "proposed" in the main\n',(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/bounties"},"Bounties page"),'. Once the community approves your bounty\nproposal as an OpenGov referendum, the bounty will show as "funded" at the end of the\n',(0,r.kt)("a",{parentName:"p",href:"/docs/glossary#spend-period"},"spending period")," on the main\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/bounties"},"Bounties page"),". You can then proceed with assigning\ncurators to the bounty."),(0,r.kt)("p",null,"To minimize storage on chain in the same way as any proposal, bounties don't contain contextual\ninformation. When a user submits a bounty spending proposal, they will need to find an off-chain\nmedium to explain the proposal, for example a bounty proposal document on\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/opengov"},"Polkassembly")," or\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.subsquare.io/"},"Subsquare"),".\n",(0,r.kt)("a",{parentName:"p",href:"https://docs.google.com/document/d/1-IBz_owspV5OcvezWXpksWDQReWowschD0TFuaVKKcU/edit?usp=sharing"},"This template"),"\ncan be used to submit all the information needed by OpenGov voters to make an informed decision."),(0,r.kt)("p",null,"Submitting a bounty proposal will reserve\n",(0,r.kt)(i.Z,{network:"polkadot",path:"consts.bounties.bountyDepositBase",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),"","."),(0,r.kt)("h2",{id:"assign-a-curator-to-a-bounty"},"Assign a Curator to a Bounty"),(0,r.kt)("admonition",{title:"Step-by-step written tutorial",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See\n",(0,r.kt)("a",{parentName:"p",href:"https://scribehow.com/shared/How_to_Assign_a_Curator_to_a_Bounty_on_Polkadotjs_Apps__JgK3eSfXQdm_PSvtz8TelQ"},"this written tutorial"),"\nto learn more about how to assign a curator to a bounty.")),(0,r.kt)("p",null,'Once your bounty is shown as "funded" on the main\n',(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/bounties"},"Bounties page"),", you can propose a bounty curator. See the\nvideo tutorial below to learn how you can add a curator to a bounty and submit it for approval\nthrough an OpenGov referendum."),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=TM7vk3oP9IA"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/TM7vk3oP9IA/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=TM7vk3oP9IA"},"Assign Curator to a Bounty")))),(0,r.kt)("p",null,"Once your OpenGov referendum has been approved by the community and served the required\n",(0,r.kt)("a",{parentName:"p",href:"/docs/glossary#spend-period"},"spending period"),', the bounty will still show as "funded" on\nthe main ',(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/bounties"},"Bounties page")," and await the curator's\nacceptance. The curator must formally accept the curator role by signing a ",(0,r.kt)("inlineCode",{parentName:"p"},"bounties.acceptCurator"),"\nextrinsic. More information about when to do this can be found on the main\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/bounties"},"Bounties page"),'. Only after the curators claim their\ncandidacy the bounty will show as "active" on the main Bounty page.'),(0,r.kt)("admonition",{title:"Curator assignment call must be executed after bounty is funded",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Curator assignment must take place after the bounty has been funded, and approved bounties are\nfunded after a spend period has been completed. A curator assignment referendum cannot be executed\nduring the same spend period when the bounty is funded."),(0,r.kt)("p",{parentName:"admonition"},"If your bounty has been awarded but is not funded yet, you need to make sure that the curator\nassignment referendum gets enacted in the subsequent spending period (you can set a delay in\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-guides-polkadot-opengov#submitting-a-proposal"},"Polkadot-JS")," when you submit the proposal\nduring the current spend period).")),(0,r.kt)("h2",{id:"create-and-award-child-bounties"},"Create and Award Child Bounties"),(0,r.kt)("admonition",{title:"Step-by-step written tutorial",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See\n",(0,r.kt)("a",{parentName:"p",href:"https://scribehow.com/shared/How_to_Create_and_Award_a_Child_Bounty__Q-YFGkYAR3WxMnvYGHiU3Q"},"this written tutorial"),"\nto learn more about how to create and award child bounties.")),(0,r.kt)("admonition",{title:"Remember to add contextual information about child bounties",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"When you add child bounties, please add contextual information on the governance forums\n",(0,r.kt)("a",{parentName:"p",href:"https://polkassembly.io/"},"Polkassembly")," or ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.subsquare.io/"},"Subsquare"),".")),(0,r.kt)("p",null,"See the video tutorial below to learn how to create a child bounty, assign a curator, and award a\nchild bounty."),(0,r.kt)("p",null,"The video will show how to create and award a child bounty using a batch call. We will also include\nproposing and approving curator candidacy for the child bounty. The calls can be executed\nseparately, depending on the process curators consider appropriate for their bounty."),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=mLpvx0OQoyM"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/mLpvx0OQoyM/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=mLpvx0OQoyM"},"Create and Award Child Bounties")))),(0,r.kt)("p",null,"Note that once a child bounty is awarded, awardees need to wait for the\n8-day delay to be complete before claiming the\nchild bounty."),(0,r.kt)("h2",{id:"claim-a-child-bounty-reward"},"Claim a Child Bounty Reward"),(0,r.kt)("admonition",{title:"Step-by-step written tutorial",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See\n",(0,r.kt)("a",{parentName:"p",href:"https://scribehow.com/shared/How_to_claim_a_Child_Bounty_reward_on_Polkadotjs__t3V7NDUjQlus40EUjc-5Kw"},"this written tutorial"),"\nto learn more about how to claim a child bounty reward.")),(0,r.kt)("p",null,"The status of child bounties can be viewed on the\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/bounties"},"Polkassembly Bounty page"),' under the specific parent\nbounty. A child bounty status can be "Added", "Awarded", or "Claimed". For example, the parent\nbounty 17 refers to the Community Events Bounty, which has 183 child bounties.'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"polkassembly-child-bounties",src:a(83001).Z,width:"2408",height:"1053"})),(0,r.kt)("p",null,"After a child bounty has been awarded and the\n",(0,r.kt)(i.Z,{network:"polkadot",path:"consts.bounties.bountyDepositPayoutDelay",defaultValue:115200,filter:"blocksToDays",mdxType:"RPC"}),"","-day\ndelay elapsed, follow the guidelines in the video tutorial below to learn how to claim a child\nbounty reward. Note that the extrinsic to claim the child bounty reward is permissionless, and\nanyone can initiate the claim on behalf of the beneficiary."),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=db82aHgy23c"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/db82aHgy23c/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=db82aHgy23c"},"Claim Child Bounty Reward")))))}b.isMDXComponent=!0},83001:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/polkassembly-child-bounties-fde994e770f3e109a07752068aa417b1.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/eef3f1dd.6ad43e4b.js b/assets/js/eef3f1dd.6ad43e4b.js deleted file mode 100644 index f2d396cef70a..000000000000 --- a/assets/js/eef3f1dd.6ad43e4b.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[4097],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>c});var r=a(74165),o=a(15861),n=a(67294),i=a(87152),s=a(14741),l=a(67425);function p(e,t,a){return u.apply(this,arguments)}function u(){return(u=(0,o.Z)((0,r.Z)().mark((function e(t,a,o){var n,l,p,u,d;return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return n="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return n="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return n="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return n="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==n){e.next=18;break}return e.abrupt("return");case 18:return p=new i.U(n),e.next=21,s.G.create({provider:p});case 21:u=e.sent,(d=a.split(".")).forEach((function(e){e in u&&(u=u[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=u.toString(),e.abrupt("break",35);case 29:return e.next=31,u();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,a,r){switch(t){case"humanReadable":(0,l.HumanReadable)(e,a,r);break;case"precise":(0,l.Precise)(e,a,r);break;case"blocksToDays":(0,l.BlocksToDays)(e,r);break;case"erasToDays":(0,l.ErasToDays)(e,r,a);break;case"percentage":(0,l.Percentage)(e,r);break;case"permillToPercent":(0,l.PermillToPercent)(e,r);break;case"arrayLength":(0,l.ArrayLength)(e,r);break;default:return void console.log("Ignoring unknown filter type")}}const c=function(e){var t=e.network,a=e.path,i=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,u=(0,n.useState)(""),c=u[0],m=u[1];return t=t.toLowerCase(),(0,n.useEffect)((function(){void 0!==l?d(i.toString(),l,t,m):m(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var n=function(){var e=(0,o.Z)((0,r.Z)().mark((function e(){var o;return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,p(t,a,m);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(o,l,t,m):m(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{n()}catch(s){console.log(s)}}}),[]),c}},67425:e=>{var t="polkadot",a="kusama",r="statemine",o="statemint",n={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,s){var l=void 0;if(i===t||i===o)l=3;else{if(i!==a&&i!==r)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),s((e=Number.isInteger(e/n[i].precision)?e/n[i].precision+" "+n[i].symbol:(e/n[i].precision).toFixed(l)+" "+n[i].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/n[t].precision+" "+n[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,n,i){var s=void 0;if(i===t||i===o)s=1;else{if(i!==a&&i!==r)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}n((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},7522:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>p,default:()=>k,frontMatter:()=>l,metadata:()=>u,toc:()=>c});var r=a(87462),o=a(63366),n=(a(67294),a(3905)),i=a(47940),s=["components"],l={id:"learn-guides-treasury",title:"Polkadot-JS Guides about the Treasury",sidebar_label:"Treasury Guides",description:"Polkadot-JS Guides about the Polkadot Treasury.",keywords:["opengov","polkadot opengov","referenda","treasury","tipps","polkadot-js"],slug:"../learn-guides-treasury"},p=void 0,u={unversionedId:"learn/learn-guides-treasury",id:"learn/learn-guides-treasury",title:"Polkadot-JS Guides about the Treasury",description:"Polkadot-JS Guides about the Polkadot Treasury.",source:"@site/../docs/learn/learn-guides-treasury.md",sourceDirName:"learn",slug:"/learn-guides-treasury",permalink:"/docs/learn-guides-treasury",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-treasury.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710309813,formattedLastUpdatedAt:"Mar 13, 2024",frontMatter:{id:"learn-guides-treasury",title:"Polkadot-JS Guides about the Treasury",sidebar_label:"Treasury Guides",description:"Polkadot-JS Guides about the Polkadot Treasury.",keywords:["opengov","polkadot opengov","referenda","treasury","tipps","polkadot-js"],slug:"../learn-guides-treasury"},sidebar:"docs",previous:{title:"OpenGov Guides",permalink:"/docs/learn-guides-polkadot-opengov"},next:{title:"Bounty Guides",permalink:"/docs/learn-guides-bounties"}},d={},c=[{value:"Creating a Treasury Proposal",id:"creating-a-treasury-proposal",level:2},{value:"Announcing the Proposal",id:"announcing-the-proposal",level:3},{value:"Submit Treasury Proposal Preimage",id:"submit-treasury-proposal-preimage",level:3},{value:"Submit a Treasury Track Referendum",id:"submit-a-treasury-track-referendum",level:3},{value:"Place a Decision Deposit for the Treasury Track Referendum",id:"place-a-decision-deposit-for-the-treasury-track-referendum",level:3},{value:"Submit Treasury Proposal via Polkassembly",id:"submit-treasury-proposal-via-polkassembly",level:2},{value:"Requesting Tips from the Treasury",id:"requesting-tips-from-the-treasury",level:2}],m={toc:c},h="wrapper";function k(e){var t=e.components,l=(0,o.Z)(e,s);return(0,n.kt)(h,(0,r.Z)({},m,l,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"See ",(0,n.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-treasury"},"this page")," to learn about the Polkadot Treasury."),(0,n.kt)("h2",{id:"creating-a-treasury-proposal"},"Creating a Treasury Proposal"),(0,n.kt)("p",null,"Your proposal should address a problem, outline a goal, give a detailed account of how you will\nreach that goal, and include any ongoing maintenance needs. As much as possible, you should itemize\nthe tasks to be completed so fees can be evaluated and milestones can be followed. You can check the\n",(0,n.kt)("a",{parentName:"p",href:"https://docs.google.com/document/d/1IZykdp2cyQavcRyZd_dgNj5DcgxgZR6kAqGdcNARu1w"},"guidelines for a successful proposal"),"","\nand fill out the\n",(0,n.kt)("a",{parentName:"p",href:"https://docs.google.com/document/d/1O_84mXYFERCavmnJyxbIPKFkG0bVBySRjCVy-d-VKcc"},"Treasury proposal template"),"\nprovided."),(0,n.kt)("h3",{id:"announcing-the-proposal"},"Announcing the Proposal"),(0,n.kt)("p",null,"To minimize storage on-chain, proposals don't contain contextual information. When a user submits a\nproposal, they will need to find an off-chain way to explain the proposal:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Many community members participate in discussion in the\n",(0,n.kt)("a",{parentName:"li",href:"https://matrix.to/#/#polkadot-watercooler:web3.foundation"},"Polkadot Watercooler")," and\n",(0,n.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction room"),".\n",""),(0,n.kt)("li",{parentName:"ul"},"Use platforms like ",(0,n.kt)("a",{parentName:"li",href:"https://polkassembly.io"},"Polkassembly")," and\n",(0,n.kt)("a",{parentName:"li",href:"https://www.subsquare.io/"},"SubSquare")," to initiate discussion with the community. They also offer\na gauge poll to capture the community sentiment before submitting an on-chain referendum.")),(0,n.kt)("p",null,"Spreading the word about the proposal's explanation to the community is ultimately up to the\nproposer."),(0,n.kt)("admonition",{title:"Use Accounts with Verified On-Chain Identity for Treasury Proposals",type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"To ensure legitimacy, it is required that the account linked to the Treasury proposal has an\n",(0,n.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181981-how-to-set-and-clear-an-identity"},"identity set"),"\nand is\n",(0,n.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181990-how-to-request-and-cancel-identity-judgement"},"verified by an on-chain registrar"),".")),(0,n.kt)("h3",{id:"submit-treasury-proposal-preimage"},"Submit Treasury Proposal Preimage"),(0,n.kt)("p",null,"The example below shows how to create a ",(0,n.kt)("a",{parentName:"p",href:"../general/glossary#preimage"},"preimage")," for a transaction\nthat requests 100 DOT from Treasury."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Navigate to ",(0,n.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/preimages"},"Polkadot-JS UI > Governance > Preimages"),"\nand then click on Add Preimage."),(0,n.kt)("li",{parentName:"ul"},"Select the account which will be used to submit the preimage."),(0,n.kt)("li",{parentName:"ul"},"Choose ",(0,n.kt)("inlineCode",{parentName:"li"},"treasury"),' pallet in the "propose" dropdown and the ',(0,n.kt)("inlineCode",{parentName:"li"},"spend(amount, beneficiary)"),"call"),(0,n.kt)("li",{parentName:"ul"},"Enter the DOT amount."),(0,n.kt)("li",{parentName:"ul"},"Enter the AccountID of the beneficiary (which has a verified on-chain identity)."),(0,n.kt)("li",{parentName:"ul"},"Submit preimage"),(0,n.kt)("li",{parentName:"ul"},"Sign and submit the transaction by paying the specified transaction fees.")),(0,n.kt)("admonition",{title:"Preimage Submission Deposit",type:"info"},(0,n.kt)("p",{parentName:"admonition"},"A deposit is required for the preimage to be stored on chain. The preimage deposit is proportional\nto the amount of information stored within the preimage. The deposit amount required for a preimage\nwith a treasury spend transaction is around\n41 DOT. Ensure you have enough account\nbalance to pay for the submission deposit and the transaction fees.")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Treasury Preimage",src:a(95773).Z,width:"2147",height:"1199"})),(0,n.kt)("p",null,"After successful submission of the preimage, it is displayed on Polkadot-JS UI > Governance >\nPreimages page. Every preimage is associated with a unique preimage hash (highlighted in a box in\nthe image below). Take a note of this preimage hash, which is required to submit a referendum."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Treasury Preimage Hash",src:a(83601).Z,width:"2879",height:"453"})),(0,n.kt)("h3",{id:"submit-a-treasury-track-referendum"},"Submit a Treasury Track Referendum"),(0,n.kt)("p",null,"The example below shows how to submit a Treasury track referendum."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Navigate to ",(0,n.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/referenda"},"Polkadot-JS UI > Governance > Referenda"),"\nand then click on Submit proposal."),(0,n.kt)("li",{parentName:"ul"},"Select the account which will be used to submit the proposal."),(0,n.kt)("li",{parentName:"ul"},"Choose the appropriate submission track (The example below selected Small Spender track)."),(0,n.kt)("li",{parentName:"ul"},"Enter the preimage hash of the treasury spend transaction.(If the preimage exists on-chain, the\npreimage length box is automatically populated)"),(0,n.kt)("li",{parentName:"ul"},"Click on Submit proposal."),(0,n.kt)("li",{parentName:"ul"},"Sign and submit the transaction.")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Submit Treasury Proposal",src:a(67847).Z,width:"2141",height:"1238"})),(0,n.kt)("p",null,"Once your submission is executed, your referendum will appear under your chosen track on the\nPolkadot-JS UI ",(0,n.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"referenda page"),"."),(0,n.kt)("h3",{id:"place-a-decision-deposit-for-the-treasury-track-referendum"},"Place a Decision Deposit for the Treasury Track Referendum"),(0,n.kt)("p",null,"For the referendum to move from preparing phase to the deciding phase, a decision deposit needs to\nbe placed. The decision deposit values for each individual\n",(0,n.kt)("a",{parentName:"p",href:"./learn-polkadot-opengov-treasury#treasury-tracks"},"Treasury Tracks")," are listed in a section above\nin this document."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Submit Treasury Proposal Decision Deposit",src:a(49431).Z,width:"2133",height:"168"})),(0,n.kt)("p",null,"The preimage and decision deposits\n",(0,n.kt)("a",{parentName:"p",href:"/docs/learn-guides-polkadot-opengov#claiming-the-preimage-and-decision-deposits"},"can be claimed once the referendum ends"),"."),(0,n.kt)("h2",{id:"submit-treasury-proposal-via-polkassembly"},"Submit Treasury Proposal via Polkassembly"),(0,n.kt)("p",null,"To submit a treasury track referendum via ",(0,n.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/opengov"},"Polkassembly"),"\nclick on the FAB button in the bottom right corner. Then,"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},'Click on "Create Treasury Proposal" and choose an address for the proposer')),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"After choosing an address, you will enter a three-stage guideline:"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Write a proposal: you can add a detailed description for the proposal, which will be stored on\nPolkassembly. Alternatively, you can link an existing discussion post.")),(0,n.kt)("p",{parentName:"li"},(0,n.kt)("img",{alt:"polkassembly-write-proposal",src:a(90348).Z,width:"2130",height:"1596"})),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Create a preimage: an existing preimage can be linked, or a new one can be created. To create a\npreimage, add the beneficiary address and the\nDOT amount. The track will be auto-selected\nand the user can proceed with the creation of a preimage.")),(0,n.kt)("p",{parentName:"li"},(0,n.kt)("img",{alt:"polkassembly-create-preimage",src:a(76869).Z,width:"2154",height:"1598"})),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Create a proposal: final confirmation about the proposal creation. The description of the\nproposal and the preimage are automatically linked to the proposal.")))),(0,n.kt)("h2",{id:"requesting-tips-from-the-treasury"},"Requesting Tips from the Treasury"),(0,n.kt)("p",null,"To request a tip funded by the treasury, you can follow the above steps for\n",(0,n.kt)("a",{parentName:"p",href:"#creating-a-treasury-proposal"},"creating a treasury proposal")," but instead of submitting the proposal\nto the ",(0,n.kt)("inlineCode",{parentName:"p"},"32 / Small Spender")," track, you will need to submit it to the ",(0,n.kt)("inlineCode",{parentName:"p"},"30 / Small Tipper")," or\n",(0,n.kt)("inlineCode",{parentName:"p"},"31 / Big Tipper")," tracks depending on the number of tokens to be requested."),(0,n.kt)("p",null,"Briefly, you will need to:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Create a preimage using the ",(0,n.kt)("inlineCode",{parentName:"li"},"treasury.Spend")," extrinsic and specifying the number of tokens and the\nbeneficiary of the tip"),(0,n.kt)("li",{parentName:"ul"},"Submit a proposal to the right track (i.e. ",(0,n.kt)("inlineCode",{parentName:"li"},"30")," or ",(0,n.kt)("inlineCode",{parentName:"li"},"31"),") using the preimage hash"),(0,n.kt)("li",{parentName:"ul"},"Once you started the referendum go to ",(0,n.kt)("a",{parentName:"li",href:"https://polkassembly.io/"},"Polkassembly"),", log in with the\nproposer account and edit the referendum details"),(0,n.kt)("li",{parentName:"ul"},"Notify the\n",(0,n.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction Element Channel"),"","\nabout your referendum"),(0,n.kt)("li",{parentName:"ul"},"Place the decision deposit before the\n",(0,n.kt)(i.Z,{network:"polkadot",path:"consts.referenda.undecidingTimeout",defaultValue:201600,filter:"blocksToDays",mdxType:"RPC"}),"","-day\ntimeout"),(0,n.kt)("li",{parentName:"ul"},"Once the referendum ends you can\n",(0,n.kt)("a",{parentName:"li",href:"/docs/learn-guides-polkadot-opengov#claiming-the-preimage-and-decision-deposits"},"claim the preimage and decision deposits back"))))}k.isMDXComponent=!0},76869:(e,t,a)=>{"use strict";a.d(t,{Z:()=>r});const r=a.p+"assets/images/polkassembly-create-preimage-7396a8ce796d0f0dcad30d3edced8618.png"},90348:(e,t,a)=>{"use strict";a.d(t,{Z:()=>r});const r=a.p+"assets/images/polkassembly-write-proposal-a3ce8ab9303111f6003ac8103ba29507.png"},67847:(e,t,a)=>{"use strict";a.d(t,{Z:()=>r});const r=a.p+"assets/images/submit-proposal-treasury-3948a231c4f3162a8680ad052af9e903.png"},83601:(e,t,a)=>{"use strict";a.d(t,{Z:()=>r});const r=a.p+"assets/images/treasury-preimage-hash-05bb427d21d3ecf7d5e38418a0a0f4ed.png"},95773:(e,t,a)=>{"use strict";a.d(t,{Z:()=>r});const r=a.p+"assets/images/treasury-preimage-3024cca2a7b9593c35b4d44e64d9414e.png"},49431:(e,t,a)=>{"use strict";a.d(t,{Z:()=>r});const r=a.p+"assets/images/treasury-proposal-decision-deposit-849d27481ba0134acf743f7474d8f6a4.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/eef3f1dd.9fc41be7.js b/assets/js/eef3f1dd.9fc41be7.js new file mode 100644 index 000000000000..9d01807d6098 --- /dev/null +++ b/assets/js/eef3f1dd.9fc41be7.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[4097],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>c});var r=a(74165),o=a(15861),n=a(67294),i=a(87152),s=a(14741),l=a(67425);function p(e,t,a){return u.apply(this,arguments)}function u(){return(u=(0,o.Z)((0,r.Z)().mark((function e(t,a,o){var n,l,p,u,d;return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return n="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return n="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return n="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return n="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==n){e.next=18;break}return e.abrupt("return");case 18:return p=new i.U(n),e.next=21,s.G.create({provider:p});case 21:u=e.sent,(d=a.split(".")).forEach((function(e){e in u&&(u=u[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=u.toString(),e.abrupt("break",35);case 29:return e.next=31,u();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,a,r){switch(t){case"humanReadable":(0,l.HumanReadable)(e,a,r);break;case"precise":(0,l.Precise)(e,a,r);break;case"blocksToDays":(0,l.BlocksToDays)(e,r);break;case"erasToDays":(0,l.ErasToDays)(e,r,a);break;case"percentage":(0,l.Percentage)(e,r);break;case"permillToPercent":(0,l.PermillToPercent)(e,r);break;case"arrayLength":(0,l.ArrayLength)(e,r);break;default:return void console.log("Ignoring unknown filter type")}}const c=function(e){var t=e.network,a=e.path,i=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,u=(0,n.useState)(""),c=u[0],m=u[1];return t=t.toLowerCase(),(0,n.useEffect)((function(){void 0!==l?d(i.toString(),l,t,m):m(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var n=function(){var e=(0,o.Z)((0,r.Z)().mark((function e(){var o;return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,p(t,a,m);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(o,l,t,m):m(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{n()}catch(s){console.log(s)}}}),[]),c}},67425:e=>{var t="polkadot",a="kusama",r="statemine",o="statemint",n={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,s){var l=void 0;if(i===t||i===o)l=3;else{if(i!==a&&i!==r)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),s((e=Number.isInteger(e/n[i].precision)?e/n[i].precision+" "+n[i].symbol:(e/n[i].precision).toFixed(l)+" "+n[i].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/n[t].precision+" "+n[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,n,i){var s=void 0;if(i===t||i===o)s=1;else{if(i!==a&&i!==r)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}n((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},7522:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>p,default:()=>k,frontMatter:()=>l,metadata:()=>u,toc:()=>c});var r=a(87462),o=a(63366),n=(a(67294),a(3905)),i=a(47940),s=["components"],l={id:"learn-guides-treasury",title:"Polkadot-JS Guides about the Treasury",sidebar_label:"Treasury Guides",description:"Polkadot-JS Guides about the Polkadot Treasury.",keywords:["opengov","polkadot opengov","referenda","treasury","tipps","polkadot-js"],slug:"../learn-guides-treasury"},p=void 0,u={unversionedId:"learn/learn-guides-treasury",id:"learn/learn-guides-treasury",title:"Polkadot-JS Guides about the Treasury",description:"Polkadot-JS Guides about the Polkadot Treasury.",source:"@site/../docs/learn/learn-guides-treasury.md",sourceDirName:"learn",slug:"/learn-guides-treasury",permalink:"/docs/learn-guides-treasury",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-treasury.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-treasury",title:"Polkadot-JS Guides about the Treasury",sidebar_label:"Treasury Guides",description:"Polkadot-JS Guides about the Polkadot Treasury.",keywords:["opengov","polkadot opengov","referenda","treasury","tipps","polkadot-js"],slug:"../learn-guides-treasury"},sidebar:"docs",previous:{title:"OpenGov Guides",permalink:"/docs/learn-guides-polkadot-opengov"},next:{title:"Bounty Guides",permalink:"/docs/learn-guides-bounties"}},d={},c=[{value:"Creating a Treasury Proposal",id:"creating-a-treasury-proposal",level:2},{value:"Announcing the Proposal",id:"announcing-the-proposal",level:3},{value:"Submit Treasury Proposal Preimage",id:"submit-treasury-proposal-preimage",level:3},{value:"Submit a Treasury Track Referendum",id:"submit-a-treasury-track-referendum",level:3},{value:"Place a Decision Deposit for the Treasury Track Referendum",id:"place-a-decision-deposit-for-the-treasury-track-referendum",level:3},{value:"Submit Treasury Proposal via Polkassembly",id:"submit-treasury-proposal-via-polkassembly",level:2},{value:"Requesting Tips from the Treasury",id:"requesting-tips-from-the-treasury",level:2}],m={toc:c},h="wrapper";function k(e){var t=e.components,l=(0,o.Z)(e,s);return(0,n.kt)(h,(0,r.Z)({},m,l,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("div",{className:"sticky",style:{zIndex:1}},(0,n.kt)("br",null),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,n.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,n.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,n.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,n.kt)("p",null,"See ",(0,n.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-treasury"},"this page")," to learn about the Polkadot Treasury."),(0,n.kt)("h2",{id:"creating-a-treasury-proposal"},"Creating a Treasury Proposal"),(0,n.kt)("p",null,"Your proposal should address a problem, outline a goal, give a detailed account of how you will\nreach that goal, and include any ongoing maintenance needs. As much as possible, you should itemize\nthe tasks to be completed so fees can be evaluated and milestones can be followed. You can check the\n",(0,n.kt)("a",{parentName:"p",href:"https://docs.google.com/document/d/1IZykdp2cyQavcRyZd_dgNj5DcgxgZR6kAqGdcNARu1w"},"guidelines for a successful proposal"),"","\nand fill out the\n",(0,n.kt)("a",{parentName:"p",href:"https://docs.google.com/document/d/1O_84mXYFERCavmnJyxbIPKFkG0bVBySRjCVy-d-VKcc"},"Treasury proposal template"),"\nprovided."),(0,n.kt)("h3",{id:"announcing-the-proposal"},"Announcing the Proposal"),(0,n.kt)("p",null,"To minimize storage on-chain, proposals don't contain contextual information. When a user submits a\nproposal, they will need to find an off-chain way to explain the proposal:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Many community members participate in discussion in the\n",(0,n.kt)("a",{parentName:"li",href:"https://matrix.to/#/#polkadot-watercooler:web3.foundation"},"Polkadot Watercooler")," and\n",(0,n.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction room"),".\n",""),(0,n.kt)("li",{parentName:"ul"},"Use platforms like ",(0,n.kt)("a",{parentName:"li",href:"https://polkassembly.io"},"Polkassembly")," and\n",(0,n.kt)("a",{parentName:"li",href:"https://www.subsquare.io/"},"SubSquare")," to initiate discussion with the community. They also offer\na gauge poll to capture the community sentiment before submitting an on-chain referendum.")),(0,n.kt)("p",null,"Spreading the word about the proposal's explanation to the community is ultimately up to the\nproposer."),(0,n.kt)("admonition",{title:"Use Accounts with Verified On-Chain Identity for Treasury Proposals",type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"To ensure legitimacy, it is required that the account linked to the Treasury proposal has an\n",(0,n.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181981-how-to-set-and-clear-an-identity"},"identity set"),"\nand is\n",(0,n.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181990-how-to-request-and-cancel-identity-judgement"},"verified by an on-chain registrar"),".")),(0,n.kt)("h3",{id:"submit-treasury-proposal-preimage"},"Submit Treasury Proposal Preimage"),(0,n.kt)("p",null,"The example below shows how to create a ",(0,n.kt)("a",{parentName:"p",href:"../general/glossary#preimage"},"preimage")," for a transaction\nthat requests 100 DOT from Treasury."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Navigate to ",(0,n.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/preimages"},"Polkadot-JS UI > Governance > Preimages"),"\nand then click on Add Preimage."),(0,n.kt)("li",{parentName:"ul"},"Select the account which will be used to submit the preimage."),(0,n.kt)("li",{parentName:"ul"},"Choose ",(0,n.kt)("inlineCode",{parentName:"li"},"treasury"),' pallet in the "propose" dropdown and the ',(0,n.kt)("inlineCode",{parentName:"li"},"spend(amount, beneficiary)"),"call"),(0,n.kt)("li",{parentName:"ul"},"Enter the DOT amount."),(0,n.kt)("li",{parentName:"ul"},"Enter the AccountID of the beneficiary (which has a verified on-chain identity)."),(0,n.kt)("li",{parentName:"ul"},"Submit preimage"),(0,n.kt)("li",{parentName:"ul"},"Sign and submit the transaction by paying the specified transaction fees.")),(0,n.kt)("admonition",{title:"Preimage Submission Deposit",type:"info"},(0,n.kt)("p",{parentName:"admonition"},"A deposit is required for the preimage to be stored on chain. The preimage deposit is proportional\nto the amount of information stored within the preimage. The deposit amount required for a preimage\nwith a treasury spend transaction is around\n41 DOT. Ensure you have enough account\nbalance to pay for the submission deposit and the transaction fees.")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Treasury Preimage",src:a(95773).Z,width:"2147",height:"1199"})),(0,n.kt)("p",null,"After successful submission of the preimage, it is displayed on Polkadot-JS UI > Governance >\nPreimages page. Every preimage is associated with a unique preimage hash (highlighted in a box in\nthe image below). Take a note of this preimage hash, which is required to submit a referendum."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Treasury Preimage Hash",src:a(83601).Z,width:"2879",height:"453"})),(0,n.kt)("h3",{id:"submit-a-treasury-track-referendum"},"Submit a Treasury Track Referendum"),(0,n.kt)("p",null,"The example below shows how to submit a Treasury track referendum."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Navigate to ",(0,n.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/referenda"},"Polkadot-JS UI > Governance > Referenda"),"\nand then click on Submit proposal."),(0,n.kt)("li",{parentName:"ul"},"Select the account which will be used to submit the proposal."),(0,n.kt)("li",{parentName:"ul"},"Choose the appropriate submission track (The example below selected Small Spender track)."),(0,n.kt)("li",{parentName:"ul"},"Enter the preimage hash of the treasury spend transaction.(If the preimage exists on-chain, the\npreimage length box is automatically populated)"),(0,n.kt)("li",{parentName:"ul"},"Click on Submit proposal."),(0,n.kt)("li",{parentName:"ul"},"Sign and submit the transaction.")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Submit Treasury Proposal",src:a(67847).Z,width:"2141",height:"1238"})),(0,n.kt)("p",null,"Once your submission is executed, your referendum will appear under your chosen track on the\nPolkadot-JS UI ",(0,n.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"referenda page"),"."),(0,n.kt)("h3",{id:"place-a-decision-deposit-for-the-treasury-track-referendum"},"Place a Decision Deposit for the Treasury Track Referendum"),(0,n.kt)("p",null,"For the referendum to move from preparing phase to the deciding phase, a decision deposit needs to\nbe placed. The decision deposit values for each individual\n",(0,n.kt)("a",{parentName:"p",href:"./learn-polkadot-opengov-treasury#treasury-tracks"},"Treasury Tracks")," are listed in a section above\nin this document."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Submit Treasury Proposal Decision Deposit",src:a(49431).Z,width:"2133",height:"168"})),(0,n.kt)("p",null,"The preimage and decision deposits\n",(0,n.kt)("a",{parentName:"p",href:"/docs/learn-guides-polkadot-opengov#claiming-the-preimage-and-decision-deposits"},"can be claimed once the referendum ends"),"."),(0,n.kt)("h2",{id:"submit-treasury-proposal-via-polkassembly"},"Submit Treasury Proposal via Polkassembly"),(0,n.kt)("p",null,"To submit a treasury track referendum via ",(0,n.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/opengov"},"Polkassembly"),"\nclick on the FAB button in the bottom right corner. Then,"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},'Click on "Create Treasury Proposal" and choose an address for the proposer')),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"After choosing an address, you will enter a three-stage guideline:"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Write a proposal: you can add a detailed description for the proposal, which will be stored on\nPolkassembly. Alternatively, you can link an existing discussion post.")),(0,n.kt)("p",{parentName:"li"},(0,n.kt)("img",{alt:"polkassembly-write-proposal",src:a(90348).Z,width:"2130",height:"1596"})),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Create a preimage: an existing preimage can be linked, or a new one can be created. To create a\npreimage, add the beneficiary address and the\nDOT amount. The track will be auto-selected\nand the user can proceed with the creation of a preimage.")),(0,n.kt)("p",{parentName:"li"},(0,n.kt)("img",{alt:"polkassembly-create-preimage",src:a(76869).Z,width:"2154",height:"1598"})),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Create a proposal: final confirmation about the proposal creation. The description of the\nproposal and the preimage are automatically linked to the proposal.")))),(0,n.kt)("h2",{id:"requesting-tips-from-the-treasury"},"Requesting Tips from the Treasury"),(0,n.kt)("p",null,"To request a tip funded by the treasury, you can follow the above steps for\n",(0,n.kt)("a",{parentName:"p",href:"#creating-a-treasury-proposal"},"creating a treasury proposal")," but instead of submitting the proposal\nto the ",(0,n.kt)("inlineCode",{parentName:"p"},"32 / Small Spender")," track, you will need to submit it to the ",(0,n.kt)("inlineCode",{parentName:"p"},"30 / Small Tipper")," or\n",(0,n.kt)("inlineCode",{parentName:"p"},"31 / Big Tipper")," tracks depending on the number of tokens to be requested."),(0,n.kt)("p",null,"Briefly, you will need to:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Create a preimage using the ",(0,n.kt)("inlineCode",{parentName:"li"},"treasury.Spend")," extrinsic and specifying the number of tokens and the\nbeneficiary of the tip"),(0,n.kt)("li",{parentName:"ul"},"Submit a proposal to the right track (i.e. ",(0,n.kt)("inlineCode",{parentName:"li"},"30")," or ",(0,n.kt)("inlineCode",{parentName:"li"},"31"),") using the preimage hash"),(0,n.kt)("li",{parentName:"ul"},"Once you started the referendum go to ",(0,n.kt)("a",{parentName:"li",href:"https://polkassembly.io/"},"Polkassembly"),", log in with the\nproposer account and edit the referendum details"),(0,n.kt)("li",{parentName:"ul"},"Notify the\n",(0,n.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction Element Channel"),"","\nabout your referendum"),(0,n.kt)("li",{parentName:"ul"},"Place the decision deposit before the\n",(0,n.kt)(i.Z,{network:"polkadot",path:"consts.referenda.undecidingTimeout",defaultValue:201600,filter:"blocksToDays",mdxType:"RPC"}),"","-day\ntimeout"),(0,n.kt)("li",{parentName:"ul"},"Once the referendum ends you can\n",(0,n.kt)("a",{parentName:"li",href:"/docs/learn-guides-polkadot-opengov#claiming-the-preimage-and-decision-deposits"},"claim the preimage and decision deposits back"))))}k.isMDXComponent=!0},76869:(e,t,a)=>{"use strict";a.d(t,{Z:()=>r});const r=a.p+"assets/images/polkassembly-create-preimage-7396a8ce796d0f0dcad30d3edced8618.png"},90348:(e,t,a)=>{"use strict";a.d(t,{Z:()=>r});const r=a.p+"assets/images/polkassembly-write-proposal-a3ce8ab9303111f6003ac8103ba29507.png"},67847:(e,t,a)=>{"use strict";a.d(t,{Z:()=>r});const r=a.p+"assets/images/submit-proposal-treasury-3948a231c4f3162a8680ad052af9e903.png"},83601:(e,t,a)=>{"use strict";a.d(t,{Z:()=>r});const r=a.p+"assets/images/treasury-preimage-hash-05bb427d21d3ecf7d5e38418a0a0f4ed.png"},95773:(e,t,a)=>{"use strict";a.d(t,{Z:()=>r});const r=a.p+"assets/images/treasury-preimage-3024cca2a7b9593c35b4d44e64d9414e.png"},49431:(e,t,a)=>{"use strict";a.d(t,{Z:()=>r});const r=a.p+"assets/images/treasury-proposal-decision-deposit-849d27481ba0134acf743f7474d8f6a4.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/f0ff685a.32e462fb.js b/assets/js/f0ff685a.32e462fb.js new file mode 100644 index 000000000000..efefde161986 --- /dev/null +++ b/assets/js/f0ff685a.32e462fb.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[8191],{47940:(e,t,o)=>{"use strict";o.d(t,{Z:()=>u});var a=o(74165),n=o(15861),r=o(67294),i=o(87152),s=o(14741),l=o(67425);function c(e,t,o){return p.apply(this,arguments)}function p(){return(p=(0,n.Z)((0,a.Z)().mark((function e(t,o,n){var r,l,c,p,d;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return r="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return r="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return r="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return r="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==r){e.next=18;break}return e.abrupt("return");case 18:return c=new i.U(r),e.next=21,s.G.create({provider:c});case 21:p=e.sent,(d=o.split(".")).forEach((function(e){e in p&&(p=p[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=p.toString(),e.abrupt("break",35);case 29:return e.next=31,p();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+o);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,o,a){switch(t){case"humanReadable":(0,l.HumanReadable)(e,o,a);break;case"precise":(0,l.Precise)(e,o,a);break;case"blocksToDays":(0,l.BlocksToDays)(e,a);break;case"erasToDays":(0,l.ErasToDays)(e,a,o);break;case"percentage":(0,l.Percentage)(e,a);break;case"permillToPercent":(0,l.PermillToPercent)(e,a);break;case"arrayLength":(0,l.ArrayLength)(e,a);break;default:return void console.log("Ignoring unknown filter type")}}const u=function(e){var t=e.network,o=e.path,i=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,p=(0,r.useState)(""),u=p[0],h=p[1];return t=t.toLowerCase(),(0,r.useEffect)((function(){void 0!==l?d(i.toString(),l,t,h):h(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var r=function(){var e=(0,n.Z)((0,a.Z)().mark((function e(){var n;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,c(t,o,h);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(n,l,t,h):h(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{r()}catch(s){console.log(s)}}}),[]),u}},67425:e=>{var t="polkadot",o="kusama",a="statemine",n="statemint",r={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,s){var l=void 0;if(i===t||i===n)l=3;else{if(i!==o&&i!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),s((e=Number.isInteger(e/r[i].precision)?e/r[i].precision+" "+r[i].symbol:(e/r[i].precision).toFixed(l)+" "+r[i].symbol).toString())},Precise:function(e,t,o){o(e=(e=parseFloat(e))/r[t].precision+" "+r[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,r,i){var s=void 0;if(i===t||i===n)s=1;else{if(i!==o&&i!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}r((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},56870:(e,t,o)=>{"use strict";o.r(t),o.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>y,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var a=o(87462),n=o(63366),r=(o(67294),o(3905)),i=(o(47940),["components"]),s={id:"learn-guides-accounts-proxy",title:"Polkadot-JS Guides about Proxy Accounts",sidebar_label:"Proxy Guides",description:"Polkadot-JS Guides about Proxy Accounts",keyword:["guides","polkadot-js","accounts","proxy"],slug:"../learn-guides-accounts-proxy"},l=void 0,c={unversionedId:"learn/learn-guides-accounts-proxy",id:"learn/learn-guides-accounts-proxy",title:"Polkadot-JS Guides about Proxy Accounts",description:"Polkadot-JS Guides about Proxy Accounts",source:"@site/../docs/learn/learn-guides-accounts-proxy.md",sourceDirName:"learn",slug:"/learn-guides-accounts-proxy",permalink:"/docs/learn-guides-accounts-proxy",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-accounts-proxy.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-accounts-proxy",title:"Polkadot-JS Guides about Proxy Accounts",sidebar_label:"Proxy Guides",description:"Polkadot-JS Guides about Proxy Accounts",keyword:["guides","polkadot-js","accounts","proxy"],slug:"../learn-guides-accounts-proxy"},sidebar:"docs",previous:{title:"Multisig Guides",permalink:"/docs/learn-guides-accounts-multisig"},next:{title:"Pure Proxy Guides",permalink:"/docs/learn-guides-accounts-proxy-pure"}},p={},d=[{value:"Creating Proxy with Polkadot-JS",id:"creating-proxy-with-polkadot-js",level:2},{value:"Removing Proxy with Polkadot-JS",id:"removing-proxy-with-polkadot-js",level:2},{value:"View your Proxy on Polkadot-JS",id:"view-your-proxy-on-polkadot-js",level:2},{value:"Set-up and Use of Time-delayed Proxies with Polkadot-JS",id:"set-up-and-use-of-time-delayed-proxies-with-polkadot-js",level:2},{value:"Proxy calls",id:"proxy-calls",level:2},{value:"Nested Proxy Calls",id:"nested-proxy-calls",level:3}],u={toc:d},h="wrapper";function y(e){var t=e.components,s=(0,n.Z)(e,i);return(0,r.kt)(h,(0,a.Z)({},u,s,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"sticky",style:{zIndex:1}},(0,r.kt)("br",null),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,r.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,r.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,r.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,r.kt)("p",null,"Proxies allow users to use an account (it can be in cold storage or a hot wallet) less frequently\nbut actively participate in the network with the weight of the tokens in that account. Proxies are\nallowed to perform a limited amount of actions related to specific\n",(0,r.kt)("a",{parentName:"p",href:"https://docs.substrate.io/reference/frame-pallets/"},"substrate pallets")," on behalf of another\naccount. The video below contains more information about using proxies."),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=1tcygkq52tU"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/1tcygkq52tU/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=1tcygkq52tU"},"Proxy Accounts Tutorial")))),(0,r.kt)("admonition",{title:"Know how to check the calls and pallets accessible by proxies",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"For the latest information on the calls and pallets that can be fully accessed by proxies, check the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/153543b0c8c582e73f520e5c08cbe33bddfb5f69/runtime/polkadot/src/lib.rs#L1158"},"source code in the runtime folder"),"\non the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk"},"Polkadot repository"))),(0,r.kt)("h2",{id:"creating-proxy-with-polkadot-js"},"Creating Proxy with Polkadot-JS"),(0,r.kt)("p",null,"To create a proxy account with Polkadot-JS read\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182179-how-to-create-a-proxy-account"},"this support article"),"."),(0,r.kt)("h2",{id:"removing-proxy-with-polkadot-js"},"Removing Proxy with Polkadot-JS"),(0,r.kt)("p",null,'Read the section "Removing Proxies" on\n',(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182179-how-to-create-a-proxy-account"},"this support page"),"\nto learn how to remove proxies."),(0,r.kt)("h2",{id:"view-your-proxy-on-polkadot-js"},"View your Proxy on Polkadot-JS"),(0,r.kt)("p",null,"To view your proxy, just go on the ",(0,r.kt)("em",{parentName:"p"},"Accounts")," menu in the Polkadot-JS UI, next to the proxied\naccount you will notice a blue icon. Hover on it, and you will see ",(0,r.kt)("em",{parentName:"p"},"Proxy overview"),". Click on it and\nyou will be presented with a list of all proxies for that account."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"polkadot_view_proxies",src:o(42273).Z,width:"1842",height:"120"})),(0,r.kt)("p",null,"Additionally, you can head over to the ",(0,r.kt)("em",{parentName:"p"},"Chain State")," tab (underneath the ",(0,r.kt)("em",{parentName:"p"},"Developer")," menu) on\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.polkadot.io#/chainstate"},"Polkadot-JS Apps"),". If\nyou've created your proxy on a Polkadot\naccount, it is required to change your network accordingly using the top left navigation button. On\nthis page, the proxy pallet should be selected, returning the announcements and proxies functions.\nThe proxies function will allow you to see your created proxies for either one account or for all\naccounts (using the toggle will enable this). Proxy announcements are what time lock proxies do to\nannounce they are going to conduct an action."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"polkadot_view_proxies_dev",src:o(28902).Z,width:"1871",height:"820"})),(0,r.kt)("h2",{id:"set-up-and-use-of-time-delayed-proxies-with-polkadot-js"},"Set-up and Use of Time-delayed Proxies with Polkadot-JS"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/3L7Vu2SX0PE"},"this video tutorial")," to learn how you can setup and use\ntime-delayed proxies. The video goes through the example below.")),(0,r.kt)("p",null,"Initially the time time-delayed proxy announces its intended action using the ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.announce"),"\nextrinsic and will wait for the number of blocks defined in the delay time before executing it. The\nproxy will include the hash of the intended function call in the announcement. Within this time\nwindow, the intended action may be canceled by accounts that control the proxy. This can be done by\nthe proxy itself using the ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.removeAnnouncement")," extrinsic or by the proxied account using the\nthe ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.rejectAnnouncement")," extrinsic. Now we can use proxies knowing that any malicious actions\ncan be noticed and reverted within a delay period. After the time-delay, the proxy can use the\n",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxyAnnounced")," extrinsic to execute the announced call."),(0,r.kt)("p",null,"Let's take for example the stash account Eleanor setting Bob as a time-delayed staking proxy. In\nthis way, if Bob submits an extrinsic to change the reward destination, such extrinsic can be\nrejected by Eleanor. This implies that Eleanor monitors Bob, and that within the time-delay she can\nspot the announced extrinsic. Eleanor can check all the proxy call announcements made by her\naccount's proxies on-chain. On Polkadot-JS UI, go to Developer > Storage > Proxy > Announcements to\ncheck the hashes for the calls made by the proxy accounts and the block height at which they are\nenabled for execution."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"time-delayed proxies",src:o(54481).Z,width:"1920",height:"800"})),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"If you try to use ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxyAnnounced"),' to execute the call within the time-delay window you will\nget an error "Proxy unannounced" since the announcement will be done after the time delay. Also note\nthat regular ',(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," calls do not work with time-delayed proxies, you need to announce the\ncall first and then execute the announced call on a separate transaction.")),(0,r.kt)("h2",{id:"proxy-calls"},"Proxy calls"),(0,r.kt)("p",null,"Proxy calls are used by proxies to call proxied accounts. These calls are important for example in\nthe case of ",(0,r.kt)("em",{parentName:"p"},"pure")," proxies, as any attempt to sign transactions with a ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy will fail. For\nmore details see the ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-proxies-pure"},"dedicated section about pure proxies"),"."),(0,r.kt)("h3",{id:"nested-proxy-calls"},"Nested Proxy Calls"),(0,r.kt)("p",null,"As the term suggests, nested proxy calls are proxy calls within proxy calls. Such calls are needed\nif there are proxied accounts that are proxies themselves. In the example diagram below, Alice has a\nstash account that has a ",(0,r.kt)("em",{parentName:"p"},"staking")," proxy account, P-C. P-C is a ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy, a proxied account\noriginally spawned by Charly that is now an ",(0,r.kt)("em",{parentName:"p"},"any")," proxy of P-C and signs everything on its behalf."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"nested proxy calls",src:o(51050).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"For example, to bond more funds, Charly needs to submit a ",(0,r.kt)("inlineCode",{parentName:"p"},"prox.proxy")," extrinsic to P-C, which in\nturn submits a ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic to Alice including for example a ",(0,r.kt)("inlineCode",{parentName:"p"},"staking.bondExtra"),"\nextrinsic, specifying the number of extra tokens that need to be bounded. If Charly wants to leave,\na new account can take his place as any proxy (before Charly leaves!). There is no need to change\nthe staking proxy account. Also, Alice is the only one who can remove P-C as a staking proxy, and\nP-C can only perform staking-related tasks. For example, P-C cannot send funds out from Alice's\naccount."),(0,r.kt)("p",null,"Proxy calls can be done using the Extrinsic Tab in the Polkadot-JS UI. Nested proxy calls can be\ndone by calling each ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic separately, or in some cases by just calling the last\n",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic. In the diagram above, submitting the proxy call from P-C to Alice will\nautomatically ask for Charly's signature. Thus one proxy call will trigger the second one because\nCharly's is the only ",(0,r.kt)("em",{parentName:"p"},"any")," proxy of P-C, and P-C cannot sign anything. While if we want to use Bob's\naccount we will need to submit all three proxy calls."))}y.isMDXComponent=!0},51050:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/nested-proxy-calls-65bdc70624a0b21a087da639743c710d.png"},42273:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/polkadot_view_proxies-5c65a3f24dc6902f1734de8887dd5696.png"},28902:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/polkadot_view_proxies_dev-c7f33e592f2c37cade0cc3d37e356aef.png"},54481:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/time-delayed-proxies-8b85523c3caac25b32d1d884af71c048.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/f0ff685a.ff4ad0da.js b/assets/js/f0ff685a.ff4ad0da.js deleted file mode 100644 index b9d59211bc79..000000000000 --- a/assets/js/f0ff685a.ff4ad0da.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[8191],{47940:(e,t,o)=>{"use strict";o.d(t,{Z:()=>u});var a=o(74165),n=o(15861),r=o(67294),i=o(87152),s=o(14741),l=o(67425);function c(e,t,o){return p.apply(this,arguments)}function p(){return(p=(0,n.Z)((0,a.Z)().mark((function e(t,o,n){var r,l,c,p,d;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return r="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return r="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return r="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return r="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==r){e.next=18;break}return e.abrupt("return");case 18:return c=new i.U(r),e.next=21,s.G.create({provider:c});case 21:p=e.sent,(d=o.split(".")).forEach((function(e){e in p&&(p=p[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=p.toString(),e.abrupt("break",35);case 29:return e.next=31,p();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+o);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,o,a){switch(t){case"humanReadable":(0,l.HumanReadable)(e,o,a);break;case"precise":(0,l.Precise)(e,o,a);break;case"blocksToDays":(0,l.BlocksToDays)(e,a);break;case"erasToDays":(0,l.ErasToDays)(e,a,o);break;case"percentage":(0,l.Percentage)(e,a);break;case"permillToPercent":(0,l.PermillToPercent)(e,a);break;case"arrayLength":(0,l.ArrayLength)(e,a);break;default:return void console.log("Ignoring unknown filter type")}}const u=function(e){var t=e.network,o=e.path,i=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,p=(0,r.useState)(""),u=p[0],h=p[1];return t=t.toLowerCase(),(0,r.useEffect)((function(){void 0!==l?d(i.toString(),l,t,h):h(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var r=function(){var e=(0,n.Z)((0,a.Z)().mark((function e(){var n;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,c(t,o,h);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(n,l,t,h):h(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{r()}catch(s){console.log(s)}}}),[]),u}},67425:e=>{var t="polkadot",o="kusama",a="statemine",n="statemint",r={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,s){var l=void 0;if(i===t||i===n)l=3;else{if(i!==o&&i!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),s((e=Number.isInteger(e/r[i].precision)?e/r[i].precision+" "+r[i].symbol:(e/r[i].precision).toFixed(l)+" "+r[i].symbol).toString())},Precise:function(e,t,o){o(e=(e=parseFloat(e))/r[t].precision+" "+r[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,r,i){var s=void 0;if(i===t||i===n)s=1;else{if(i!==o&&i!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}r((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},56870:(e,t,o)=>{"use strict";o.r(t),o.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>y,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var a=o(87462),n=o(63366),r=(o(67294),o(3905)),i=(o(47940),["components"]),s={id:"learn-guides-accounts-proxy",title:"Polkadot-JS Guides about Proxy Accounts",sidebar_label:"Proxy Guides",description:"Polkadot-JS Guides about Proxy Accounts",keyword:["guides","polkadot-js","accounts","proxy"],slug:"../learn-guides-accounts-proxy"},l=void 0,c={unversionedId:"learn/learn-guides-accounts-proxy",id:"learn/learn-guides-accounts-proxy",title:"Polkadot-JS Guides about Proxy Accounts",description:"Polkadot-JS Guides about Proxy Accounts",source:"@site/../docs/learn/learn-guides-accounts-proxy.md",sourceDirName:"learn",slug:"/learn-guides-accounts-proxy",permalink:"/docs/learn-guides-accounts-proxy",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-accounts-proxy.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710309813,formattedLastUpdatedAt:"Mar 13, 2024",frontMatter:{id:"learn-guides-accounts-proxy",title:"Polkadot-JS Guides about Proxy Accounts",sidebar_label:"Proxy Guides",description:"Polkadot-JS Guides about Proxy Accounts",keyword:["guides","polkadot-js","accounts","proxy"],slug:"../learn-guides-accounts-proxy"},sidebar:"docs",previous:{title:"Multisig Guides",permalink:"/docs/learn-guides-accounts-multisig"},next:{title:"Pure Proxy Guides",permalink:"/docs/learn-guides-accounts-proxy-pure"}},p={},d=[{value:"Creating Proxy with Polkadot-JS",id:"creating-proxy-with-polkadot-js",level:2},{value:"Removing Proxy with Polkadot-JS",id:"removing-proxy-with-polkadot-js",level:2},{value:"View your Proxy on Polkadot-JS",id:"view-your-proxy-on-polkadot-js",level:2},{value:"Set-up and Use of Time-delayed Proxies with Polkadot-JS",id:"set-up-and-use-of-time-delayed-proxies-with-polkadot-js",level:2},{value:"Proxy calls",id:"proxy-calls",level:2},{value:"Nested Proxy Calls",id:"nested-proxy-calls",level:3}],u={toc:d},h="wrapper";function y(e){var t=e.components,s=(0,n.Z)(e,i);return(0,r.kt)(h,(0,a.Z)({},u,s,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Proxies allow users to use an account (it can be in cold storage or a hot wallet) less frequently\nbut actively participate in the network with the weight of the tokens in that account. Proxies are\nallowed to perform a limited amount of actions related to specific\n",(0,r.kt)("a",{parentName:"p",href:"https://docs.substrate.io/reference/frame-pallets/"},"substrate pallets")," on behalf of another\naccount. The video below contains more information about using proxies."),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=1tcygkq52tU"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/1tcygkq52tU/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=1tcygkq52tU"},"Proxy Accounts Tutorial")))),(0,r.kt)("admonition",{title:"Know how to check the calls and pallets accessible by proxies",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"For the latest information on the calls and pallets that can be fully accessed by proxies, check the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/153543b0c8c582e73f520e5c08cbe33bddfb5f69/runtime/polkadot/src/lib.rs#L1158"},"source code in the runtime folder"),"\non the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk"},"Polkadot repository"))),(0,r.kt)("h2",{id:"creating-proxy-with-polkadot-js"},"Creating Proxy with Polkadot-JS"),(0,r.kt)("p",null,"To create a proxy account with Polkadot-JS read\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182179-how-to-create-a-proxy-account"},"this support article"),"."),(0,r.kt)("h2",{id:"removing-proxy-with-polkadot-js"},"Removing Proxy with Polkadot-JS"),(0,r.kt)("p",null,'Read the section "Removing Proxies" on\n',(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182179-how-to-create-a-proxy-account"},"this support page"),"\nto learn how to remove proxies."),(0,r.kt)("h2",{id:"view-your-proxy-on-polkadot-js"},"View your Proxy on Polkadot-JS"),(0,r.kt)("p",null,"To view your proxy, just go on the ",(0,r.kt)("em",{parentName:"p"},"Accounts")," menu in the Polkadot-JS UI, next to the proxied\naccount you will notice a blue icon. Hover on it, and you will see ",(0,r.kt)("em",{parentName:"p"},"Proxy overview"),". Click on it and\nyou will be presented with a list of all proxies for that account."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"polkadot_view_proxies",src:o(42273).Z,width:"1842",height:"120"})),(0,r.kt)("p",null,"Additionally, you can head over to the ",(0,r.kt)("em",{parentName:"p"},"Chain State")," tab (underneath the ",(0,r.kt)("em",{parentName:"p"},"Developer")," menu) on\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.polkadot.io#/chainstate"},"Polkadot-JS Apps"),". If\nyou've created your proxy on a Polkadot\naccount, it is required to change your network accordingly using the top left navigation button. On\nthis page, the proxy pallet should be selected, returning the announcements and proxies functions.\nThe proxies function will allow you to see your created proxies for either one account or for all\naccounts (using the toggle will enable this). Proxy announcements are what time lock proxies do to\nannounce they are going to conduct an action."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"polkadot_view_proxies_dev",src:o(28902).Z,width:"1871",height:"820"})),(0,r.kt)("h2",{id:"set-up-and-use-of-time-delayed-proxies-with-polkadot-js"},"Set-up and Use of Time-delayed Proxies with Polkadot-JS"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/3L7Vu2SX0PE"},"this video tutorial")," to learn how you can setup and use\ntime-delayed proxies. The video goes through the example below.")),(0,r.kt)("p",null,"Initially the time time-delayed proxy announces its intended action using the ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.announce"),"\nextrinsic and will wait for the number of blocks defined in the delay time before executing it. The\nproxy will include the hash of the intended function call in the announcement. Within this time\nwindow, the intended action may be canceled by accounts that control the proxy. This can be done by\nthe proxy itself using the ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.removeAnnouncement")," extrinsic or by the proxied account using the\nthe ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.rejectAnnouncement")," extrinsic. Now we can use proxies knowing that any malicious actions\ncan be noticed and reverted within a delay period. After the time-delay, the proxy can use the\n",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxyAnnounced")," extrinsic to execute the announced call."),(0,r.kt)("p",null,"Let's take for example the stash account Eleanor setting Bob as a time-delayed staking proxy. In\nthis way, if Bob submits an extrinsic to change the reward destination, such extrinsic can be\nrejected by Eleanor. This implies that Eleanor monitors Bob, and that within the time-delay she can\nspot the announced extrinsic. Eleanor can check all the proxy call announcements made by her\naccount's proxies on-chain. On Polkadot-JS UI, go to Developer > Storage > Proxy > Announcements to\ncheck the hashes for the calls made by the proxy accounts and the block height at which they are\nenabled for execution."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"time-delayed proxies",src:o(54481).Z,width:"1920",height:"800"})),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"If you try to use ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxyAnnounced"),' to execute the call within the time-delay window you will\nget an error "Proxy unannounced" since the announcement will be done after the time delay. Also note\nthat regular ',(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," calls do not work with time-delayed proxies, you need to announce the\ncall first and then execute the announced call on a separate transaction.")),(0,r.kt)("h2",{id:"proxy-calls"},"Proxy calls"),(0,r.kt)("p",null,"Proxy calls are used by proxies to call proxied accounts. These calls are important for example in\nthe case of ",(0,r.kt)("em",{parentName:"p"},"pure")," proxies, as any attempt to sign transactions with a ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy will fail. For\nmore details see the ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-proxies-pure"},"dedicated section about pure proxies"),"."),(0,r.kt)("h3",{id:"nested-proxy-calls"},"Nested Proxy Calls"),(0,r.kt)("p",null,"As the term suggests, nested proxy calls are proxy calls within proxy calls. Such calls are needed\nif there are proxied accounts that are proxies themselves. In the example diagram below, Alice has a\nstash account that has a ",(0,r.kt)("em",{parentName:"p"},"staking")," proxy account, P-C. P-C is a ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy, a proxied account\noriginally spawned by Charly that is now an ",(0,r.kt)("em",{parentName:"p"},"any")," proxy of P-C and signs everything on its behalf."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"nested proxy calls",src:o(51050).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"For example, to bond more funds, Charly needs to submit a ",(0,r.kt)("inlineCode",{parentName:"p"},"prox.proxy")," extrinsic to P-C, which in\nturn submits a ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic to Alice including for example a ",(0,r.kt)("inlineCode",{parentName:"p"},"staking.bondExtra"),"\nextrinsic, specifying the number of extra tokens that need to be bounded. If Charly wants to leave,\na new account can take his place as any proxy (before Charly leaves!). There is no need to change\nthe staking proxy account. Also, Alice is the only one who can remove P-C as a staking proxy, and\nP-C can only perform staking-related tasks. For example, P-C cannot send funds out from Alice's\naccount."),(0,r.kt)("p",null,"Proxy calls can be done using the Extrinsic Tab in the Polkadot-JS UI. Nested proxy calls can be\ndone by calling each ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic separately, or in some cases by just calling the last\n",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic. In the diagram above, submitting the proxy call from P-C to Alice will\nautomatically ask for Charly's signature. Thus one proxy call will trigger the second one because\nCharly's is the only ",(0,r.kt)("em",{parentName:"p"},"any")," proxy of P-C, and P-C cannot sign anything. While if we want to use Bob's\naccount we will need to submit all three proxy calls."))}y.isMDXComponent=!0},51050:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/nested-proxy-calls-65bdc70624a0b21a087da639743c710d.png"},42273:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/polkadot_view_proxies-5c65a3f24dc6902f1734de8887dd5696.png"},28902:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/polkadot_view_proxies_dev-c7f33e592f2c37cade0cc3d37e356aef.png"},54481:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/time-delayed-proxies-8b85523c3caac25b32d1d884af71c048.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/f7acb151.8b126346.js b/assets/js/f7acb151.8b126346.js new file mode 100644 index 000000000000..ecb75e2f122c --- /dev/null +++ b/assets/js/f7acb151.8b126346.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[5483],{47940:(e,t,s)=>{"use strict";s.d(t,{Z:()=>p});var a=s(74165),n=s(15861),o=s(67294),r=s(87152),i=s(14741),l=s(67425);function u(e,t,s){return c.apply(this,arguments)}function c(){return(c=(0,n.Z)((0,a.Z)().mark((function e(t,s,n){var o,l,u,c,d;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:o=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return o="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return o="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return o="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return o="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==o){e.next=18;break}return e.abrupt("return");case 18:return u=new r.U(o),e.next=21,i.G.create({provider:u});case 21:c=e.sent,(d=s.split(".")).forEach((function(e){e in c&&(c=c[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=c.toString(),e.abrupt("break",35);case 29:return e.next=31,c();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+s);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,s,a){switch(t){case"humanReadable":(0,l.HumanReadable)(e,s,a);break;case"precise":(0,l.Precise)(e,s,a);break;case"blocksToDays":(0,l.BlocksToDays)(e,a);break;case"erasToDays":(0,l.ErasToDays)(e,a,s);break;case"percentage":(0,l.Percentage)(e,a);break;case"permillToPercent":(0,l.PermillToPercent)(e,a);break;case"arrayLength":(0,l.ArrayLength)(e,a);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(e){var t=e.network,s=e.path,r=e.defaultValue,i=e.filter,l=void 0===i?void 0:i,c=(0,o.useState)(""),p=c[0],h=c[1];return t=t.toLowerCase(),(0,o.useEffect)((function(){void 0!==l?d(r.toString(),l,t,h):h(r.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var o=function(){var e=(0,n.Z)((0,a.Z)().mark((function e(){var n;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,u(t,s,h);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(n,l,t,h):h(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{o()}catch(i){console.log(i)}}}),[]),p}},67425:e=>{var t="polkadot",s="kusama",a="statemine",n="statemint",o={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,r,i){var l=void 0;if(r===t||r===n)l=3;else{if(r!==s&&r!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),i((e=Number.isInteger(e/o[r].precision)?e/o[r].precision+" "+o[r].symbol:(e/o[r].precision).toFixed(l)+" "+o[r].symbol).toString())},Precise:function(e,t,s){s(e=(e=parseFloat(e))/o[t].precision+" "+o[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,o,r){var i=void 0;if(r===t||r===n)i=1;else{if(r!==s&&r!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");i=4}o((e/=i).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},49736:(e,t,s)=>{"use strict";s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>u,default:()=>b,frontMatter:()=>l,metadata:()=>c,toc:()=>p});var a=s(87462),n=s(63366),o=(s(67294),s(3905)),r=s(47940),i=["components"],l={id:"learn-guides-assets-create",title:"Polkadot-JS Guides about Creating Assets",sidebar_label:"Create Asset Guides",description:"Polkadot-JS Guides about Creating Assets.",keywords:["asset hub","assets","statemine","statemint","polkadot-js"],slug:"../learn-guides-assets-create"},u=void 0,c={unversionedId:"learn/learn-guides-assets-create",id:"learn/learn-guides-assets-create",title:"Polkadot-JS Guides about Creating Assets",description:"Polkadot-JS Guides about Creating Assets.",source:"@site/../docs/learn/learn-guides-assets-create.md",sourceDirName:"learn",slug:"/learn-guides-assets-create",permalink:"/docs/learn-guides-assets-create",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-assets-create.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-assets-create",title:"Polkadot-JS Guides about Creating Assets",sidebar_label:"Create Asset Guides",description:"Polkadot-JS Guides about Creating Assets.",keywords:["asset hub","assets","statemine","statemint","polkadot-js"],slug:"../learn-guides-assets-create"},sidebar:"docs",previous:{title:"Asset Hub Guides",permalink:"/docs/learn-guides-assets"},next:{title:"Asset Hub Ledger Guides",permalink:"/docs/learn-guides-assets-ledger"}},d={},p=[{value:"Creating Assets on the Asset Hub with Polkadot-JS",id:"creating-assets-on-the-asset-hub-with-polkadot-js",level:2}],h={toc:p},k="wrapper";function b(e){var t=e.components,l=(0,n.Z)(e,i);return(0,o.kt)(k,(0,a.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("div",{className:"sticky",style:{zIndex:1}},(0,o.kt)("br",null),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,o.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,o.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,o.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,o.kt)("p",null,"The Asset Hub is a generic assets system parachain which provides functionality for deploying and\ntransferring assets \u2014 both Fungible and Non-Fungible Tokens (NFTs). The native token of the Asset\nhub is DOT. The Existential Deposit (ED),\ntransaction fees, and the deposits for proxy/multisig operations are about 1/10th of the values on\nthe Relay chains. For example, the Existential Deposit of an Asset Hub account is\n",(0,o.kt)(r.Z,{network:"statemint",path:"consts.balances.existentialDeposit",defaultValue:1e8,filter:"humanReadable",mdxType:"RPC"}),",\n","\nwhen compared to\n",(0,o.kt)(r.Z,{network:"polkadot",path:"consts.balances.existentialDeposit",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"})," on Polkadot\n",".\nApart from the core protocol token DOT, the\nassets held on the Asset Hub can be broadly categorized as"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Assets backed by an on-chain protocol\u2019s utility"),(0,o.kt)("li",{parentName:"ul"},"Assets with off-chain backing"),(0,o.kt)("li",{parentName:"ul"},"Assets without any backing")),(0,o.kt)("p",null,"For additional background on the Asset Hub check out\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181800-what-is-statemint-and-statemine-and-how-do-i-use-them-"},"this support article"),"."),(0,o.kt)("h2",{id:"creating-assets-on-the-asset-hub-with-polkadot-js"},"Creating Assets on the Asset Hub with Polkadot-JS"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Before minting assets on the Asset Hub, we recommend that you try out this tutorial on Westmint,\nwhich is a system parachain on Westend test network. The WND tokens (Westies) can be teleported from\nWestend to Westmint, are available for free through a\n",(0,o.kt)("a",{parentName:"p",href:"https://wiki.polkadot.network/docs/learn-DOT#getting-westies"},"faucet"),"."),(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("strong",{parentName:"p"},"The images in the guides below are for Polkadot, but they also apply to Kusama."))),(0,o.kt)("p",null,"To create an asset on the Asset Hub, you would need a deposit of\n",(0,o.kt)(r.Z,{network:"statemint",path:"consts.assets.assetDeposit",defaultValue:1e11,filter:"humanReadable",mdxType:"RPC"}),"\n","\nand around\n",(0,o.kt)(r.Z,{network:"statemint",path:"consts.assets.metadataDepositBase",defaultValue:20068e5,filter:"humanReadable",mdxType:"RPC"}),"\n","\nfor the metadata. Before you create an asset on the Asset Hub, ensure that your Asset Hub account\nbalance is a bit more than the sum of those two deposits, which should seamlessly account for the\nrequired deposits and transaction fees. You can send\nDOT from a\nPolkadot account to a the Asset Hub account\nusing the teleport functionality. For instructions on teleporting\nDOT, check this\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-teleport"},"tutorial on Teleports"),"."),(0,o.kt)("p",null,"Assuming you have the required DOT balance on\nyour Asset Hub account, the following instructions should let you successfully create an asset on\nthe Asset Hub"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Access the Asset Hub through ",(0,o.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS UI"),"."),(0,o.kt)("li",{parentName:"ul"},"Navigate to Network > Assets.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Navigate to Assets page",src:s(85353).Z,width:"1710",height:"554"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Click on the create button and you will be presented with a pop-up window. Choose the creator\naccount, name of the asset to be displayed on the Asset Hub, the asset's symbol, number of\ndecimals for the asset, the minimum balance required to hold this asset on an Asset Hub account\nand the most important field of your asset - the unique asset ID. The UI would not let you enter\nan ID that has already been taken. After all the details are entered, click on the next button.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Add Asset Metadata",src:s(3910).Z,width:"1510",height:"798"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Choose the admin, issuer and the freezer accounts for your asset and click on the create button.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Asset managing accounts",src:s(25965).Z,width:"1518",height:"510"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Sign and submit the transaction (If you like to verify the transaction details before signing, you\ncan click on the dropdown button pointed by the arrow in the snapshot below).")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Sign asset creating transaction",src:s(39764).Z,width:"1520",height:"610"})),(0,o.kt)("p",null,"If the transaction is successful, you should see the asset and its details displayed in the\nNetwork > Assets page on the Asset Hub."))}b.isMDXComponent=!0},85353:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-0-71cbceb69c712729d7920b4575ab8f46.png"},3910:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-1-6f406281abdca9f5c2941ebd4d9479fd.png"},25965:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-2-2fd6118841d0c4e037d5f51c6b1010e1.png"},39764:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-3-3952e84a1b7c80239e8fb1f907af2583.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/f7acb151.f3a356a2.js b/assets/js/f7acb151.f3a356a2.js deleted file mode 100644 index c72636e02add..000000000000 --- a/assets/js/f7acb151.f3a356a2.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[5483],{47940:(e,t,s)=>{"use strict";s.d(t,{Z:()=>p});var a=s(74165),n=s(15861),o=s(67294),r=s(87152),i=s(14741),l=s(67425);function u(e,t,s){return c.apply(this,arguments)}function c(){return(c=(0,n.Z)((0,a.Z)().mark((function e(t,s,n){var o,l,u,c,d;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:o=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return o="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return o="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return o="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return o="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==o){e.next=18;break}return e.abrupt("return");case 18:return u=new r.U(o),e.next=21,i.G.create({provider:u});case 21:c=e.sent,(d=s.split(".")).forEach((function(e){e in c&&(c=c[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=c.toString(),e.abrupt("break",35);case 29:return e.next=31,c();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+s);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,s,a){switch(t){case"humanReadable":(0,l.HumanReadable)(e,s,a);break;case"precise":(0,l.Precise)(e,s,a);break;case"blocksToDays":(0,l.BlocksToDays)(e,a);break;case"erasToDays":(0,l.ErasToDays)(e,a,s);break;case"percentage":(0,l.Percentage)(e,a);break;case"permillToPercent":(0,l.PermillToPercent)(e,a);break;case"arrayLength":(0,l.ArrayLength)(e,a);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(e){var t=e.network,s=e.path,r=e.defaultValue,i=e.filter,l=void 0===i?void 0:i,c=(0,o.useState)(""),p=c[0],h=c[1];return t=t.toLowerCase(),(0,o.useEffect)((function(){void 0!==l?d(r.toString(),l,t,h):h(r.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var o=function(){var e=(0,n.Z)((0,a.Z)().mark((function e(){var n;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,u(t,s,h);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(n,l,t,h):h(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{o()}catch(i){console.log(i)}}}),[]),p}},67425:e=>{var t="polkadot",s="kusama",a="statemine",n="statemint",o={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,r,i){var l=void 0;if(r===t||r===n)l=3;else{if(r!==s&&r!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),i((e=Number.isInteger(e/o[r].precision)?e/o[r].precision+" "+o[r].symbol:(e/o[r].precision).toFixed(l)+" "+o[r].symbol).toString())},Precise:function(e,t,s){s(e=(e=parseFloat(e))/o[t].precision+" "+o[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,o,r){var i=void 0;if(r===t||r===n)i=1;else{if(r!==s&&r!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");i=4}o((e/=i).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},49736:(e,t,s)=>{"use strict";s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>u,default:()=>b,frontMatter:()=>l,metadata:()=>c,toc:()=>p});var a=s(87462),n=s(63366),o=(s(67294),s(3905)),r=s(47940),i=["components"],l={id:"learn-guides-assets-create",title:"Polkadot-JS Guides about Creating Assets",sidebar_label:"Asset Guides",description:"Polkadot-JS Guides about Creating Assets.",keywords:["asset hub","assets","statemine","statemint","polkadot-js"],slug:"../learn-guides-assets-create"},u=void 0,c={unversionedId:"learn/learn-guides-assets-create",id:"learn/learn-guides-assets-create",title:"Polkadot-JS Guides about Creating Assets",description:"Polkadot-JS Guides about Creating Assets.",source:"@site/../docs/learn/learn-guides-assets-create.md",sourceDirName:"learn",slug:"/learn-guides-assets-create",permalink:"/docs/learn-guides-assets-create",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-assets-create.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710309813,formattedLastUpdatedAt:"Mar 13, 2024",frontMatter:{id:"learn-guides-assets-create",title:"Polkadot-JS Guides about Creating Assets",sidebar_label:"Asset Guides",description:"Polkadot-JS Guides about Creating Assets.",keywords:["asset hub","assets","statemine","statemint","polkadot-js"],slug:"../learn-guides-assets-create"},sidebar:"docs",previous:{title:"Asset Hub Guides",permalink:"/docs/learn-guides-assets-index"},next:{title:"Asset Hub Ledger Guides",permalink:"/docs/learn-guides-assets-ledger"}},d={},p=[{value:"Creating Assets on the Asset Hub with Polkadot-JS",id:"creating-assets-on-the-asset-hub-with-polkadot-js",level:2}],h={toc:p},k="wrapper";function b(e){var t=e.components,l=(0,n.Z)(e,i);return(0,o.kt)(k,(0,a.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The Asset Hub is a generic assets system parachain which provides functionality for deploying and\ntransferring assets \u2014 both Fungible and Non-Fungible Tokens (NFTs). The native token of the Asset\nhub is DOT. The Existential Deposit (ED),\ntransaction fees, and the deposits for proxy/multisig operations are about 1/10th of the values on\nthe Relay chains. For example, the Existential Deposit of an Asset Hub account is\n",(0,o.kt)(r.Z,{network:"statemint",path:"consts.balances.existentialDeposit",defaultValue:1e8,filter:"humanReadable",mdxType:"RPC"}),",\n","\nwhen compared to\n",(0,o.kt)(r.Z,{network:"polkadot",path:"consts.balances.existentialDeposit",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"})," on Polkadot\n",".\nApart from the core protocol token DOT, the\nassets held on the Asset Hub can be broadly categorized as"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Assets backed by an on-chain protocol\u2019s utility"),(0,o.kt)("li",{parentName:"ul"},"Assets with off-chain backing"),(0,o.kt)("li",{parentName:"ul"},"Assets without any backing")),(0,o.kt)("p",null,"For additional background on the Asset Hub check out\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181800-what-is-statemint-and-statemine-and-how-do-i-use-them-"},"this support article"),"."),(0,o.kt)("h2",{id:"creating-assets-on-the-asset-hub-with-polkadot-js"},"Creating Assets on the Asset Hub with Polkadot-JS"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Before minting assets on the Asset Hub, we recommend that you try out this tutorial on Westmint,\nwhich is a system parachain on Westend test network. The WND tokens (Westies) can be teleported from\nWestend to Westmint, are available for free through a\n",(0,o.kt)("a",{parentName:"p",href:"https://wiki.polkadot.network/docs/learn-DOT#getting-westies"},"faucet"),"."),(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("strong",{parentName:"p"},"The images in the guides below are for Polkadot, but they also apply to Kusama."))),(0,o.kt)("p",null,"To create an asset on the Asset Hub, you would need a deposit of\n",(0,o.kt)(r.Z,{network:"statemint",path:"consts.assets.assetDeposit",defaultValue:1e11,filter:"humanReadable",mdxType:"RPC"}),"\n","\nand around\n",(0,o.kt)(r.Z,{network:"statemint",path:"consts.assets.metadataDepositBase",defaultValue:20068e5,filter:"humanReadable",mdxType:"RPC"}),"\n","\nfor the metadata. Before you create an asset on the Asset Hub, ensure that your Asset Hub account\nbalance is a bit more than the sum of those two deposits, which should seamlessly account for the\nrequired deposits and transaction fees. You can send\nDOT from a\nPolkadot account to a the Asset Hub account\nusing the teleport functionality. For instructions on teleporting\nDOT, check this\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-teleport"},"tutorial on Teleports"),"."),(0,o.kt)("p",null,"Assuming you have the required DOT balance on\nyour Asset Hub account, the following instructions should let you successfully create an asset on\nthe Asset Hub"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Access the Asset Hub through ",(0,o.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS UI"),"."),(0,o.kt)("li",{parentName:"ul"},"Navigate to Network > Assets.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Navigate to Assets page",src:s(85353).Z,width:"1710",height:"554"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Click on the create button and you will be presented with a pop-up window. Choose the creator\naccount, name of the asset to be displayed on the Asset Hub, the asset's symbol, number of\ndecimals for the asset, the minimum balance required to hold this asset on an Asset Hub account\nand the most important field of your asset - the unique asset ID. The UI would not let you enter\nan ID that has already been taken. After all the details are entered, click on the next button.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Add Asset Metadata",src:s(3910).Z,width:"1510",height:"798"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Choose the admin, issuer and the freezer accounts for your asset and click on the create button.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Asset managing accounts",src:s(25965).Z,width:"1518",height:"510"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Sign and submit the transaction (If you like to verify the transaction details before signing, you\ncan click on the dropdown button pointed by the arrow in the snapshot below).")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Sign asset creating transaction",src:s(39764).Z,width:"1520",height:"610"})),(0,o.kt)("p",null,"If the transaction is successful, you should see the asset and its details displayed in the\nNetwork > Assets page on the Asset Hub."))}b.isMDXComponent=!0},85353:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-0-71cbceb69c712729d7920b4575ab8f46.png"},3910:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-1-6f406281abdca9f5c2941ebd4d9479fd.png"},25965:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-2-2fd6118841d0c4e037d5f51c6b1010e1.png"},39764:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-3-3952e84a1b7c80239e8fb1f907af2583.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/ff6596ea.d69e44db.js b/assets/js/ff6596ea.d69e44db.js deleted file mode 100644 index 1899ea7a40b0..000000000000 --- a/assets/js/ff6596ea.d69e44db.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[3842],{47940:(t,e,a)=>{"use strict";a.d(e,{Z:()=>p});var n=a(74165),o=a(15861),i=a(67294),r=a(87152),s=a(14741),l=a(67425);function d(t,e,a){return m.apply(this,arguments)}function m(){return(m=(0,o.Z)((0,n.Z)().mark((function t(e,a,o){var i,l,d,m,h;return(0,n.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:i=void 0,l=void 0,t.t0=e,t.next="polkadot"===t.t0?5:"kusama"===t.t0?7:"statemine"===t.t0?9:"statemint"===t.t0?11:13;break;case 5:return i="wss://rpc.polkadot.io",t.abrupt("break",14);case 7:return i="wss://kusama-rpc.polkadot.io/",t.abrupt("break",14);case 9:return i="wss://statemine-rpc.polkadot.io/",t.abrupt("break",14);case 11:return i="wss://statemint-rpc.polkadot.io/",t.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==i){t.next=18;break}return t.abrupt("return");case 18:return d=new r.U(i),t.next=21,s.G.create({provider:d});case 21:m=t.sent,(h=a.split(".")).forEach((function(t){t in m&&(m=m[t])})),t.t1=h[0],t.next="consts"===t.t1?27:"query"===t.t1?29:34;break;case 27:return l=m.toString(),t.abrupt("break",35);case 29:return t.next=31,m();case 31:return l=(l=t.sent).toString(),t.abrupt("break",35);case 34:console.log("Unknown path prefix ("+h[0]+") in "+a);case 35:return t.abrupt("return",l);case 36:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function h(t,e,a,n){switch(e){case"humanReadable":(0,l.HumanReadable)(t,a,n);break;case"precise":(0,l.Precise)(t,a,n);break;case"blocksToDays":(0,l.BlocksToDays)(t,n);break;case"erasToDays":(0,l.ErasToDays)(t,n,a);break;case"percentage":(0,l.Percentage)(t,n);break;case"permillToPercent":(0,l.PermillToPercent)(t,n);break;case"arrayLength":(0,l.ArrayLength)(t,n);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(t){var e=t.network,a=t.path,r=t.defaultValue,s=t.filter,l=void 0===s?void 0:s,m=(0,i.useState)(""),p=m[0],u=m[1];return e=e.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?h(r.toString(),l,e,u):u(r.toString());var t=void 0;switch(e){case"polkadot":t="wss://rpc.polkadot.io";break;case"kusama":t="wss://kusama-rpc.polkadot.io/";break;case"statemine":t="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":t="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+e)}if(void 0===t)console.log("Failed to connect to a valid websocket, applying default");else{var i=function(){var t=(0,o.Z)((0,n.Z)().mark((function t(){var o;return(0,n.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,d(e,a,u);case 2:if(void 0!==(o=t.sent)){t.next=7;break}return t.abrupt("return");case 7:void 0!==l?h(o,l,e,u):u(o);case 8:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}();try{i()}catch(s){console.log(s)}}}),[]),p}},67425:t=>{var e="polkadot",a="kusama",n="statemine",o="statemint",i={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};t.exports={HumanReadable:function(t,r,s){var l=void 0;if(r===e||r===o)l=3;else{if(r!==a&&r!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}t=parseFloat(t),s((t=Number.isInteger(t/i[r].precision)?t/i[r].precision+" "+i[r].symbol:(t/i[r].precision).toFixed(l)+" "+i[r].symbol).toString())},Precise:function(t,e,a){a(t=(t=parseFloat(t))/i[e].precision+" "+i[e].symbol)},BlocksToDays:function(t,e){e((t=6*t/86400).toString())},ErasToDays:function(t,i,r){var s=void 0;if(r===e||r===o)s=1;else{if(r!==a&&r!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}i((t/=s).toString())},Percentage:function(t,e){e((t/=1e7).toString())},PermillToPercent:function(t,e){e((t/=1e4).toString())},ArrayLength:function(t,e){e((t=t.split(",").length).toString())}}},25398:(t,e,a)=>{"use strict";a.r(e),a.d(e,{assets:()=>h,contentTitle:()=>d,default:()=>k,frontMatter:()=>l,metadata:()=>m,toc:()=>p});var n=a(87462),o=a(63366),i=(a(67294),a(3905)),r=a(47940),s=["components"],l={id:"learn-nominator",title:"Nominator",sidebar_label:"Nominator",description:"Role of Nominators in the Polkadot Ecosystem.",keyword:["nominate","nominator","stake","staking"],slug:"../learn-nominator"},d=void 0,m={unversionedId:"learn/learn-nominator",id:"learn/learn-nominator",title:"Nominator",description:"Role of Nominators in the Polkadot Ecosystem.",source:"@site/../docs/learn/learn-nominator.md",sourceDirName:"learn",slug:"/learn-nominator",permalink:"/docs/learn-nominator",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-nominator.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710760005,formattedLastUpdatedAt:"Mar 18, 2024",frontMatter:{id:"learn-nominator",title:"Nominator",sidebar_label:"Nominator",description:"Role of Nominators in the Polkadot Ecosystem.",keyword:["nominate","nominator","stake","staking"],slug:"../learn-nominator"},sidebar:"docs",previous:{title:"Collator",permalink:"/docs/learn-collator"},next:{title:"Validator",permalink:"/docs/learn-validator"}},h={},p=[{value:"Who are Nominators?",id:"who-are-nominators",level:2},{value:"Why Nominate?",id:"why-nominate",level:2},{value:"Setting-up Accounts",id:"setting-up-accounts",level:2},{value:"Stash & Staking Proxy",id:"stash--staking-proxy",level:3},{value:"Rewards Payout Account",id:"rewards-payout-account",level:3},{value:"Nominating with the Polkadot-JS UI",id:"nominating-with-the-polkadot-js-ui",level:2},{value:"Targets Page",id:"targets-page",level:3},{value:"Bags-list",id:"bags-list",level:3},{value:"Validator Stats",id:"validator-stats",level:3},{value:"Nominating with the Staking Dashboard",id:"nominating-with-the-staking-dashboard",level:2},{value:"Staking Election Stages",id:"staking-election-stages",level:2},{value:"The Election Solution Set",id:"the-election-solution-set",level:3},{value:"Receiving Rewards",id:"receiving-rewards",level:2},{value:"Good Nominator Practices",id:"good-nominator-practices",level:2},{value:"Required Minimum Stake",id:"required-minimum-stake",level:3},{value:"Avoiding Oversubscribed Validators",id:"avoiding-oversubscribed-validators",level:3},{value:"Active vs. Inactive Nomination",id:"active-vs-inactive-nomination",level:3},{value:"Minimum Active Nomination to Receive Staking Rewards",id:"minimum-active-nomination-to-receive-staking-rewards",level:3},{value:"Guides",id:"guides",level:2}],u={toc:p},c="wrapper";function k(t){var e=t.components,l=(0,o.Z)(t,s);return(0,i.kt)(c,(0,n.Z)({},u,l,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{title:"New to Staking?",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"Start your staking journey or explore more information about staking on\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/staking/"},"Polkadot's Home Page"),". You can learn how staking works by\nreading ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"this dedicated page"),"."),(0,i.kt)("p",{parentName:"admonition"},"Discover the new ",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},(0,i.kt)("strong",{parentName:"a"},"Staking Dashboard"))," that makes\nstaking much easier and check this\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182104"},"extensive article list")," to\nhelp you get started.\nYou can now ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/blog/nomination-pools-are-live-stake-natively-with-just-1-dot/"},"stake natively with just 1 DOT and earn staking rewards"),".\n")),(0,i.kt)("admonition",{title:"Stake through Nomination Pools",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The minimum amount required to become an active nominator and earn rewards may change from era to\nera.\nIt is currently ",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minimumActiveStake",defaultValue:2937e9,filter:"humanReadable",mdxType:"RPC"})),".\n","\nIf you have less DOT than the minimum active\nnomination and still want to participate in staking, you can join the nomination pools. You can now\nstake on Polkadot natively with just\n",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.minJoinBond",filter:"humanReadable",defaultValue:1e10,mdxType:"RPC"})),"\n","\nin the nomination pools and earn staking rewards. For additional information, see\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/blog/nomination-pools-are-live-stake-natively-with-just-1-dot/"},"this blog post"),".\nCheck the wiki doc on ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pools")," for more information.")),(0,i.kt)("p",null,"If you landed on this page, you decided to understand how you can be a good nominator. Note, this\npage is not for ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pool")," members, although pool members might\ngain essential knowledge about how to choose nomination pools."),(0,i.kt)("p",null,"The information provided on this page is complementary to that on the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking"},(0,i.kt)("strong",{parentName:"a"},"Staking Page"))," and ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced"},(0,i.kt)("strong",{parentName:"a"},"Advanced Staking Page")),".\nMake sure you read those pages as well before nominating."),(0,i.kt)("h2",{id:"who-are-nominators"},"Who are Nominators?"),(0,i.kt)("p",null,"Nominators are one type of participant in the staking subsystem of\nPolkadot. They appoint their stake to the\nvalidators, the second type of participant. By appointing their stake, they can elect the active set\nof validators and share in the rewards that are paid out."),(0,i.kt)("p",null,"While the ",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-validate-polkadot"},"validators")," are active\nparticipants in the network that engage in the block production and finality mechanisms, nominators\ntake a slightly more passive role. Being a nominator does not require running a node of your own or\nworrying about online uptime. However, a good nominator performs due diligence on the validators\nthat they elect. When looking for validators to nominate, a nominator should pay attention to their\nown reward percentage for nominating a specific validator - as well as the risk that they bear of\nbeing ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking#slashing"},"slashed")," if the validator gets slashed."),(0,i.kt)("h2",{id:"why-nominate"},"Why Nominate?"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"You become part of the Polkadot movement, a\ngroup of diverse professionals and enthusiasts around the world aspiring to build and foster the\nnext-gen Internet, Web3: a decentralized, privacy-focused, and trustless internet."),(0,i.kt)("li",{parentName:"ul"},"You are an essential piece of the puzzle, keeping\nPolkadot secure. The bonded balance can be\nused to vote in ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-polkadot-opengov"},"Polkadot OpenGov")," and shape the future direction of\nPolkadot."),(0,i.kt)("li",{parentName:"ul"},"You will start to understand how Polkadot\nworks at a technical-level. When you feel comfortable with your nomination skills and knowledge,\nyou can open your ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-nomination-pools"},"nomination pool"),", help others secure the network\nand earn rewards, and build your reputation as a trusted nomination pool operator. If you like to\nbe more involved, the next step is to become a ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-validator"},"validator"),"."),(0,i.kt)("li",{parentName:"ul"},"By getting ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking"},"staking")," rewards you keep up with or (likely) stay ahead of\nPolkadot inflation.")),(0,i.kt)("p",null,"Nominators secure the Relay Chain by staking DOT\nand nominating validators. You may have an account with\nDOT and want to earn fresh\nDOT. You could do so as a validator, which\nrequires experience setting up a node and running and maintaining it 24/7."),(0,i.kt)("p",null,"On Polkadot you can also earn\nDOT by nominating one or more validators. Doing\nso makes you a nominator for the validator(s) you chose. Pick your validators carefully - if they do\nnot behave properly, they will get slashed, and you will lose\nDOT. However, if they follow the network rules,\nyou can share the staking rewards they generate."),(0,i.kt)("p",null,"While your DOT are staked for nominations, they\nare 'locked' (bonded). You can\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-guides-staking#stop-nominating"},"stop nominating at any time"),", but remember that the\naction is effective in the next era and does not automatically unbond your funds. Unbonding is a\nseparate action, and it takes effect after the unbonding period, which is\n28-day long on Polkadot. This is\ncalculated by taking the ",(0,i.kt)("strong",{parentName:"p"},"bonding duration")," (in eras), multiplying it by the ",(0,i.kt)("strong",{parentName:"p"},"length of a single\nera")," (in hours), and dividing by the ",(0,i.kt)("strong",{parentName:"p"},"hours in a day")," (24). Example:\n(28 \xd7 24 \xf7 24 = 28 days). A\nstaking lock will be visible on the Polkadot-JS UI during the unbonding period, and after it, the\nstaking lock can be unlocked, and the bonded funds become free balance you can transfer."),(0,i.kt)("admonition",{title:"Fast Unstaking",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"If you accidentally bonded your DOT or your\nbonded DOT never backed any active validator, you\ncan now unbond them immediately.")),(0,i.kt)("p",null,"If your bonded balance did not back any validators in the last\n28 days on Polkadot (when the feature goes live),\nyou are eligible to perform fast unstaking. The\n",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},"staking dashboard")," will automatically check if you\nqualify. For more information, visit the\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169433-can-i-transfer-dot-without-unbonding-and-waiting-28-days-"},'"Fast Unstake" section in this support article'),"."),(0,i.kt)("h2",{id:"setting-up-accounts"},"Setting-up Accounts"),(0,i.kt)("h3",{id:"stash--staking-proxy"},"Stash & Staking Proxy"),(0,i.kt)("p",null,"Nominators are recommended to set up separate stash and staking proxy accounts. Explanation and the\nreasoning for generating distinct accounts for this purpose is elaborated in the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-cryptography#keys"},"keys section"),"."),(0,i.kt)("p",null,"You can generate your stash and staking proxy account via any of the recommended methods, which are\ndetailed on the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-accounts#account-generation"},"account generation")," page. The first\nthing you need to do before becoming a nominator is to make sure you have a\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking/#stash-account-and-staking-proxy"},(0,i.kt)("strong",{parentName:"a"},"stash account")),' where you can transfer\nfunds you want to use for staking. For these accounts, it is recommended to use a "cold wallet"\nsolution such as ',(0,i.kt)("a",{parentName:"p",href:"/docs/ledger"},"Ledger")," or ",(0,i.kt)("a",{parentName:"p",href:"/docs/polkadot-vault"},"Polkadot Vault"),"."),(0,i.kt)("p",null,"After setting up the stash account, it is recommended to have a\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced/#staking-proxies"},(0,i.kt)("strong",{parentName:"a"},"staking proxy")),". Although you can be a nominator\nwith just a stash account, having a staking proxy is good practice for security reasons."),(0,i.kt)("p",null,"A staking proxy of the stash will be able to sign for all staking-related transactions as well. The\nstash will be fully isolated (except if the user decides to change the staking proxy of the stash or\nto attach different proxies to the stash)."),(0,i.kt)("h3",{id:"rewards-payout-account"},"Rewards Payout Account"),(0,i.kt)("p",null,"As a nominator, you will be asked to choose an account where rewards will be paid. You can select\none of the following options:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"back to staking: rewards are compounded to the bonded amount."),(0,i.kt)("li",{parentName:"ul"},"to stash: rewards are sent to the stash account as a free balance."),(0,i.kt)("li",{parentName:"ul"},"to another account: rewards are sent to a user-defined account (not stash).")),(0,i.kt)("p",null,"Starting with runtime version v23 natively included in the client version\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot/releases/tag/v0.8.23"},"0.8.23"),", payouts can go to any custom\naddress. If you'd like to redirect payments to an account that is neither the staking proxy nor the\nstash account, set one up. Note that setting an exchange address as the recipient of the staking\nrewards is extremely unsafe."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Being a nominator is made simpler by using the\n",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},(0,i.kt)("strong",{parentName:"a"},"Staking Dashboard"))," that will guide you step by\nstep through specifying rewards destination and bonded amount, and nominating validators (more on\nthis below). Note that staking proxies are not currently supported on the dashboard.")),(0,i.kt)("h2",{id:"nominating-with-the-polkadot-js-ui"},"Nominating with the Polkadot-JS UI"),(0,i.kt)("h3",{id:"targets-page"},"Targets Page"),(0,i.kt)("p",null,"There are many factors to consider when deciding which of your nominations. One helpful tool to\nchoose validators is the Staking ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/targets"},"Targets")," table in\nthe Polkadot-JS UI. This allows sorting validators using various metrics. Below are the relevant\nmetrics shown as an example, followed by a brief description of each."),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"validator"),(0,i.kt)("th",{parentName:"tr",align:null},"payout"),(0,i.kt)("th",{parentName:"tr",align:null},"nominators"),(0,i.kt)("th",{parentName:"tr",align:null},"comm."),(0,i.kt)("th",{parentName:"tr",align:null},"total stake"),(0,i.kt)("th",{parentName:"tr",align:null},"own stake"),(0,i.kt)("th",{parentName:"tr",align:null},"return"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"A"),(0,i.kt)("td",{parentName:"tr",align:null},"recently"),(0,i.kt)("td",{parentName:"tr",align:null},"1 (",(0,i.kt)("inlineCode",{parentName:"td"},"active"),") 4 (",(0,i.kt)("inlineCode",{parentName:"td"},"all"),")"),(0,i.kt)("td",{parentName:"tr",align:null},"3%"),(0,i.kt)("td",{parentName:"tr",align:null},"1.6 MDOT"),(0,i.kt)("td",{parentName:"tr",align:null},"8500 DOT"),(0,i.kt)("td",{parentName:"tr",align:null},"17.8%")))),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"payout"),": How recently the validator made its last reward payout to nominators.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"nominators"),": This column consists of two number values. The ",(0,i.kt)("strong",{parentName:"p"},"active")," count (left number) is\nthe number of nominators whose stake is baking the validator in the current era. In this case\nValidator A has one active nominator. The total or ",(0,i.kt)("strong",{parentName:"p"},"all")," count (right number) is the number of\nall nominators who nominated Validator A. This includes the active count and all the other\nnominators whose stake in the current era is baking other validators."),(0,i.kt)("p",{parentName:"li"},"Be cautious of validators with a high number of subscribers. A validator is considered\noversubscribed when more than\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n","\nactive nominators are assigned to the validator. In this scenario, only the top\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n","\nnominators (sorted by stake) will receive rewards. The remaining nominators will not be rewarded.\nHowever, they can be slashed if the validator commits a slashable offense."),(0,i.kt)("p",{parentName:"li"},"Every nominator can select up to a maximum of 16\nvalidators, which contributes towards maximizing the probability of\nhaving the nominator\u2019s stake applied to the validators active set. Nominating too few validators\ncould result in the nominators not receiving their rewards when none of them make it to the active\nset or when those validators stop validating. The election algorithm attempts to maximize the\noverall network stake while minimizing the variance of the active stake across the validators. For\nadditional information on the election process, check out the research behind\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/protocols/NPoS"},"nominated proof-of-stake"),".")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"comm."),": Total commission kept by the validator (100% means the validator will keep all rewards\n, and thus nominators will not receive them). A validator's commission is the percentage of the\nvalidator reward taken by the validator before the rewards are split among the nominators. As a\nnominator, you may think that choosing validators with the lowest commission is best. However,\nvalidators must be able to run at break-even to continue operations sustainably. Independent\nvalidators that rely on the commission to cover their server costs help to keep the network\ndecentralized. Some validators, operated by central exchanges, etc., keep 100% of the commission\nto payout their staking service clients and therefore do not provide any rewards to external\nnominators. The commission is just one piece of the puzzle you should consider when picking\nnominating validators.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"total stake"),": The total amount of DOT tokens\nstaked by nominators and the validator (i.e. own stake, see below).")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"own stake"),': The amount of DOT tokens the\nvalidator has put up as a stake. A higher own stake can be considered as having more "skin in the\ngame". This can imply increased trustworthiness. However, a validator not having a large amount of\n"own stake" is not automatically untrustworthy, as the validator could nominate from a different\naddress.')),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"return"),": Average annual yield paid out to nominators (i.e. number of rewards divided by the\nnumber of bonded tokens). Note that nominating those with a higher yield may not guarantee similar\nfuture performance."))),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Staking Returns",src:a(53325).Z,width:"2169",height:"509"})),(0,i.kt)("p",null,"On the Targets page, you can use different filters to select validators with specific traits (where\na trait is a combination of the metrics above). Available filters are:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"one validator per operator"),": Do not show groups of validators run by a single operator. It\nshows small operators only who will likely have a higher commission and higher self-stake.\nNominating only small operators might not always guarantee staking rewards, but it helps to keep\nthe network more resilient to attacks.")),(0,i.kt)("admonition",{title:"Validator vs Operator",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"A validator is the node, the physical equipment with installed software that allows to produce new\nblocks and earn rewards. An operator is the entity responsible for setting up, running and\nmaintaining the node. An operator can have multiple validators under different sub-identities. For\nexample, ",(0,i.kt)("inlineCode",{parentName:"p"},"ZUG CAPITAL/07")," is one of the numerous validators belonging to the operator Zug Capital.")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"comm. < 20%"),": Do not show any validators with a commission of 20% or higher."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"with capacity"),": Do not show any validators who are currently operating\n",(0,i.kt)("a",{parentName:"li",href:"/docs/glossary#capacity"},"at capacity")," (i.e., could potentially be oversubscribed)."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"recent payouts"),": Only show validators that have recently caused a\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking-advanced"},"payout to be issued"),". Note that anyone can cause a payout to occur; it\ndoes not have to be the operator of a validator."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"currently elected"),": Only show validators in the active set (i.e., they have been elected to\nproduce blocks in the current era)."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"with an identity"),": Only show validators that have set an ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-identity"},"identity"),". Note\nthat this identity does not have to be verified by a registrar for the validator to appear in the\nlist.")),(0,i.kt)("admonition",{title:"Single Operators with Multiple Validators",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},'Recall that slashing is an additive function; the more validators offline or equivocating in a given\nsession, the harsher the penalties. Since validators that are controlled by a single operator are\nmore at risk of a "synchronized" failure, nominating them implies a greater risk of having a large\nslash of your nominated funds. Generally, it is safer to nominate validators whose behavior is\nindependent of others in many ways (different hardware, geographic location, owner, etc.).')),(0,i.kt)("h3",{id:"bags-list"},"Bags-list"),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"On Polkadot and Kusama, the instance of the pallet\n",(0,i.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/pallet_bags_list/"},"Bags-List")," is named as\n",(0,i.kt)("inlineCode",{parentName:"p"},"voterList"),".")),(0,i.kt)("p",null,"Nominating accounts are placed in a semi-sorted list called bags-list. This sorting functionality is\nextremely important for the long-term improvements of the staking/election system. Bags-list allows\nup to\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.maxNominatorsCount",defaultValue:5e4,mdxType:"RPC"}),"\n","\nnominators to set their intention to nominate, of which the stake of the top\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.maxElectingVoters",defaultValue:22500,mdxType:"RPC"}),"\n","\nnominators is considered for ",(0,i.kt)("a",{parentName:"p",href:"#staking-election-stages"},"electing set")," that eventually determines the\nactive validators."),(0,i.kt)("p",null,"The nominator accounts in a bag are sorted based on their insertion order, not by their nomination\nstake. The ",(0,i.kt)("inlineCode",{parentName:"p"},"voterList.putInFrontOf")," extrinsic can be issued to move up in the bag, which might be\nvery useful for the accounts in the last bag eligible for receiving staking rewards. Balance changes\ndue to staking rewards or slashing do not automatically rebag the account. Whenever applicable,\nPolkadot JS Apps UI prompts the nominator account to rebag or move up by calling the\n",(0,i.kt)("inlineCode",{parentName:"p"},"voterList.rebag")," extrinsic."),(0,i.kt)("p",null,"For guidelines about how to rebag or move your account within a bag, see the followings:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},'The "Bags List" Section on\n',(0,i.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000181018-i-have-more-than-the-minimum-bonded-but-i-m-not-getting-rewards"},"this Support Page"),"."),(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking-advanced#bags-list"},"Bags List Section")," in Advanced Staking Concepts."),(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("a",{parentName:"li",href:"https://youtu.be/hIIZRJLrBZA"},"dedicated technical explainer video"),".")),(0,i.kt)("h3",{id:"validator-stats"},"Validator Stats"),(0,i.kt)("p",null,"Nominators can query ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/query/"},"validator histories")," to see\nstatistics such as era points, elected stake, rewards and slashes, and commission. It is good\npractice to do comprehensive research on validator candidates. This could include (but should not be\nlimited to) checking the validators' ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-identity"},"identity")," (if they have set one) and going\nover the validators' websites to see who they are, what kind of infrastructure setup they are using,\nreputation, the vision behind the validator, and more."),(0,i.kt)("p",null,"Any problematic behavior must be taken seriously. An example of problematic behavior will be if a\nvalidator is regularly offline. In this case, nominators most likely would get fewer rewards. If\nmany validators are ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking#unresponsiveness"},"unreachable"),", such validators and\ncorresponding nominators will be slashed."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Validator Stats",src:a(95520).Z,width:"1900",height:"1204"})),(0,i.kt)("h2",{id:"nominating-with-the-staking-dashboard"},"Nominating with the Staking Dashboard"),(0,i.kt)("p",null,"If you are a beginner, please watch the video below for detailed instructions."),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=F59N3YKYCRs"},(0,i.kt)("img",{parentName:"a",src:"https://img.youtube.com/vi/F59N3YKYCRs/0.jpg",alt:"Staking Tutorial"}))),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"/docs/staking-dashboard"},"Polkadot Staking Dashboard")," allows to choose pre-selected\nlists of validators based on user preference, or to manually select validators similarly as in the\nPolkadot-JS UI."),(0,i.kt)("p",null,"Pre-selected choices are:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Optimal Selection: Selects a mix of majority active and inactive validators."),(0,i.kt)("li",{parentName:"ul"},"Active Low Commission: Gets a set of active validators with low commission."),(0,i.kt)("li",{parentName:"ul"},"From Favorites: Gets a set of your favorite validators.")),(0,i.kt)("h2",{id:"staking-election-stages"},"Staking Election Stages"),(0,i.kt)("p",null,'The staking election system has three stages for both validators and nominators, namely "intention",\n"electable/electing", and "active".'),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"intention to nominate:"),' an account that has stated the intention to nominate; also called\nsimply a "nominator".'),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"electing nominator:")," a nominator who is selected to be a part of the input to the\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-phragmen"},"NPoS election algorithm"),". This selection is based on stake and is made using\nthe ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking-advanced#bags-list"},"bags-list"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"active nominator:")," a nominator who came out of the NPoS election algorithm backing an active\nvalidator. Staking rewards are received by the top\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\nnominators ranked by stake. When slashing occurs, all the active nominators backing the validator\nget slashed (also those who do not receive rewards due to oversubscription issues).")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Nominator Election",src:a(55404).Z,width:"612",height:"430"})),(0,i.kt)("h3",{id:"the-election-solution-set"},"The Election Solution Set"),(0,i.kt)("p",null,'Determining which validators are in the active set and which nominators are nominating them creates\na very large graph mapping nominators to their respective validators. This "solution set" is\ncomputed off-chain and submitted to the chain, which means it must fit in a single block. If there\nare a large number of nominators, this means that some nominators must be eliminated. Currently,\nnominators are sorted by the amount of DOT staked, and those with more DOT are prioritized. This\nmeans that you may not receive rewards if you are staking with a small amount of DOT. This minimal\namount is dynamic based on the number of validators, nominators, amount nominated, and other\nfactors.'),(0,i.kt)("h2",{id:"receiving-rewards"},"Receiving Rewards"),(0,i.kt)("p",null,"As long as you have nominated more than one validator candidate, at least one of them got elected,\nand you are nominating with enough stake to get into the solution set, your bonded stake will be\nfully distributed to one or more validators. That being said, you may not receive rewards if you\nnominated very few validator candidates and no one got elected, or your stake is small, and you only\nselected oversubscribed validators, or the validator you are nominating has 100% commission. It is\ngenerally wise to choose as many trustworthy validators as you can\n(up to 16) to reduce the risk of none of\nyour nominated validators being elected."),(0,i.kt)("admonition",{title:"Not receiving Staking Rewards?",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"To explore the possible reasons for not receiving staking rewards, check out the followings:"),(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},"The\n",(0,i.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000181959-staking-faq-s"},"Staking FAQ"),"\non the Support Pages."),(0,i.kt)("li",{parentName:"ul"},"The\n",(0,i.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/Polkadot/comments/10kurje/why_am_i_not_receiving_staking_rewards/"},'"Why am I not receiving staking rewards?"'),"\nReddit article."),(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking#why-am-i-not-receiving-rewards"},'"Why am I not receiving staking rewards?"'),"\nsection on the Staking Page."))),(0,i.kt)("p",null,"Rewards are ",(0,i.kt)("em",{parentName:"p"},"lazy")," - somebody must trigger a payout for a validator for rewards to go to all of the\nvalidator's nominators. Any account can do this, although validator operators often do this as a\nservice to their nominators. See the page on ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced"},"Simple Payouts")," for more\ninformation and instructions for claiming rewards."),(0,i.kt)("admonition",{title:"Explainer videos on Nominating",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"These concepts have been further explained in the following videos:"),(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=weG_uzdSs1E&list=PLOyWqupZ-WGuAuS00rK-pebTMAOxW41W8&index=4"},"Why Nominate on Polkadot & Kusama")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=K-a4CgVchvU&list=PLOyWqupZ-WGuAuS00rK-pebTMAOxW41W8&index=9"},"What to Consider when Nominating Validators on Polkadot and Kusama")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://youtu.be/FCXC0CDhyS4"},"Nominating/Staking on Polkadot and Kusama")))),(0,i.kt)("h2",{id:"good-nominator-practices"},"Good Nominator Practices"),(0,i.kt)("h3",{id:"required-minimum-stake"},"Required Minimum Stake"),(0,i.kt)("p",null,"Due to the way the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"Phragmen algorithm")," generates the solution set and due to the\nfact that the solution set must fit in a single block, a minimum number of DOT will be required to\nnominate with to receive staking rewards can change between the eras."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"min-intention-threshold:")," minimum stake to declare the intention to nominate. This parameter\ncan be updated via on-chain governance, and the most recent and up-to-date version can be found on\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/chainstate"},"chain state")," (select ",(0,i.kt)("strong",{parentName:"p"},"state query > staking >\nminimumNominatorBond"),")")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"min-electing:")," minimum stake among the electing nominators. Since this is almost always the\nsame as \u201cmin-active\u201d, it might not be reported.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"min-active:")," minimum stake among the active nominators. If your stake falls below this dynamic\nthreshold in a given era, you will not receive staking rewards for that era."))),(0,i.kt)("p",null,"Thus, for ",(0,i.kt)("strong",{parentName:"p"},"nominator counters"),", we have:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"count of nominator intentions and max possible nominator intentions\n(unlimited)\n",""),(0,i.kt)("li",{parentName:"ul"},"count of electing nominators, and maximum possible electing nominators\n(",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.maxElectingVoters",defaultValue:22500,mdxType:"RPC"}),")\n",""),(0,i.kt)("li",{parentName:"ul"},"count of active nominators and maximum possible active nominators\n(",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.maxElectingVoters",defaultValue:22500,mdxType:"RPC"}),")\n","")),(0,i.kt)("h3",{id:"avoiding-oversubscribed-validators"},"Avoiding Oversubscribed Validators"),(0,i.kt)("p",null,"Validators can only pay out to a certain number of nominators per era. This is currently set to\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n","\nbut can be modified via governance. If more than\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n",'\nnominators nominate the same validator, it is "oversubscribed", and only the top\n',(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n","\nstaked nominators (ranked by the amount of stake) are paid rewards. Other nominators will receive no\nrewards for that era, although their stake will still be used to calculate entry into the active\nvalidator set."),(0,i.kt)("p",null,"Although it is difficult to determine how many nominators will nominate a given validator in the\nnext era, one can estimate based on the current number of nominators. A validator with only 5\nnominators in this era, for instance, is unlikely to have more than\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n","\nin the next era. However, an already-oversubscribed validator with 1000 nominators this era is very\nlikely to be oversubscribed in the next era as well."),(0,i.kt)("p",null,"If you are not nominating with a large number of DOTs, you should try to avoid\n",(0,i.kt)("a",{parentName:"p",href:"/docs/glossary#oversubscribed"},"oversubscribed")," validators. It is not always easy to\ncalculate if the validator selected will be oversubscribed in the next session; one way to avoid\nchoosing potentially oversubscribed validators is to filter out any that are\n",(0,i.kt)("a",{parentName:"p",href:"/docs/glossary#capacity"},"at capacity")," on the Targets page."),(0,i.kt)("p",null,"Finally, if you have a minimal amount of DOTs close to the value of ",(0,i.kt)("inlineCode",{parentName:"p"},"minActiveNomination"),", you may\nneed to stake more DOT to get into the election set. The nominator-to-validator mapping solution\nneeds to be evaluated within a single block duration, and if there are too many nominators, the\nlowest-staked nominations will be dropped from even being considered to be part of the electing set.\nThis ",(0,i.kt)("inlineCode",{parentName:"p"},"minActiveNomination")," value is dynamic and will vary over time. You can read the blog post\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/polkadot-staking-an-update/"},'"Polkadot Staking: An Update"')," for more\ndetails."),(0,i.kt)("h3",{id:"active-vs-inactive-nomination"},"Active vs. Inactive Nomination"),(0,i.kt)("p",null,"When you go to the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/actions"},"Account actions")," under staking\npage, you should see your bonded accounts and nomination status. If not, you can follow\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-guides-staking#nominate-using-polkadot-js"},"this")," guide to configure it first. Your\nnominations will be effective in the next era; eras are roughly\n24 hours on Polkadot."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Nominations",src:a(44277).Z,width:"2878",height:"766"})),(0,i.kt)("p",null,'Suppose you have nominated five validator candidates, and three out of five were elected to the\nactive validator set; then you should see two of your nominations as "waiting", and most likely one\nas "active" and the rest as "inactive". Active or inactive nomination means your nominated\nvalidators have been elected to be in the validator set, whereas waiting means they did not get\nelected. Generally, you will only have a single validator have an active nomination, which means\nthat you are directly supporting it with your stake this era and thus potentially receiving staking\nrewards. Inactive nominators were validators elected for this era but which you are not actively\nsupporting. Every era, a new election will take place, and you may be assigned a different active\nnomination from the validators you selected.'),(0,i.kt)("p",null,"If you are committing a very large stake, you may have more than one active nomination. However, the\nelection algorithm attempts to minimize this situation, and it should not occur often, so you should\nalmost always see only a single active nomination per era. See the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen#optimizations"},"section on Phragm\xe9n optimization")," for more details."),(0,i.kt)("h3",{id:"minimum-active-nomination-to-receive-staking-rewards"},"Minimum Active Nomination to Receive Staking Rewards"),(0,i.kt)("admonition",{title:"Minimum DOT required to earn staking rewards",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The minimum DOT required to submit intent to nominate is\n",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minNominatorBond",defaultValue:1e12,filter:"humanReadable",mdxType:"RPC"})),"\n, but the minimum active nomination required to earn staking rewards is dynamic and may be much\nhigher, which can be viewed on\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/targets"},"Polkadot JS Apps > Network > Staking > Targets page"),".")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Minimum Active Nomination",src:a(95670).Z,width:"1436",height:"166"})),(0,i.kt)("h2",{id:"guides"},"Guides"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/learn-guides-staking#nominate-a-validator"},"Be a Nominator (Polkadot)")," - Guide on nominating\non the Kusama canary network."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"./learn-guides-staking#stop-nominating"},"Stop Being a Nominator (all networks)")," - Guide on\nstopping nominations and withdrawing tokens.")))}k.isMDXComponent=!0},53325:(t,e,a)=>{"use strict";a.d(e,{Z:()=>n});const n=a.p+"assets/images/nominators_target-d8652ac89f3cbb16528cd68808a32cf0.png"},95670:(t,e,a)=>{"use strict";a.d(e,{Z:()=>n});const n=a.p+"assets/images/min-active-nomination-bfbe67c2714eb5027c6a4f45608c9bc2.png"},55404:(t,e,a)=>{"use strict";a.d(e,{Z:()=>n});const n=a.p+"assets/images/nominator-election-ae25b5db36fa18b56fa58c5370127dd4.png"},44277:(t,e,a)=>{"use strict";a.d(e,{Z:()=>n});const n=a.p+"assets/images/polkadotjs_nominator_account-e0f5d58cd9cce279d6f462cde9f706f4.png"},95520:(t,e,a)=>{"use strict";a.d(e,{Z:()=>n});const n=a.p+"assets/images/validator_stats-57ec40656d6829e2ef791550116824d4.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/ff6596ea.e2df1014.js b/assets/js/ff6596ea.e2df1014.js new file mode 100644 index 000000000000..a374033f6f88 --- /dev/null +++ b/assets/js/ff6596ea.e2df1014.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[3842],{47940:(t,e,a)=>{"use strict";a.d(e,{Z:()=>p});var n=a(74165),o=a(15861),i=a(67294),r=a(87152),s=a(14741),l=a(67425);function d(t,e,a){return m.apply(this,arguments)}function m(){return(m=(0,o.Z)((0,n.Z)().mark((function t(e,a,o){var i,l,d,m,h;return(0,n.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:i=void 0,l=void 0,t.t0=e,t.next="polkadot"===t.t0?5:"kusama"===t.t0?7:"statemine"===t.t0?9:"statemint"===t.t0?11:13;break;case 5:return i="wss://rpc.polkadot.io",t.abrupt("break",14);case 7:return i="wss://kusama-rpc.polkadot.io/",t.abrupt("break",14);case 9:return i="wss://statemine-rpc.polkadot.io/",t.abrupt("break",14);case 11:return i="wss://statemint-rpc.polkadot.io/",t.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==i){t.next=18;break}return t.abrupt("return");case 18:return d=new r.U(i),t.next=21,s.G.create({provider:d});case 21:m=t.sent,(h=a.split(".")).forEach((function(t){t in m&&(m=m[t])})),t.t1=h[0],t.next="consts"===t.t1?27:"query"===t.t1?29:34;break;case 27:return l=m.toString(),t.abrupt("break",35);case 29:return t.next=31,m();case 31:return l=(l=t.sent).toString(),t.abrupt("break",35);case 34:console.log("Unknown path prefix ("+h[0]+") in "+a);case 35:return t.abrupt("return",l);case 36:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function h(t,e,a,n){switch(e){case"humanReadable":(0,l.HumanReadable)(t,a,n);break;case"precise":(0,l.Precise)(t,a,n);break;case"blocksToDays":(0,l.BlocksToDays)(t,n);break;case"erasToDays":(0,l.ErasToDays)(t,n,a);break;case"percentage":(0,l.Percentage)(t,n);break;case"permillToPercent":(0,l.PermillToPercent)(t,n);break;case"arrayLength":(0,l.ArrayLength)(t,n);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(t){var e=t.network,a=t.path,r=t.defaultValue,s=t.filter,l=void 0===s?void 0:s,m=(0,i.useState)(""),p=m[0],u=m[1];return e=e.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?h(r.toString(),l,e,u):u(r.toString());var t=void 0;switch(e){case"polkadot":t="wss://rpc.polkadot.io";break;case"kusama":t="wss://kusama-rpc.polkadot.io/";break;case"statemine":t="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":t="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+e)}if(void 0===t)console.log("Failed to connect to a valid websocket, applying default");else{var i=function(){var t=(0,o.Z)((0,n.Z)().mark((function t(){var o;return(0,n.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,d(e,a,u);case 2:if(void 0!==(o=t.sent)){t.next=7;break}return t.abrupt("return");case 7:void 0!==l?h(o,l,e,u):u(o);case 8:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}();try{i()}catch(s){console.log(s)}}}),[]),p}},67425:t=>{var e="polkadot",a="kusama",n="statemine",o="statemint",i={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};t.exports={HumanReadable:function(t,r,s){var l=void 0;if(r===e||r===o)l=3;else{if(r!==a&&r!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}t=parseFloat(t),s((t=Number.isInteger(t/i[r].precision)?t/i[r].precision+" "+i[r].symbol:(t/i[r].precision).toFixed(l)+" "+i[r].symbol).toString())},Precise:function(t,e,a){a(t=(t=parseFloat(t))/i[e].precision+" "+i[e].symbol)},BlocksToDays:function(t,e){e((t=6*t/86400).toString())},ErasToDays:function(t,i,r){var s=void 0;if(r===e||r===o)s=1;else{if(r!==a&&r!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}i((t/=s).toString())},Percentage:function(t,e){e((t/=1e7).toString())},PermillToPercent:function(t,e){e((t/=1e4).toString())},ArrayLength:function(t,e){e((t=t.split(",").length).toString())}}},25398:(t,e,a)=>{"use strict";a.r(e),a.d(e,{assets:()=>h,contentTitle:()=>d,default:()=>k,frontMatter:()=>l,metadata:()=>m,toc:()=>p});var n=a(87462),o=a(63366),i=(a(67294),a(3905)),r=a(47940),s=["components"],l={id:"learn-nominator",title:"Nominator",sidebar_label:"Nominator",description:"Role of Nominators in the Polkadot Ecosystem.",keyword:["nominate","nominator","stake","staking"],slug:"../learn-nominator"},d=void 0,m={unversionedId:"learn/learn-nominator",id:"learn/learn-nominator",title:"Nominator",description:"Role of Nominators in the Polkadot Ecosystem.",source:"@site/../docs/learn/learn-nominator.md",sourceDirName:"learn",slug:"/learn-nominator",permalink:"/docs/learn-nominator",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-nominator.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-nominator",title:"Nominator",sidebar_label:"Nominator",description:"Role of Nominators in the Polkadot Ecosystem.",keyword:["nominate","nominator","stake","staking"],slug:"../learn-nominator"},sidebar:"docs",previous:{title:"Collator",permalink:"/docs/learn-collator"},next:{title:"Validator",permalink:"/docs/learn-validator"}},h={},p=[{value:"Who are Nominators?",id:"who-are-nominators",level:2},{value:"Why Nominate?",id:"why-nominate",level:2},{value:"Setting-up Accounts",id:"setting-up-accounts",level:2},{value:"Stash & Staking Proxy",id:"stash--staking-proxy",level:3},{value:"Rewards Payout Account",id:"rewards-payout-account",level:3},{value:"Nominating with the Polkadot-JS UI",id:"nominating-with-the-polkadot-js-ui",level:2},{value:"Targets Page",id:"targets-page",level:3},{value:"Bags-list",id:"bags-list",level:3},{value:"Validator Stats",id:"validator-stats",level:3},{value:"Nominating with the Staking Dashboard",id:"nominating-with-the-staking-dashboard",level:2},{value:"Staking Election Stages",id:"staking-election-stages",level:2},{value:"The Election Solution Set",id:"the-election-solution-set",level:3},{value:"Receiving Rewards",id:"receiving-rewards",level:2},{value:"Good Nominator Practices",id:"good-nominator-practices",level:2},{value:"Required Minimum Stake",id:"required-minimum-stake",level:3},{value:"Avoiding Oversubscribed Validators",id:"avoiding-oversubscribed-validators",level:3},{value:"Active vs. Inactive Nomination",id:"active-vs-inactive-nomination",level:3},{value:"Minimum Active Nomination to Receive Staking Rewards",id:"minimum-active-nomination-to-receive-staking-rewards",level:3},{value:"Guides",id:"guides",level:2}],u={toc:p},c="wrapper";function k(t){var e=t.components,l=(0,o.Z)(t,s);return(0,i.kt)(c,(0,n.Z)({},u,l,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{title:"New to Staking?",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"Start your staking journey or explore more information about staking on\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/staking/"},"Polkadot's Home Page"),". You can learn how staking works by\nreading ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"this dedicated page"),"."),(0,i.kt)("p",{parentName:"admonition"},"Discover the new ",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},(0,i.kt)("strong",{parentName:"a"},"Staking Dashboard"))," that makes\nstaking much easier and check this\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182104"},"extensive article list")," to\nhelp you get started.\nYou can now ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/blog/nomination-pools-are-live-stake-natively-with-just-1-dot/"},"stake natively with just 1 DOT and earn staking rewards"),".\n")),(0,i.kt)("admonition",{title:"Stake through Nomination Pools",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The minimum amount required to become an active nominator and earn rewards may change from era to\nera.\nIt is currently ",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minimumActiveStake",defaultValue:2937e9,filter:"humanReadable",mdxType:"RPC"})),".\n","\nIf you have less DOT than the minimum active\nnomination and still want to participate in staking, you can join the nomination pools. You can now\nstake on Polkadot natively with just\n",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.minJoinBond",filter:"humanReadable",defaultValue:1e10,mdxType:"RPC"})),"\n","\nin the nomination pools and earn staking rewards. For additional information, see\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/blog/nomination-pools-are-live-stake-natively-with-just-1-dot/"},"this blog post"),".\nCheck the wiki doc on ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pools")," for more information.")),(0,i.kt)("p",null,"If you landed on this page, you decided to understand how you can be a good nominator. Note, this\npage is not for ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pool")," members, although pool members might\ngain essential knowledge about how to choose nomination pools."),(0,i.kt)("p",null,"The information provided on this page is complementary to that on the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking"},(0,i.kt)("strong",{parentName:"a"},"Staking Page"))," and ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced"},(0,i.kt)("strong",{parentName:"a"},"Advanced Staking Page")),".\nMake sure you read those pages as well before nominating."),(0,i.kt)("h2",{id:"who-are-nominators"},"Who are Nominators?"),(0,i.kt)("p",null,"Nominators are one type of participant in the staking subsystem of\nPolkadot. They appoint their stake to the\nvalidators, the second type of participant. By appointing their stake, they can elect the active set\nof validators and share in the rewards that are paid out."),(0,i.kt)("p",null,"While the ",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-validate-polkadot"},"validators")," are active\nparticipants in the network that engage in the block production and finality mechanisms, nominators\ntake a slightly more passive role. Being a nominator does not require running a node of your own or\nworrying about online uptime. However, a good nominator performs due diligence on the validators\nthat they elect. When looking for validators to nominate, a nominator should pay attention to their\nown reward percentage for nominating a specific validator - as well as the risk that they bear of\nbeing ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking#slashing"},"slashed")," if the validator gets slashed."),(0,i.kt)("h2",{id:"why-nominate"},"Why Nominate?"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"You become part of the Polkadot movement, a\ngroup of diverse professionals and enthusiasts around the world aspiring to build and foster the\nnext-gen Internet, Web3: a decentralized, privacy-focused, and trustless internet."),(0,i.kt)("li",{parentName:"ul"},"You are an essential piece of the puzzle, keeping\nPolkadot secure. The bonded balance can be\nused to vote in ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-polkadot-opengov"},"Polkadot OpenGov")," and shape the future direction of\nPolkadot."),(0,i.kt)("li",{parentName:"ul"},"You will start to understand how Polkadot\nworks at a technical-level. When you feel comfortable with your nomination skills and knowledge,\nyou can open your ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-nomination-pools"},"nomination pool"),", help others secure the network\nand earn rewards, and build your reputation as a trusted nomination pool operator. If you like to\nbe more involved, the next step is to become a ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-validator"},"validator"),"."),(0,i.kt)("li",{parentName:"ul"},"By getting ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking"},"staking")," rewards you keep up with or (likely) stay ahead of\nPolkadot inflation.")),(0,i.kt)("p",null,"Nominators secure the Relay Chain by staking DOT\nand nominating validators. You may have an account with\nDOT and want to earn fresh\nDOT. You could do so as a validator, which\nrequires experience setting up a node and running and maintaining it 24/7."),(0,i.kt)("p",null,"On Polkadot you can also earn\nDOT by nominating one or more validators. Doing\nso makes you a nominator for the validator(s) you chose. Pick your validators carefully - if they do\nnot behave properly, they will get slashed, and you will lose\nDOT. However, if they follow the network rules,\nyou can share the staking rewards they generate."),(0,i.kt)("p",null,"While your DOT are staked for nominations, they\nare 'locked' (bonded). You can\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-guides-nominator#stop-nominating"},"stop nominating at any time"),", but remember that the\naction is effective in the next era and does not automatically unbond your funds. Unbonding is a\nseparate action, and it takes effect after the unbonding period, which is\n28-day long on Polkadot. This is\ncalculated by taking the ",(0,i.kt)("strong",{parentName:"p"},"bonding duration")," (in eras), multiplying it by the ",(0,i.kt)("strong",{parentName:"p"},"length of a single\nera")," (in hours), and dividing by the ",(0,i.kt)("strong",{parentName:"p"},"hours in a day")," (24). Example:\n(28 \xd7 24 \xf7 24 = 28 days). A\nstaking lock will be visible on the Polkadot-JS UI during the unbonding period, and after it, the\nstaking lock can be unlocked, and the bonded funds become free balance you can transfer."),(0,i.kt)("admonition",{title:"Fast Unstaking",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"If you accidentally bonded your DOT or your\nbonded DOT never backed any active validator, you\ncan now unbond them immediately.")),(0,i.kt)("p",null,"If your bonded balance did not back any validators in the last\n28 days on Polkadot (when the feature goes live),\nyou are eligible to perform fast unstaking. The\n",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},"staking dashboard")," will automatically check if you\nqualify. For more information, visit the\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169433-can-i-transfer-dot-without-unbonding-and-waiting-28-days-"},'"Fast Unstake" section in this support article'),"."),(0,i.kt)("h2",{id:"setting-up-accounts"},"Setting-up Accounts"),(0,i.kt)("h3",{id:"stash--staking-proxy"},"Stash & Staking Proxy"),(0,i.kt)("p",null,"Nominators are recommended to set up separate stash and staking proxy accounts. Explanation and the\nreasoning for generating distinct accounts for this purpose is elaborated in the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-cryptography#keys"},"keys section"),"."),(0,i.kt)("p",null,"You can generate your stash and staking proxy account via any of the recommended methods, which are\ndetailed on the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-accounts#account-generation"},"account generation")," page. The first\nthing you need to do before becoming a nominator is to make sure you have a\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking/#stash-account-and-staking-proxy"},(0,i.kt)("strong",{parentName:"a"},"stash account")),' where you can transfer\nfunds you want to use for staking. For these accounts, it is recommended to use a "cold wallet"\nsolution such as ',(0,i.kt)("a",{parentName:"p",href:"/docs/ledger"},"Ledger")," or ",(0,i.kt)("a",{parentName:"p",href:"/docs/polkadot-vault"},"Polkadot Vault"),"."),(0,i.kt)("p",null,"After setting up the stash account, it is recommended to have a\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced/#staking-proxies"},(0,i.kt)("strong",{parentName:"a"},"staking proxy")),". Although you can be a nominator\nwith just a stash account, having a staking proxy is good practice for security reasons."),(0,i.kt)("p",null,"A staking proxy of the stash will be able to sign for all staking-related transactions as well. The\nstash will be fully isolated (except if the user decides to change the staking proxy of the stash or\nto attach different proxies to the stash)."),(0,i.kt)("h3",{id:"rewards-payout-account"},"Rewards Payout Account"),(0,i.kt)("p",null,"As a nominator, you will be asked to choose an account where rewards will be paid. You can select\none of the following options:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"back to staking: rewards are compounded to the bonded amount."),(0,i.kt)("li",{parentName:"ul"},"to stash: rewards are sent to the stash account as a free balance."),(0,i.kt)("li",{parentName:"ul"},"to another account: rewards are sent to a user-defined account (not stash).")),(0,i.kt)("p",null,"Starting with runtime version v23 natively included in the client version\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot/releases/tag/v0.8.23"},"0.8.23"),", payouts can go to any custom\naddress. If you'd like to redirect payments to an account that is neither the staking proxy nor the\nstash account, set one up. Note that setting an exchange address as the recipient of the staking\nrewards is extremely unsafe."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Being a nominator is made simpler by using the\n",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},(0,i.kt)("strong",{parentName:"a"},"Staking Dashboard"))," that will guide you step by\nstep through specifying rewards destination and bonded amount, and nominating validators (more on\nthis below). Note that staking proxies are not currently supported on the dashboard.")),(0,i.kt)("h2",{id:"nominating-with-the-polkadot-js-ui"},"Nominating with the Polkadot-JS UI"),(0,i.kt)("h3",{id:"targets-page"},"Targets Page"),(0,i.kt)("p",null,"There are many factors to consider when deciding which of your nominations. One helpful tool to\nchoose validators is the Staking ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/targets"},"Targets")," table in\nthe Polkadot-JS UI. This allows sorting validators using various metrics. Below are the relevant\nmetrics shown as an example, followed by a brief description of each."),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"validator"),(0,i.kt)("th",{parentName:"tr",align:null},"payout"),(0,i.kt)("th",{parentName:"tr",align:null},"nominators"),(0,i.kt)("th",{parentName:"tr",align:null},"comm."),(0,i.kt)("th",{parentName:"tr",align:null},"total stake"),(0,i.kt)("th",{parentName:"tr",align:null},"own stake"),(0,i.kt)("th",{parentName:"tr",align:null},"return"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"A"),(0,i.kt)("td",{parentName:"tr",align:null},"recently"),(0,i.kt)("td",{parentName:"tr",align:null},"1 (",(0,i.kt)("inlineCode",{parentName:"td"},"active"),") 4 (",(0,i.kt)("inlineCode",{parentName:"td"},"all"),")"),(0,i.kt)("td",{parentName:"tr",align:null},"3%"),(0,i.kt)("td",{parentName:"tr",align:null},"1.6 MDOT"),(0,i.kt)("td",{parentName:"tr",align:null},"8500 DOT"),(0,i.kt)("td",{parentName:"tr",align:null},"17.8%")))),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"payout"),": How recently the validator made its last reward payout to nominators.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"nominators"),": This column consists of two number values. The ",(0,i.kt)("strong",{parentName:"p"},"active")," count (left number) is\nthe number of nominators whose stake is baking the validator in the current era. In this case\nValidator A has one active nominator. The total or ",(0,i.kt)("strong",{parentName:"p"},"all")," count (right number) is the number of\nall nominators who nominated Validator A. This includes the active count and all the other\nnominators whose stake in the current era is baking other validators."),(0,i.kt)("p",{parentName:"li"},"Be cautious of validators with a high number of subscribers. A validator is considered\noversubscribed when more than\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n","\nactive nominators are assigned to the validator. In this scenario, only the top\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n","\nnominators (sorted by stake) will receive rewards. The remaining nominators will not be rewarded.\nHowever, they can be slashed if the validator commits a slashable offense."),(0,i.kt)("p",{parentName:"li"},"Every nominator can select up to a maximum of 16\nvalidators, which contributes towards maximizing the probability of\nhaving the nominator\u2019s stake applied to the validators active set. Nominating too few validators\ncould result in the nominators not receiving their rewards when none of them make it to the active\nset or when those validators stop validating. The election algorithm attempts to maximize the\noverall network stake while minimizing the variance of the active stake across the validators. For\nadditional information on the election process, check out the research behind\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/protocols/NPoS"},"nominated proof-of-stake"),".")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"comm."),": Total commission kept by the validator (100% means the validator will keep all rewards\n, and thus nominators will not receive them). A validator's commission is the percentage of the\nvalidator reward taken by the validator before the rewards are split among the nominators. As a\nnominator, you may think that choosing validators with the lowest commission is best. However,\nvalidators must be able to run at break-even to continue operations sustainably. Independent\nvalidators that rely on the commission to cover their server costs help to keep the network\ndecentralized. Some validators, operated by central exchanges, etc., keep 100% of the commission\nto payout their staking service clients and therefore do not provide any rewards to external\nnominators. The commission is just one piece of the puzzle you should consider when picking\nnominating validators.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"total stake"),": The total amount of DOT tokens\nstaked by nominators and the validator (i.e. own stake, see below).")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"own stake"),': The amount of DOT tokens the\nvalidator has put up as a stake. A higher own stake can be considered as having more "skin in the\ngame". This can imply increased trustworthiness. However, a validator not having a large amount of\n"own stake" is not automatically untrustworthy, as the validator could nominate from a different\naddress.')),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"return"),": Average annual yield paid out to nominators (i.e. number of rewards divided by the\nnumber of bonded tokens). Note that nominating those with a higher yield may not guarantee similar\nfuture performance."))),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Staking Returns",src:a(53325).Z,width:"2169",height:"509"})),(0,i.kt)("p",null,"On the Targets page, you can use different filters to select validators with specific traits (where\na trait is a combination of the metrics above). Available filters are:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"one validator per operator"),": Do not show groups of validators run by a single operator. It\nshows small operators only who will likely have a higher commission and higher self-stake.\nNominating only small operators might not always guarantee staking rewards, but it helps to keep\nthe network more resilient to attacks.")),(0,i.kt)("admonition",{title:"Validator vs Operator",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"A validator is the node, the physical equipment with installed software that allows to produce new\nblocks and earn rewards. An operator is the entity responsible for setting up, running and\nmaintaining the node. An operator can have multiple validators under different sub-identities. For\nexample, ",(0,i.kt)("inlineCode",{parentName:"p"},"ZUG CAPITAL/07")," is one of the numerous validators belonging to the operator Zug Capital.")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"comm. < 20%"),": Do not show any validators with a commission of 20% or higher."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"with capacity"),": Do not show any validators who are currently operating\n",(0,i.kt)("a",{parentName:"li",href:"/docs/glossary#capacity"},"at capacity")," (i.e., could potentially be oversubscribed)."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"recent payouts"),": Only show validators that have recently caused a\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking-advanced"},"payout to be issued"),". Note that anyone can cause a payout to occur; it\ndoes not have to be the operator of a validator."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"currently elected"),": Only show validators in the active set (i.e., they have been elected to\nproduce blocks in the current era)."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"with an identity"),": Only show validators that have set an ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-identity"},"identity"),". Note\nthat this identity does not have to be verified by a registrar for the validator to appear in the\nlist.")),(0,i.kt)("admonition",{title:"Single Operators with Multiple Validators",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},'Recall that slashing is an additive function; the more validators offline or equivocating in a given\nsession, the harsher the penalties. Since validators that are controlled by a single operator are\nmore at risk of a "synchronized" failure, nominating them implies a greater risk of having a large\nslash of your nominated funds. Generally, it is safer to nominate validators whose behavior is\nindependent of others in many ways (different hardware, geographic location, owner, etc.).')),(0,i.kt)("h3",{id:"bags-list"},"Bags-list"),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"On Polkadot and Kusama, the instance of the pallet\n",(0,i.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/pallet_bags_list/"},"Bags-List")," is named as\n",(0,i.kt)("inlineCode",{parentName:"p"},"voterList"),".")),(0,i.kt)("p",null,"Nominating accounts are placed in a semi-sorted list called bags-list. This sorting functionality is\nextremely important for the long-term improvements of the staking/election system. Bags-list allows\nup to\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.maxNominatorsCount",defaultValue:5e4,mdxType:"RPC"}),"\n","\nnominators to set their intention to nominate, of which the stake of the top\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.maxElectingVoters",defaultValue:22500,mdxType:"RPC"}),"\n","\nnominators is considered for ",(0,i.kt)("a",{parentName:"p",href:"#staking-election-stages"},"electing set")," that eventually determines the\nactive validators."),(0,i.kt)("p",null,"The nominator accounts in a bag are sorted based on their insertion order, not by their nomination\nstake. The ",(0,i.kt)("inlineCode",{parentName:"p"},"voterList.putInFrontOf")," extrinsic can be issued to move up in the bag, which might be\nvery useful for the accounts in the last bag eligible for receiving staking rewards. Balance changes\ndue to staking rewards or slashing do not automatically rebag the account. Whenever applicable,\nPolkadot JS Apps UI prompts the nominator account to rebag or move up by calling the\n",(0,i.kt)("inlineCode",{parentName:"p"},"voterList.rebag")," extrinsic."),(0,i.kt)("p",null,"For guidelines about how to rebag or move your account within a bag, see the followings:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},'The "Bags List" Section on\n',(0,i.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000181018-i-have-more-than-the-minimum-bonded-but-i-m-not-getting-rewards"},"this Support Page"),"."),(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking-advanced#bags-list"},"Bags List Section")," in Advanced Staking Concepts."),(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("a",{parentName:"li",href:"https://youtu.be/hIIZRJLrBZA"},"dedicated technical explainer video"),".")),(0,i.kt)("h3",{id:"validator-stats"},"Validator Stats"),(0,i.kt)("p",null,"Nominators can query ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/query/"},"validator histories")," to see\nstatistics such as era points, elected stake, rewards and slashes, and commission. It is good\npractice to do comprehensive research on validator candidates. This could include (but should not be\nlimited to) checking the validators' ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-identity"},"identity")," (if they have set one) and going\nover the validators' websites to see who they are, what kind of infrastructure setup they are using,\nreputation, the vision behind the validator, and more."),(0,i.kt)("p",null,"Any problematic behavior must be taken seriously. An example of problematic behavior will be if a\nvalidator is regularly offline. In this case, nominators most likely would get fewer rewards. If\nmany validators are ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking#unresponsiveness"},"unreachable"),", such validators and\ncorresponding nominators will be slashed."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Validator Stats",src:a(95520).Z,width:"1900",height:"1204"})),(0,i.kt)("h2",{id:"nominating-with-the-staking-dashboard"},"Nominating with the Staking Dashboard"),(0,i.kt)("p",null,"If you are a beginner, please watch the video below for detailed instructions."),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=F59N3YKYCRs"},(0,i.kt)("img",{parentName:"a",src:"https://img.youtube.com/vi/F59N3YKYCRs/0.jpg",alt:"Staking Tutorial"}))),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"/docs/staking-dashboard"},"Polkadot Staking Dashboard")," allows to choose pre-selected\nlists of validators based on user preference, or to manually select validators similarly as in the\nPolkadot-JS UI."),(0,i.kt)("p",null,"Pre-selected choices are:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Optimal Selection: Selects a mix of majority active and inactive validators."),(0,i.kt)("li",{parentName:"ul"},"Active Low Commission: Gets a set of active validators with low commission."),(0,i.kt)("li",{parentName:"ul"},"From Favorites: Gets a set of your favorite validators.")),(0,i.kt)("h2",{id:"staking-election-stages"},"Staking Election Stages"),(0,i.kt)("p",null,'The staking election system has three stages for both validators and nominators, namely "intention",\n"electable/electing", and "active".'),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"intention to nominate:"),' an account that has stated the intention to nominate; also called\nsimply a "nominator".'),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"electing nominator:")," a nominator who is selected to be a part of the input to the\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-phragmen"},"NPoS election algorithm"),". This selection is based on stake and is made using\nthe ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking-advanced#bags-list"},"bags-list"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"active nominator:")," a nominator who came out of the NPoS election algorithm backing an active\nvalidator. Staking rewards are received by the top\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\nnominators ranked by stake. When slashing occurs, all the active nominators backing the validator\nget slashed (also those who do not receive rewards due to oversubscription issues).")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Nominator Election",src:a(55404).Z,width:"612",height:"430"})),(0,i.kt)("h3",{id:"the-election-solution-set"},"The Election Solution Set"),(0,i.kt)("p",null,'Determining which validators are in the active set and which nominators are nominating them creates\na very large graph mapping nominators to their respective validators. This "solution set" is\ncomputed off-chain and submitted to the chain, which means it must fit in a single block. If there\nare a large number of nominators, this means that some nominators must be eliminated. Currently,\nnominators are sorted by the amount of DOT staked, and those with more DOT are prioritized. This\nmeans that you may not receive rewards if you are staking with a small amount of DOT. This minimal\namount is dynamic based on the number of validators, nominators, amount nominated, and other\nfactors.'),(0,i.kt)("h2",{id:"receiving-rewards"},"Receiving Rewards"),(0,i.kt)("p",null,"As long as you have nominated more than one validator candidate, at least one of them got elected,\nand you are nominating with enough stake to get into the solution set, your bonded stake will be\nfully distributed to one or more validators. That being said, you may not receive rewards if you\nnominated very few validator candidates and no one got elected, or your stake is small, and you only\nselected oversubscribed validators, or the validator you are nominating has 100% commission. It is\ngenerally wise to choose as many trustworthy validators as you can\n(up to 16) to reduce the risk of none of\nyour nominated validators being elected."),(0,i.kt)("admonition",{title:"Not receiving Staking Rewards?",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"To explore the possible reasons for not receiving staking rewards, check out the followings:"),(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},"The\n",(0,i.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000181959-staking-faq-s"},"Staking FAQ"),"\non the Support Pages."),(0,i.kt)("li",{parentName:"ul"},"The\n",(0,i.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/Polkadot/comments/10kurje/why_am_i_not_receiving_staking_rewards/"},'"Why am I not receiving staking rewards?"'),"\nReddit article."),(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking#why-am-i-not-receiving-rewards"},'"Why am I not receiving staking rewards?"'),"\nsection on the Staking Page."))),(0,i.kt)("p",null,"Rewards are ",(0,i.kt)("em",{parentName:"p"},"lazy")," - somebody must trigger a payout for a validator for rewards to go to all of the\nvalidator's nominators. Any account can do this, although validator operators often do this as a\nservice to their nominators. See the page on ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced"},"Simple Payouts")," for more\ninformation and instructions for claiming rewards."),(0,i.kt)("admonition",{title:"Explainer videos on Nominating",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"These concepts have been further explained in the following videos:"),(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=weG_uzdSs1E&list=PLOyWqupZ-WGuAuS00rK-pebTMAOxW41W8&index=4"},"Why Nominate on Polkadot & Kusama")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=K-a4CgVchvU&list=PLOyWqupZ-WGuAuS00rK-pebTMAOxW41W8&index=9"},"What to Consider when Nominating Validators on Polkadot and Kusama")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://youtu.be/FCXC0CDhyS4"},"Nominating/Staking on Polkadot and Kusama")))),(0,i.kt)("h2",{id:"good-nominator-practices"},"Good Nominator Practices"),(0,i.kt)("h3",{id:"required-minimum-stake"},"Required Minimum Stake"),(0,i.kt)("p",null,"Due to the way the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"Phragmen algorithm")," generates the solution set and due to the\nfact that the solution set must fit in a single block, a minimum number of DOT will be required to\nnominate with to receive staking rewards can change between the eras."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"min-intention-threshold:")," minimum stake to declare the intention to nominate. This parameter\ncan be updated via on-chain governance, and the most recent and up-to-date version can be found on\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/chainstate"},"chain state")," (select ",(0,i.kt)("strong",{parentName:"p"},"state query > staking >\nminimumNominatorBond"),")")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"min-electing:")," minimum stake among the electing nominators. Since this is almost always the\nsame as \u201cmin-active\u201d, it might not be reported.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"min-active:")," minimum stake among the active nominators. If your stake falls below this dynamic\nthreshold in a given era, you will not receive staking rewards for that era."))),(0,i.kt)("p",null,"Thus, for ",(0,i.kt)("strong",{parentName:"p"},"nominator counters"),", we have:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"count of nominator intentions and max possible nominator intentions\n(unlimited)\n",""),(0,i.kt)("li",{parentName:"ul"},"count of electing nominators, and maximum possible electing nominators\n(",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.maxElectingVoters",defaultValue:22500,mdxType:"RPC"}),")\n",""),(0,i.kt)("li",{parentName:"ul"},"count of active nominators and maximum possible active nominators\n(",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.maxElectingVoters",defaultValue:22500,mdxType:"RPC"}),")\n","")),(0,i.kt)("h3",{id:"avoiding-oversubscribed-validators"},"Avoiding Oversubscribed Validators"),(0,i.kt)("p",null,"Validators can only pay out to a certain number of nominators per era. This is currently set to\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n","\nbut can be modified via governance. If more than\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n",'\nnominators nominate the same validator, it is "oversubscribed", and only the top\n',(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n","\nstaked nominators (ranked by the amount of stake) are paid rewards. Other nominators will receive no\nrewards for that era, although their stake will still be used to calculate entry into the active\nvalidator set."),(0,i.kt)("p",null,"Although it is difficult to determine how many nominators will nominate a given validator in the\nnext era, one can estimate based on the current number of nominators. A validator with only 5\nnominators in this era, for instance, is unlikely to have more than\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n","\nin the next era. However, an already-oversubscribed validator with 1000 nominators this era is very\nlikely to be oversubscribed in the next era as well."),(0,i.kt)("p",null,"If you are not nominating with a large number of DOTs, you should try to avoid\n",(0,i.kt)("a",{parentName:"p",href:"/docs/glossary#oversubscribed"},"oversubscribed")," validators. It is not always easy to\ncalculate if the validator selected will be oversubscribed in the next session; one way to avoid\nchoosing potentially oversubscribed validators is to filter out any that are\n",(0,i.kt)("a",{parentName:"p",href:"/docs/glossary#capacity"},"at capacity")," on the Targets page."),(0,i.kt)("p",null,"Finally, if you have a minimal amount of DOTs close to the value of ",(0,i.kt)("inlineCode",{parentName:"p"},"minActiveNomination"),", you may\nneed to stake more DOT to get into the election set. The nominator-to-validator mapping solution\nneeds to be evaluated within a single block duration, and if there are too many nominators, the\nlowest-staked nominations will be dropped from even being considered to be part of the electing set.\nThis ",(0,i.kt)("inlineCode",{parentName:"p"},"minActiveNomination")," value is dynamic and will vary over time. You can read the blog post\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/polkadot-staking-an-update/"},'"Polkadot Staking: An Update"')," for more\ndetails."),(0,i.kt)("h3",{id:"active-vs-inactive-nomination"},"Active vs. Inactive Nomination"),(0,i.kt)("p",null,"When you go to the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/actions"},"Account actions")," under staking\npage, you should see your bonded accounts and nomination status. If not, you can follow\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-guides-nominator#nominate-using-polkadot-js"},"this")," guide to configure it first. Your\nnominations will be effective in the next era; eras are roughly\n24 hours on Polkadot."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Nominations",src:a(44277).Z,width:"2878",height:"766"})),(0,i.kt)("p",null,'Suppose you have nominated five validator candidates, and three out of five were elected to the\nactive validator set; then you should see two of your nominations as "waiting", and most likely one\nas "active" and the rest as "inactive". Active or inactive nomination means your nominated\nvalidators have been elected to be in the validator set, whereas waiting means they did not get\nelected. Generally, you will only have a single validator have an active nomination, which means\nthat you are directly supporting it with your stake this era and thus potentially receiving staking\nrewards. Inactive nominators were validators elected for this era but which you are not actively\nsupporting. Every era, a new election will take place, and you may be assigned a different active\nnomination from the validators you selected.'),(0,i.kt)("p",null,"If you are committing a very large stake, you may have more than one active nomination. However, the\nelection algorithm attempts to minimize this situation, and it should not occur often, so you should\nalmost always see only a single active nomination per era. See the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen#optimizations"},"section on Phragm\xe9n optimization")," for more details."),(0,i.kt)("h3",{id:"minimum-active-nomination-to-receive-staking-rewards"},"Minimum Active Nomination to Receive Staking Rewards"),(0,i.kt)("admonition",{title:"Minimum DOT required to earn staking rewards",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The minimum DOT required to submit intent to nominate is\n",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minNominatorBond",defaultValue:1e12,filter:"humanReadable",mdxType:"RPC"})),"\n, but the minimum active nomination required to earn staking rewards is dynamic and may be much\nhigher, which can be viewed on\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/targets"},"Polkadot JS Apps > Network > Staking > Targets page"),".")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Minimum Active Nomination",src:a(95670).Z,width:"1436",height:"166"})),(0,i.kt)("h2",{id:"guides"},"Guides"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/learn-guides-nominator#nominate-a-validator"},"Be a Nominator (Polkadot)")," - Guide on\nnominating on the Kusama canary network."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/learn-guides-nominator#stop-nominating"},"Stop Being a Nominator (all networks)")," - Guide on\nstopping nominations and withdrawing tokens.")))}k.isMDXComponent=!0},53325:(t,e,a)=>{"use strict";a.d(e,{Z:()=>n});const n=a.p+"assets/images/nominators_target-d8652ac89f3cbb16528cd68808a32cf0.png"},95670:(t,e,a)=>{"use strict";a.d(e,{Z:()=>n});const n=a.p+"assets/images/min-active-nomination-bfbe67c2714eb5027c6a4f45608c9bc2.png"},55404:(t,e,a)=>{"use strict";a.d(e,{Z:()=>n});const n=a.p+"assets/images/nominator-election-ae25b5db36fa18b56fa58c5370127dd4.png"},44277:(t,e,a)=>{"use strict";a.d(e,{Z:()=>n});const n=a.p+"assets/images/polkadotjs_nominator_account-e0f5d58cd9cce279d6f462cde9f706f4.png"},95520:(t,e,a)=>{"use strict";a.d(e,{Z:()=>n});const n=a.p+"assets/images/validator_stats-57ec40656d6829e2ef791550116824d4.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/main.56d493f2.js b/assets/js/main.56d493f2.js deleted file mode 100644 index 36a59ae3e57f..000000000000 --- a/assets/js/main.56d493f2.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.56d493f2.js.LICENSE.txt */ -(self.webpackChunk=self.webpackChunk||[]).push([[179],{20830:(e,n,t)=>{"use strict";t.d(n,{W:()=>a});var r=t(67294);function a(){return r.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},r.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},11205:(e,n,t)=>{"use strict";t.d(n,{Z:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,n=0,t={},r={util:{encode:function e(n){return n instanceof a?new a(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=d.reach);E+=w.value.length,w=w.next){var _=w.value;if(n.length>e.length)return;if(!(_ instanceof a)){var S,C=1;if(v){if(!(S=o(k,E,e,b))||S.index>=e.length)break;var T=S.index,P=S.index+S[0].length,A=E;for(A+=w.value.length;T>=A;)A+=(w=w.next).value.length;if(E=A-=w.value.length,w.value instanceof a)continue;for(var O=w;O!==n.tail&&(Ad.reach&&(d.reach=R);var j=w.prev;if(N&&(j=c(n,j,N),E+=N.length),l(n,j,C),w=c(n,j,new a(f,g?r.tokenize(L,g):L,y,L)),I&&c(n,w,I),C>1){var M={cause:f+","+m,reach:R};i(e,n,t,w.prev,E,M),d&&M.reach>d.reach&&(d.reach=M.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function c(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function l(e,n,t){for(var r=n.next,a=0;a"+o.content+""},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,n){var t={};t["language-"+n]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[n]},t.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:t}};r["language-"+n]={pattern:/[\s\S]+/,inside:a.languages[n]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,n){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[n,"language-"+n],inside:a.languages[n]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var n="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",t={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:t,environment:{pattern:RegExp("\\$"+n),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+n),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+n),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:t}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+n),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},t.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var n=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,t=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return n.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return n.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:n,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return t}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var n=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+n.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+n.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+n.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:n,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var t=e.languages.markup;t&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(a),function(e){var n,t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:n={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+t.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[t,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=n,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var n=/#(?!\{).+/,t={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:n,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:t}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:n,interpolation:t}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:t}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var n=/[*&][^\s[\]{},]+/,t=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+t.source+"(?:[ \t]+"+n.source+")?|"+n.source+"(?:[ \t]+"+t.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,n){n=(n||"").replace(/m/g,"")+"m";var t=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(t,n)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:t,important:n,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var n=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function t(e){return e=e.replace(//g,(function(){return n})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:t(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:t(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:t(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:t(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(n){["url","bold","italic","strike","code-snippet"].forEach((function(t){n!==t&&(e.languages.markdown[n].inside.content.inside[t]=e.languages.markdown[t])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(n){if(n&&"string"!=typeof n)for(var t=0,r=n.length;t",quot:'"'},c=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var n=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),t=0;t0)){var s=f(/^\{$/,/^\}$/);if(-1===s)continue;for(var c=t;c=0&&p(l,"variable-input")}}}}function u(e){return n[t+e]}function d(e,n){n=n||0;for(var t=0;t?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var n=e.languages.javascript["template-string"],t=n.pattern.source,r=n.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(n,r){if(e.languages[n])return{pattern:RegExp("((?:"+r+")\\s*)"+t),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:n}}}}function s(e,n){return"___"+n.toUpperCase()+"_"+e+"___"}function c(n,t,r){var a={code:n,grammar:t,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function l(n){var t={};t["interpolation-punctuation"]=a;var o=e.tokenize(n,t);if(3===o.length){var i=[1,1];i.push.apply(i,c(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,n)}function u(n,t,r){var a=e.tokenize(n,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,u={},d=c(a.map((function(e){if("string"==typeof e)return e;for(var t,a=e.content;-1!==n.indexOf(t=s(i++,r)););return u[t]=a,t})).join(""),t,r),f=Object.keys(u);return i=0,function e(n){for(var t=0;t=f.length)return;var r=n[t];if("string"==typeof r||"string"==typeof r.content){var a=f[i],o="string"==typeof r?r:r.content,s=o.indexOf(a);if(-1!==s){++i;var c=o.substring(0,s),d=l(u[a]),p=o.substring(s+a.length),m=[];if(c&&m.push(c),m.push(d),p){var h=[p];e(h),m.push.apply(m,h)}"string"==typeof r?(n.splice.apply(n,[t,1].concat(m)),t+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,n)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),n].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(n){n.language in d&&function n(t){for(var r=0,a=t.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var n=e.languages.extend("typescript",{});delete n["class-name"],e.languages.typescript["class-name"].inside=n,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:n}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function n(e,n){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),n)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:n(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:n(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:n(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var t=["function","function-variable","method","method-variable","property-access"],r=0;r*\.{3}(?:[^{}]|)*\})/.source;function o(e,n){return e=e.replace(//g,(function(){return t})).replace(//g,(function(){return r})).replace(//g,(function(){return a})),RegExp(e,n)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",n),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=n.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},s=function(n){for(var t=[],r=0;r0&&t[t.length-1].tagName===i(a.content[0].content[1])&&t.pop():"/>"===a.content[a.content.length-1].content||t.push({tagName:i(a.content[0].content[1]),openedBraces:0}):t.length>0&&"punctuation"===a.type&&"{"===a.content?t[t.length-1].openedBraces++:t.length>0&&t[t.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?t[t.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&t.length>0&&0===t[t.length-1].openedBraces){var c=i(a);r0&&("string"==typeof n[r-1]||"plain-text"===n[r-1].type)&&(c=i(n[r-1])+c,n.splice(r-1,1),r--),n[r]=new e.Token("plain-text",c,null,c)}a.content&&"string"!=typeof a.content&&s(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||s(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var n={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(n).forEach((function(t){var r=n[t],a=[];/^\w+$/.test(t)||a.push(/\w+/.exec(t)[0]),"diff"===t&&a.push("bold"),e.languages.diff[t]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(t)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:n})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function n(e,n){return"___"+e.toUpperCase()+n+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(t,r,a,o){if(t.language===r){var i=t.tokenStack=[];t.code=t.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,s=i.length;-1!==t.code.indexOf(a=n(r,s));)++s;return i[s]=e,a})),t.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(t,r){if(t.language===r&&t.tokenStack){t.grammar=e.languages[r];var a=0,o=Object.keys(t.tokenStack);!function i(s){for(var c=0;c=o.length);c++){var l=s[c];if("string"==typeof l||l.content&&"string"==typeof l.content){var u=o[a],d=t.tokenStack[u],f="string"==typeof l?l:l.content,p=n(r,u),m=f.indexOf(p);if(m>-1){++a;var h=f.substring(0,m),g=new e.Token(r,e.tokenize(d,t.grammar),"language-"+r,d),b=f.substring(m+p.length),v=[];h&&v.push.apply(v,i([h])),v.push(g),b&&v.push.apply(v,i([b])),"string"==typeof l?s.splice.apply(s,[c,1].concat(v)):l.content=v}}else l.content&&i(l.content)}return s}(t.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(n){e.languages["markup-templating"].buildPlaceholders(n,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(n){e.languages["markup-templating"].tokenizePlaceholders(n,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var n=/\$[-\w]+|#\{\$[-\w]+\}/,t=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:n,operator:t}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:n,operator:t,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var n={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},t={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:n,number:t,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:n,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:t,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var n=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",n),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var t=e.languages.tsx.tag;t.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+t.pattern.source+")",t.pattern.flags),t.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},98934:(e,n,t)=>{"use strict";t.d(n,{_:()=>a,t:()=>o});var r=t(67294),a=r.createContext(!1);function o(e){var n=e.children,t=(0,r.useState)(!1),o=t[0],i=t[1];return(0,r.useEffect)((function(){i(!0)}),[]),r.createElement(a.Provider,{value:o},n)}},94926:(e,n,t)=>{"use strict";var r=t(67294),a=t(73935),o=t(73727),i=t(70405),s=t(10412);const c=[t(32497),t(3310),t(18320),t(39604),t(32104),t(70378)];var l=t(69204),u=t(16550),d=t(18790);function f(e){var n=e.children;return r.createElement(r.Fragment,null,n)}var p=t(87462),m=t(35742),h=t(52263),g=t(44996),b=t(86668),v=t(10833),y=t(94711),x=t(19727),k=t(43320),w=t(18780),E=t(90197);function _(){var e=(0,h.Z)().i18n,n=e.defaultLocale,t=e.localeConfigs,a=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((function(e){var n=e[0],t=e[1].htmlLang;return r.createElement("link",{key:n,rel:"alternate",href:a.createUrl({locale:n,fullyQualified:!0}),hrefLang:t})})),r.createElement("link",{rel:"alternate",href:a.createUrl({locale:n,fullyQualified:!0}),hrefLang:"x-default"}))}function S(e){var n=e.permalink,t=(0,h.Z)().siteConfig.url,a=function(){var e=(0,h.Z)().siteConfig,n=e.url,t=e.baseUrl,r=e.trailingSlash,a=(0,u.TH)().pathname;return n+(0,w.applyTrailingSlash)((0,g.Z)(a),{trailingSlash:r,baseUrl:t})}(),o=n?""+t+n:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function C(){var e=(0,h.Z)().i18n.currentLocale,n=(0,b.L)(),t=n.metadata,a=n.image;return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:x.h})),a&&r.createElement(v.d,{image:a}),r.createElement(S,null),r.createElement(_,null),r.createElement(E.Z,{tag:k.HX,locale:e}),r.createElement(m.Z,null,t.map((function(e,n){return r.createElement("meta",(0,p.Z)({key:n},e))}))))}var T=new Map;function P(e){if(T.has(e.pathname))return Object.assign({},e,{pathname:T.get(e.pathname)});if((0,d.f)(l.Z,e.pathname).some((function(e){return!0===e.route.exact})))return T.set(e.pathname,e.pathname),e;var n=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,n),Object.assign({},e,{pathname:n})}var A=t(98934),O=t(49633),L=t(94578);function N(e){for(var n=arguments.length,t=new Array(n>1?n-1:0),r=1;r\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

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

\n

We suggest trying baseUrl =

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