diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000000..e69de29bb2d diff --git a/404.html b/404.html new file mode 100644 index 00000000000..890746f3df5 --- /dev/null +++ b/404.html @@ -0,0 +1,26 @@ + + + + + +Page Not Found | Cosmos Hub + + + + + + + + + + + + + + +
+
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/404/index.html b/404/index.html new file mode 100644 index 00000000000..f5f9be2956c --- /dev/null +++ b/404/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 00000000000..e35dc443923 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +hub.cosmos.network diff --git a/assets/css/styles.df8f7e0f.css b/assets/css/styles.df8f7e0f.css new file mode 100644 index 00000000000..f03ca66773a --- /dev/null +++ b/assets/css/styles.df8f7e0f.css @@ -0,0 +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))}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,.hash-link{-webkit-user-select:none}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.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);--docsearch-searchbox-shadow:inset 0 0 0 1px var(--docsearch-primary-color)}.markdown li,body{word-wrap:break-word}pre,table{overflow:auto}.button,code{vertical-align:middle}html .menu__link:hover,html .table-of-contents__link--active,html .table-of-contents__link:hover{text-shadow:.1px .1px 0 var(--ifm-font-color-base),-.1px -.1px 0 var(--ifm-font-color-base),.1px -.1px 0 var(--ifm-font-color-base),-.1px .1px 0 var(--ifm-font-color-base),-.1px 0 0 var(--ifm-font-color-base),.1px 0 0 var(--ifm-font-color-base),0 .1px 0 var(--ifm-font-color-base),0 -.1px 0 var(--ifm-font-color-base)}html .navbar,html .pagination-nav>a:hover,html[data-theme=dark] .navbar-sidebar__brand{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.markdown,html .markdown{--ifm-heading-vertical-rhythm-bottom:1}*,.DocSearch-Container,.DocSearch-Container *,:after,:before{box-sizing:border-box}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}: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:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--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 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--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:#0000;--ifm-table-stripe-background:#00000008;--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}.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:#0000}html{-webkit-font-smoothing:antialiased;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)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{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 #0000001a;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)}progress,sub,sup{vertical-align:initial}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:initial;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)}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}.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{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 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);color:inherit;text-decoration:inherit}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,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{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)}.clean-btn,hr{color:inherit}.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}.lowercase,.text--lowercase{text-transform:lowercase}.admonitionHeading_tbUL,.alert__heading,.text--uppercase,.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;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:#3578e526;--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:#ebedf026;--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:#00a40026;--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:#54c7ec26;--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:#ffba0026;--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:#fa383e26;--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}.close,html .github-icon:hover{opacity:.5}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{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),html .DocSearch-Button .DocSearch-Search-Icon,html .DocSearch-Hits mark{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:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__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:#0000;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;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);position:relative;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 #0000;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)}.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__item{margin-top:0}.admonitionContent_S0QG>:last-child,.collapsibleContent_i85q>:last-child,.footer__items,html .theme-doc-markdown li:last-child li:last-child{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox],dialog,fieldset,legend{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{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}.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}.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-sidebar,.navbar-sidebar__backdrop{opacity:0;position:fixed;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;bottom:0;top:0;left:0;visibility:hidden}.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__brand,blockquote,dd,dl,fieldset,figure,h1,h2,h3,h4,h5,h6,hr,html .theme-doc-sidebar-container>div:first-child>a,p,pre{margin:0}.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:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--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;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}.pills__item,.tabs__item,[role=button],button{cursor:pointer}.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);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:#0009;right:0;transition-property:opacity,visibility}.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)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{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)}.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)}.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;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.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;padding-left:0}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);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)}.px-5,html .theme-doc-sidebar-menu li li li{padding-left:1rem}.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:#ffffff0d;--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:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--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;--ifm-color-primary:#fff;--ifm-color-primary-dark:#e6e6e6;--ifm-color-primary-darker:#d9d9d9;--ifm-color-primary-darkest:#b3b3b3;--ifm-color-primary-light:#fff;--ifm-color-primary-lighter:#fff;--ifm-color-primary-lightest:#fff;--ifm-background-color:#000;--docusaurus-highlighted-code-line-bg:#00000054;--docsearch-modal-background:#000!important;--docsearch-highlight-color:#ffffff70!important;--docsearch-hit-background:#181818ab!important;--docsearch-key-gradient:linear-gradient(-26.5deg,#5d5d5d,#3c3c3c)!important;--docsearch-key-shadow:inset 0 -2px 0 0 #353535,inset 0 0 1px 1px #7a7a7b,0 2px 2px 0 #2d2d2d4d!important;--docsearch-text-color:#f5f6f7;--docsearch-container-background:#090a11cc;--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 #0304094d;--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.302);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 #494c6a80,0 -4px 8px 0 #0003;--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}:root{--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#5064fb;--ifm-color-primary-dark:#000;--ifm-color-primary-darker:#000;--ifm-color-primary-darkest:#000;--ifm-color-primary-light:#000;--ifm-color-primary-lighter:#000;--ifm-color-primary-lightest:#000;--ifm-code-font-size:95%;--ifm-breadcrumb-item-background-active:#0000;--ifm-breadcrumb-padding-horizontal:0;--ifm-list-paragraph-margin:0;--ifm-spacing-horizontal:2rem;--ifm-blockquote-border-color:#000;--ifm-menu-link-padding-vertical:0.6rem;--ifm-background-color:#fff;--ifm-footer-link-color:var(--ifm-font-color-base);--ifm-menu-link-sublist-icon:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAiIGhlaWdodD0iNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJtMSAxIDQgNCA0LTQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9Ii42NjciIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz48L3N2Zz4=);--docsearch-searchbox-background:#f7f7f7;--docsearch-modal-background:#f7f7f7!important;--ifm-navbar-height:5.563rem;--ifm-navbar-sidebar-width:100vw;--docsearch-highlight-color:#181818ab!important;--aa-primary-color-rgb:0,0,0;--ifm-menu-color-background-active:none;--ifm-menu-color-background-hover:none;--docusaurus-highlighted-code-line-bg:#0000001a;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--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:#656c85cc;--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 #ffffff80,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 #1e235a66;--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 #1e235a66;--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 #45629b1f;--docsearch-primary-color:var(--ifm-color-primary);--docsearch-text-color:var(--ifm-font-color-base);--docusaurus-announcement-bar-height:auto;--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px}#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}*,:after,:before{border:0 solid;margin:0}hr,html .footer{border-top-width:1px}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;tab-size:4}body{line-height:inherit;margin:0}hr{height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.DocSearch-Container a,.tag_zVej:hover{text-decoration:none}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{display:block;margin-bottom:var(--ifm-spacing-vertical);border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0;padding:0}.admonitionHeading_tbUL code,button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}html,html .navbar{background-color:var(--ifm-background-color)}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden],html .DocSearch-Button .DocSearch-Button-Keys,html .breadcrumbs__item:first-child>a>svg{display:none}html{font-feature-settings:"kern","liga","calt","zero" 0;-webkit-font-feature-settings:"kern","liga","calt","zero" 0;-webkit-text-size-adjust:100%;text-size-adjust:100%;-moz-osx-font-smoothing:grayscale;font-smoothing:antialiased;font-family:Inter,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-kerning:normal;font-variant-ligatures:contextual common-ligatures;text-rendering:optimizeLegibility}@supports (font-variation-settings:normal){html{font-family:Inter var,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}}.tags_jXut,svg{display:inline}::selection{background-color:var(--ifm-color-primary);color:#fff}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/assets/fonts/Inter-Regular-c8ba52b05a9ef10f47584d08ece2ec5c.woff2) format("woff2"),url(/assets/fonts/Inter-Regular-8c206db99195777c67691cbba9d64393.woff) format("woff")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/assets/fonts/Inter-Medium-293fd13dbca5a3e450ef1ebfb232a299.woff2) format("woff2"),url(/assets/fonts/Inter-Medium-9053572c46aeb4b16caafd643a543b8d.woff) format("woff")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/assets/fonts/Inter-Bold-ec64ea577b0349e055ad6646c1d8797a.woff2) format("woff2"),url(/assets/fonts/Inter-Bold-93c1301bd9f486c573b3d9001c6ec0e4.woff) format("woff")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:900;src:url(/assets/fonts/Inter-Black-15ca31c0a2a68f76d2d12055bdf97bd0.woff2) format("woff2"),url(/assets/fonts/Inter-Black-c6938660eec019fefd684894b6d00900.woff) format("woff")}@font-face{font-display:swap;font-family:Inter var;font-style:oblique 0deg 10deg;font-weight:100 900;src:url(/assets/fonts/Inter.var-c2fe3cb2b7c746f7966a973d869d21c3.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;src:url(/assets/fonts/JetBrainsMono-Regular-1e66c47aca088de94ae789a48719cb00.woff2) format("woff2")}.fixed{position:fixed}.relative{position:relative}.block,.tocCollapsibleContent_vkbj a{display:block}.table{display:table}.contents{display:contents}.px-5{padding-right:1rem}.px-5\.5{padding-left:1.25rem;padding-right:1.25rem}.text-left,html .pagination-nav .pagination-nav__link--next{text-align:left}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}html #__docusaurus>div[role=banner]{--tw-text-opacity:1;background-color:#00000008;color:rgb(0 0 0/var(--tw-text-opacity));font-weight:400}html #__docusaurus>div[role=banner] a{font-size:.8125rem;text-decoration-line:none;width:100%}html .navbar{border-bottom-color:var(--ifm-color-emphasis-200);border-bottom-width:1px;height:auto;padding-bottom:.375rem;padding-top:.375rem}html .DocSearch-Button,html .navbar__toggle{--tw-bg-opacity:1;background-color:rgb(247 247 247/var(--tw-bg-opacity));height:3rem;width:3rem}html .navbar__toggle{align-items:center;border-end-start-radius:1rem;border-radius:.5rem;border-start-start-radius:1rem;display:flex;justify-content:center}html .navbar__brand+*{margin-left:auto}html .menu__link,html .navbar__link--active{--tw-text-opacity:1;color:rgb(85 85 85/var(--tw-text-opacity))}html .navbar__items:not(:last-child){justify-content:space-between}html .navbar__items:not(:last-child) button{margin-right:0;order:2}html .navbar__items--right>:last-child{right:3.25rem}html[data-theme=dark] .menu__link,html[data-theme=dark] .navbar__item,html[data-theme=light] .footer__copyright,html[data-theme=light] .footer__link-item,html[data-theme=light] .footer__title,html[data-theme=light] .pagination-nav__sublabel{color:#ffffffab}html[data-theme=dark] .navbar__toggle,html[data-theme=dark] .pagination-nav>a,html[data-theme=dark] .theme-doc-toc-mobile{background-color:#181818ab}html .DocSearch-Button{border-radius:.625rem;color:#00000054;justify-content:center;margin-right:.5rem}html .navbar-sidebar__close,html[data-theme=dark] .DocSearch-Footer,html[data-theme=dark] .DocSearch-Modal,html[data-theme=dark] .navbar-sidebar{background-color:rgb(0 0 0/var(--tw-bg-opacity));--tw-bg-opacity:1}html .DocSearch-Button .DocSearch-Button-Placeholder{padding-right:6rem}.algoliaLogoPathFill_WdUC,html .DocSearch-Logo path{fill:var(--ifm-font-color-base)}html .navbar-sidebar{width:100%}html .navbar-sidebar__brand{height:auto;padding-left:1.5rem;padding-right:1.5rem}html .navbar-sidebar__item{padding-left:1.5rem;padding-right:1.5rem;width:100%}html .navbar-sidebar__back{display:none;padding-left:0;padding-right:0}html .navbar-sidebar__close{align-items:center;border-end-start-radius:1rem;border-radius:.5rem;border-start-start-radius:1rem;display:flex;height:3rem;justify-content:center;margin-left:0;width:3rem}html .navbar-sidebar__close>svg>g{stroke:#fff}html[data-theme=dark] .navbar-sidebar__brand{position:relative}html[data-theme=dark] .navbar-sidebar__brand:after{--tw-bg-opacity:1;background-color:rgb(85 85 85/var(--tw-bg-opacity));bottom:0;content:"";display:block;height:1px;left:0;margin-left:1.5rem;margin-right:1.5rem;position:absolute;right:.5rem}html[data-theme=dark] .navbar-sidebar__close{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}html[data-theme=dark] .navbar-sidebar__close>svg>g{stroke:#000}html[data-theme=dark] .DocSearch-Button{background-color:#181818ab;color:#ffffff70}html[data-theme=dark] .DocSearch-Button-Key{border-color:#ffffff70;color:#ffffff70}html .breadcrumbs__item:first-child>a:after{content:"Docs"}html .breadcrumbs__item:not(:last-child):after{background-image:none;content:">"}html .theme-doc-toc-mobile{--tw-bg-opacity:1;background-color:rgb(247 247 247/var(--tw-bg-opacity));border-radius:1rem;padding:1.25rem 1.5rem 0}html .theme-doc-toc-mobile>button{display:flex;justify-content:space-between;padding:0 0 1.25rem}html .theme-doc-toc-mobile>button:after{background-image:var(--ifm-menu-link-sublist-icon);background-size:70%;margin-left:1rem;order:9999}html .theme-doc-toc-mobile ul li{margin:1rem 0}html[data-theme=dark] .theme-doc-sidebar-menu .menu__list:before{background-color:#ffffff70}html .theme-doc-sidebar-menu{font-weight:400}html .theme-doc-sidebar-menu .menu__list{padding-left:0;position:relative}html .theme-doc-sidebar-menu .menu__list:before{background-color:#00000012;content:"";display:block;height:100%;left:.5rem;position:absolute;top:0;width:2px}html .footer__col:first-child .footer__title,html .footer__link-item>svg,html .menu__caret,html .menu__link>svg,html .theme-doc-sidebar-menu .menu__list ul:before,html li li .menu__link--sublist-caret:after{display:none}html .theme-doc-sidebar-menu .menu__link{padding-left:0;padding-right:1rem}html .theme-doc-sidebar-menu .menu__link--active:not(.menu__link--sublist){color:var(--ifm-font-color-base);font-weight:500}html .theme-doc-sidebar-menu li li{padding-left:2rem}html .theme-doc-sidebar-menu li li .menu__link--active:not(.menu__link--sublist){color:var(--ifm-font-color-base);font-weight:500;position:relative}html .theme-doc-sidebar-menu li li .menu__link--active:not(.menu__link--sublist):before{background-color:var(--ifm-font-color-base);content:"";display:block;height:100%;left:-1.5rem;position:absolute;top:0;width:2px}html .theme-doc-sidebar-menu li li li .menu__link--active:not(.menu__link--sublist):before{left:-2.5rem}html .theme-doc-sidebar-menu li li li li .menu__link--active:not(.menu__link--sublist):before{left:-3.5rem}html .theme-doc-sidebar-menu li li li li li .menu__link--active:not(.menu__link--sublist):before{left:-4.5rem}html .theme-doc-sidebar-menu li li li li li li .menu__link--active:not(.menu__link--sublist):before{left:-5.5rem}html .theme-doc-sidebar-menu li li li li li li li .menu__link--active:not(.menu__link--sublist):before{left:-6.5rem}html .theme-doc-sidebar-item-link .menu__link[target=_blank]:after{content:"\2197";margin-left:.25rem}html .menu__link:hover{color:var(--ifm-font-color-base)}html .pagination-nav .pagination-nav__sublabel,html[data-theme=dark] .footer__copyright,html[data-theme=dark] .footer__link-item,html[data-theme=dark] .footer__title,html[data-theme=dark] .pagination-nav__sublabel{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}html .menu__link--sublist-caret{display:flex}html .menu__link--sublist-caret:after{background-repeat:no-repeat;background-size:16px;margin-left:0;margin-right:.75rem;order:-9999}html .menu__list-item--collapsed .menu__caret:before,html .menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(0)}html .pagination-nav{margin-top:4rem;padding-bottom:2rem}html .pagination-nav>a{border-color:#0000;border-radius:1rem;box-shadow:0 0 80px #00000012;grid-column:span 2/span 2;padding:1.5rem 1.5rem 3.25rem}html .pagination-nav .pagination-nav__sublabel{font-size:1rem;margin-bottom:.625rem}html .pagination-nav .pagination-nav__label{font-size:1.3125rem;font-weight:600}html .footer{background-color:var(--ifm-font-color-base);border-top-color:var(--ifm-color-emphasis-200);padding-top:6rem}html .footer__link-item:hover,html .theme-doc-markdown a:hover{text-decoration-line:underline}html .footer__bottom{margin:0 calc(var(--ifm-spacing-horizontal)*-1)}html .footer__copyright{font-size:.8125rem;margin-top:4rem;text-align:center}html .footer__col:not(:first-child){flex-basis:50%}html .theme-back-to-top-button{--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}html .theme-back-to-top-button:after{width:50%}html .theme-code-block{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;margin-top:.5rem}html .markdown{--ifm-h1-vertical-rhythm-bottom:1}html .theme-doc-markdown{border-bottom-color:#00000012;border-bottom-width:1px;margin-top:2rem;padding-bottom:3rem}html .theme-doc-markdown h1{font-size:2.375rem;font-weight:700;letter-spacing:-.025em;line-height:2.5rem}html .theme-doc-markdown h2{font-size:2rem;font-weight:700;letter-spacing:-.025em;line-height:2.25rem}html .theme-doc-markdown h3{font-size:1.3125rem;font-weight:600;letter-spacing:-.025em;line-height:2rem}html .theme-doc-markdown h4{font-size:1rem;font-weight:600;letter-spacing:-.025em;line-height:1.75rem}html .theme-doc-markdown h5{font-size:1rem;font-weight:600;letter-spacing:.025em;line-height:1.5rem}html .theme-doc-markdown p{line-height:1.625}html .theme-doc-markdown blockquote,html .theme-doc-markdown ol,html .theme-doc-markdown p,html .theme-doc-markdown ul{font-size:1rem}html .theme-doc-markdown code{border-width:0;font-weight:400;padding-left:.5rem;padding-right:.5rem;vertical-align:initial}html .theme-doc-markdown blockquote{margin-bottom:2rem;margin-top:2rem}html .theme-doc-markdown a{text-decoration-line:none;color:var(--ifm-color-primary)}html .theme-doc-markdown ol,html .theme-doc-markdown ul{margin-bottom:1.5rem;margin-top:1.5rem}html .theme-doc-markdown ul li{margin-bottom:.75rem;padding-left:1.5rem;position:relative}html .theme-doc-markdown ul li:before{background-color:currentColor;content:var(--tw-content);display:block;height:4px;left:0;position:absolute;top:.5em;width:4px}html .theme-doc-markdown ul li li:before{background-color:initial;border-color:currentColor;border-width:1px;content:var(--tw-content)}html .theme-doc-markdown ul li li:last-child{margin-bottom:1.5rem}html .theme-doc-markdown ol{counter-reset:a;list-style-type:none}html .theme-doc-markdown ol>li{margin-bottom:1.25rem;padding-left:3rem;position:relative}html .theme-doc-markdown ol>li:before{content:counters(a,".",decimal-leading-zero) ".";counter-increment:a;display:flex;font-size:1rem;font-weight:600;left:0;letter-spacing:-.025em;position:absolute;top:.2rem}html .theme-doc-markdown ol ol{counter-reset:b}html .theme-doc-markdown ol ol>li:before{content:counters(b,".",decimal-leading-zero) ".";counter-increment:b}html .theme-doc-markdown li>ol,html .theme-doc-markdown li>ul{margin-bottom:1rem;margin-top:1rem}.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}.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}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.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}.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.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);user-select:none}.hash-link:before{content:"#"}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.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{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:c;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(c);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:#0000 #0000 #0000 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}:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.img_ev3q{height:auto}.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}.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}.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;-webkit-user-select:none;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-Button-Container{align-items:center;display:flex}.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;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-Button-Key--pressed{box-shadow:var(--docsearch-key-pressed-shadow);transform:translate3d(0,1px,0)}.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-Hit[aria-selected=true] mark,.content_knG7 a{text-decoration:underline}.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:#0000;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;border:0;cursor:pointer}.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 a;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:#0000}.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;-webkit-user-select:none;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-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}#__docusaurus-base-url-issue-banner-container,.docSidebarContainer_b6E3,.sidebarLogo_isFc,.themedImage_ToTc,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j,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:#0003;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;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;-webkit-user-select:none;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}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@keyframes a{0%{opacity:0}to{opacity:1}}.DocSearch-Button{margin:0;transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.DocSearch-Container,.skipToContent_fXgn{z-index:calc(var(--ifm-z-index-fixed) + 1)}.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}.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}.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}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.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%}.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::placeholder{color:var(--docsearch-muted-color)}.searchResultsColumn_JPFH{font-size:.9rem;font-weight:700}.algoliaLogo_rT1R{max-width:150px}.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 b;border:.4em solid #eee;border-radius:50%;border-top:.4em solid var(--ifm-color-primary);height:3rem;margin:0 auto;width:3rem}@keyframes b{to{transform:rotate(1turn)}}.loader_vvXV{margin-top:2rem}.search-result-match{background:#ffd78e40;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:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.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}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_m80_{background-color:var(--docusaurus-collapse-button-bg)}.tocMobile_ITEo,html .navbar__toggle{display:none}html .navbar__items:not(:last-child){justify-content:flex-start;padding-left:.5rem;padding-right:.5rem}html .DocSearch-Button{justify-content:space-between;width:auto}html .theme-doc-breadcrumbs{padding-top:1rem}html .theme-doc-sidebar-container{border-right-color:var(--ifm-color-emphasis-200);border-right-width:1px;margin-left:.75rem}html .pagination-nav>a{grid-column:span 1/span 1}.lastUpdated_vwxv,html .pagination-nav .pagination-nav__link--next{text-align:right}html .footer__col:not(:first-child){flex-basis:0}.docItemCol_VOVn{max-width:75%!important}: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)}.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}}@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}.docItemContainer_F8PC{padding:0 .3rem}.searchBox_ZlJk{position:absolute;right:var(--ifm-navbar-padding-horizontal)}}@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;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;user-select:none;white-space:nowrap}}@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-color-scheme:dark){html .pagination-nav .pagination-nav__sublabel{color:var(--ifm-font-color-base)}}@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;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:#0003;transition:none}}@media screen and (prefers-reduced-motion){:root{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/fonts/Inter-Black-15ca31c0a2a68f76d2d12055bdf97bd0.woff2 b/assets/fonts/Inter-Black-15ca31c0a2a68f76d2d12055bdf97bd0.woff2 new file mode 100644 index 00000000000..68f64c9ed98 Binary files /dev/null and b/assets/fonts/Inter-Black-15ca31c0a2a68f76d2d12055bdf97bd0.woff2 differ diff --git a/assets/fonts/Inter-Black-c6938660eec019fefd684894b6d00900.woff b/assets/fonts/Inter-Black-c6938660eec019fefd684894b6d00900.woff new file mode 100644 index 00000000000..a18593a096e Binary files /dev/null and b/assets/fonts/Inter-Black-c6938660eec019fefd684894b6d00900.woff differ diff --git a/assets/fonts/Inter-Bold-93c1301bd9f486c573b3d9001c6ec0e4.woff b/assets/fonts/Inter-Bold-93c1301bd9f486c573b3d9001c6ec0e4.woff new file mode 100644 index 00000000000..eaf3d4bfd7d Binary files /dev/null and b/assets/fonts/Inter-Bold-93c1301bd9f486c573b3d9001c6ec0e4.woff differ diff --git a/assets/fonts/Inter-Bold-ec64ea577b0349e055ad6646c1d8797a.woff2 b/assets/fonts/Inter-Bold-ec64ea577b0349e055ad6646c1d8797a.woff2 new file mode 100644 index 00000000000..2846f29cc8a Binary files /dev/null and b/assets/fonts/Inter-Bold-ec64ea577b0349e055ad6646c1d8797a.woff2 differ diff --git a/assets/fonts/Inter-Medium-293fd13dbca5a3e450ef1ebfb232a299.woff2 b/assets/fonts/Inter-Medium-293fd13dbca5a3e450ef1ebfb232a299.woff2 new file mode 100644 index 00000000000..f92498a2ecf Binary files /dev/null and b/assets/fonts/Inter-Medium-293fd13dbca5a3e450ef1ebfb232a299.woff2 differ diff --git a/assets/fonts/Inter-Medium-9053572c46aeb4b16caafd643a543b8d.woff b/assets/fonts/Inter-Medium-9053572c46aeb4b16caafd643a543b8d.woff new file mode 100644 index 00000000000..d546843f283 Binary files /dev/null and b/assets/fonts/Inter-Medium-9053572c46aeb4b16caafd643a543b8d.woff differ diff --git a/assets/fonts/Inter-Regular-8c206db99195777c67691cbba9d64393.woff b/assets/fonts/Inter-Regular-8c206db99195777c67691cbba9d64393.woff new file mode 100644 index 00000000000..62d3a618710 Binary files /dev/null and b/assets/fonts/Inter-Regular-8c206db99195777c67691cbba9d64393.woff differ diff --git a/assets/fonts/Inter-Regular-c8ba52b05a9ef10f47584d08ece2ec5c.woff2 b/assets/fonts/Inter-Regular-c8ba52b05a9ef10f47584d08ece2ec5c.woff2 new file mode 100644 index 00000000000..6c2b6893d59 Binary files /dev/null and b/assets/fonts/Inter-Regular-c8ba52b05a9ef10f47584d08ece2ec5c.woff2 differ diff --git a/assets/fonts/Inter.var-c2fe3cb2b7c746f7966a973d869d21c3.woff2 b/assets/fonts/Inter.var-c2fe3cb2b7c746f7966a973d869d21c3.woff2 new file mode 100644 index 00000000000..365eedc50cd Binary files /dev/null and b/assets/fonts/Inter.var-c2fe3cb2b7c746f7966a973d869d21c3.woff2 differ diff --git a/assets/fonts/JetBrainsMono-Regular-1e66c47aca088de94ae789a48719cb00.woff2 b/assets/fonts/JetBrainsMono-Regular-1e66c47aca088de94ae789a48719cb00.woff2 new file mode 100644 index 00000000000..8c862e334da Binary files /dev/null and b/assets/fonts/JetBrainsMono-Regular-1e66c47aca088de94ae789a48719cb00.woff2 differ diff --git a/assets/images/cosmos-hub-image-64b35193bcb3998afd27f30060ed5ab5.jpg b/assets/images/cosmos-hub-image-64b35193bcb3998afd27f30060ed5ab5.jpg new file mode 100644 index 00000000000..2c3cb5cf7c9 Binary files /dev/null and b/assets/images/cosmos-hub-image-64b35193bcb3998afd27f30060ed5ab5.jpg differ diff --git a/assets/images/ledger-tuto-dev-mode-c4e394fda2491363a287cbf1fc82ab39.png b/assets/images/ledger-tuto-dev-mode-c4e394fda2491363a287cbf1fc82ab39.png new file mode 100644 index 00000000000..0973355c7d1 Binary files /dev/null and b/assets/images/ledger-tuto-dev-mode-c4e394fda2491363a287cbf1fc82ab39.png differ diff --git a/assets/images/ledger-tuto-manager-f0a3a54c10bfa2405995efaed78536f1.png b/assets/images/ledger-tuto-manager-f0a3a54c10bfa2405995efaed78536f1.png new file mode 100644 index 00000000000..561028128a8 Binary files /dev/null and b/assets/images/ledger-tuto-manager-f0a3a54c10bfa2405995efaed78536f1.png differ diff --git a/assets/images/ledger-tuto-search-d4d718ef5efa0fb720af125ef8819fd5.png b/assets/images/ledger-tuto-search-d4d718ef5efa0fb720af125ef8819fd5.png new file mode 100644 index 00000000000..ae651dbaf7c Binary files /dev/null and b/assets/images/ledger-tuto-search-d4d718ef5efa0fb720af125ef8819fd5.png differ diff --git a/assets/images/ledger_1-333b5a02b13138ef329933950ec162af.jpg b/assets/images/ledger_1-333b5a02b13138ef329933950ec162af.jpg new file mode 100644 index 00000000000..100175e1a7f Binary files /dev/null and b/assets/images/ledger_1-333b5a02b13138ef329933950ec162af.jpg differ diff --git a/assets/images/ledger_2-0fe258512b66899f1a60ffb8986ebb48.jpg b/assets/images/ledger_2-0fe258512b66899f1a60ffb8986ebb48.jpg new file mode 100644 index 00000000000..9c6fa6b1a65 Binary files /dev/null and b/assets/images/ledger_2-0fe258512b66899f1a60ffb8986ebb48.jpg differ diff --git a/assets/js/01b9aa88.7d55cfdd.js b/assets/js/01b9aa88.7d55cfdd.js new file mode 100644 index 00000000000..53260e773d8 --- /dev/null +++ b/assets/js/01b9aa88.7d55cfdd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcosmos_hub_docs_site=self.webpackChunkcosmos_hub_docs_site||[]).push([[4279],{5680:(e,t,r)=>{r.d(t,{xA:()=>p,yg:()=>f});var n=r(6540);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 c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},u="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(r),d=a,f=u["".concat(c,".").concat(d)]||u[d]||g[d]||i;return r?n.createElement(f,o(o({ref:t},p),{},{components:r})):n.createElement(f,o({ref:t},p))}));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]=d;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[u]="string"==typeof e?e:a,o[1]=l;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>g,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var n=r(8168),a=(r(6540),r(5680));const i={title:"Getting Started",order:null},o=void 0,l={unversionedId:"getting-started/README",id:"version-v19.1.0/getting-started/README",title:"Getting Started",description:"This folder contains tutorials related to the gaia application.",source:"@site/versioned_docs/version-v19.1.0/getting-started/README.md",sourceDirName:"getting-started",slug:"/getting-started/",permalink:"/v19.1.0/getting-started/",draft:!1,tags:[],version:"v19.1.0",frontMatter:{title:"Getting Started",order:null},sidebar:"tutorialSidebar",previous:{title:"Introduction",permalink:"/v19.1.0/"},next:{title:"What is Gaia?",permalink:"/v19.1.0/getting-started/what-is-gaia"}},c={},s=[],p={toc:s},u="wrapper";function g(e){let{components:t,...r}=e;return(0,a.yg)(u,(0,n.A)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.yg)("p",null,"This folder contains tutorials related to the ",(0,a.yg)("inlineCode",{parentName:"p"},"gaia")," application."),(0,a.yg)("ul",null,(0,a.yg)("li",{parentName:"ul"},(0,a.yg)("a",{parentName:"li",href:"/v19.1.0/getting-started/what-is-gaia"},"What is Gaia?")),(0,a.yg)("li",{parentName:"ul"},(0,a.yg)("a",{parentName:"li",href:"/v19.1.0/getting-started/installation"},"Installing ",(0,a.yg)("inlineCode",{parentName:"a"},"gaiad"))),(0,a.yg)("li",{parentName:"ul"},(0,a.yg)("a",{parentName:"li",href:"./quickstart.mdx"},"Joining Mainnet"))))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/039759af.12012230.js b/assets/js/039759af.12012230.js new file mode 100644 index 00000000000..32a5f233121 --- /dev/null +++ b/assets/js/039759af.12012230.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcosmos_hub_docs_site=self.webpackChunkcosmos_hub_docs_site||[]).push([[8679],{5680:(e,t,n)=>{n.d(t,{xA:()=>u,yg:()=>h});var r=n(6540);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 o(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 l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),c=function(e){var t=r.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 r.createElement(s.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=c(n),g=a,h=p["".concat(s,".").concat(g)]||p[g]||d[g]||o;return n?r.createElement(h,l(l({ref:t},u),{},{components:n})):r.createElement(h,l({ref:t},u))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=g;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:a,l[1]=i;for(var c=2;c{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var r=n(8168),a=(n(6540),n(5680));const o={},l=void 0,i={unversionedId:"architecture/templates/adr-template",id:"version-v19.1.0/architecture/templates/adr-template",title:"adr-template",description:"\x3c!--",source:"@site/versioned_docs/version-v19.1.0/architecture/templates/adr-template.md",sourceDirName:"architecture/templates",slug:"/architecture/templates/adr-template",permalink:"/v19.1.0/architecture/templates/adr-template",draft:!1,tags:[],version:"v19.1.0",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"ADR 003: Interchain Accounts Controller Module",permalink:"/v19.1.0/architecture/adr/adr-003-ica-controller"},next:{title:"ADR Creation Process",permalink:"/v19.1.0/architecture/PROCESS"}},s={},c=[{value:"Changelog",id:"changelog",level:2},{value:"Status",id:"status",level:2},{value:"Abstract",id:"abstract",level:2},{value:"Context",id:"context",level:2},{value:"Decision",id:"decision",level:2},{value:"Consequences",id:"consequences",level:2},{value:"Positive",id:"positive",level:3},{value:"Negative",id:"negative",level:3},{value:"Neutral",id:"neutral",level:3},{value:"References",id:"references",level:2}],u={toc:c},p="wrapper";function d(e){let{components:t,...n}=e;return(0,a.yg)(p,(0,r.A)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.yg)("h1",{id:"adr-adr-number-title"},"ADR {ADR-NUMBER}: {TITLE}"),(0,a.yg)("h2",{id:"changelog"},"Changelog"),(0,a.yg)("ul",null,(0,a.yg)("li",{parentName:"ul"},"{date}: {changelog}")),(0,a.yg)("h2",{id:"status"},"Status"),(0,a.yg)("p",null,"{DRAFT | PROPOSED} Not Implemented"),(0,a.yg)("blockquote",null,(0,a.yg)("p",{parentName:"blockquote"},"Please have a look at the ",(0,a.yg)("a",{parentName:"p",href:"../adr/PROCESS#adr-status"},"PROCESS")," page.\nUse DRAFT if the ADR is in a draft stage (draft PR) or PROPOSED if it's in review.")),(0,a.yg)("h2",{id:"abstract"},"Abstract"),(0,a.yg)("blockquote",null,(0,a.yg)("p",{parentName:"blockquote"},"\"If you can't explain it simply, you don't understand it well enough.\" Provide\na simplified and layman-accessible explanation of the ADR.\nA short (~200 word) description of the issue being addressed.")),(0,a.yg)("h2",{id:"context"},"Context"),(0,a.yg)("blockquote",null,(0,a.yg)("p",{parentName:"blockquote"},"This section contains all the context one needs to understand the current state, and why there is a problem.\nIt should be as succinct as possible and introduce the high level idea behind the solution.\nThe language in this section is value-neutral. It is simply describing facts.")),(0,a.yg)("h2",{id:"decision"},"Decision"),(0,a.yg)("blockquote",null,(0,a.yg)("p",{parentName:"blockquote"},"This section explains all of the details of the proposed solution, including implementation details.\nIt should also describe affects / corollary items that may need to be changed as a part of this.\nIf the proposed change will be large, please also indicate a way to do the change to maximize ease of review.\n(e.g. the optimal split of things to do between separate PR's)")),(0,a.yg)("h2",{id:"consequences"},"Consequences"),(0,a.yg)("blockquote",null,(0,a.yg)("p",{parentName:"blockquote"},'This section describes the consequences, after applying the decision.\nAll consequences should be summarized here, not just the "positive" ones.')),(0,a.yg)("h3",{id:"positive"},"Positive"),(0,a.yg)("blockquote",null,(0,a.yg)("p",{parentName:"blockquote"},"{positive consequences}")),(0,a.yg)("h3",{id:"negative"},"Negative"),(0,a.yg)("blockquote",null,(0,a.yg)("p",{parentName:"blockquote"},"{negative consequences}")),(0,a.yg)("h3",{id:"neutral"},"Neutral"),(0,a.yg)("blockquote",null,(0,a.yg)("p",{parentName:"blockquote"},"{neutral consequences}")),(0,a.yg)("h2",{id:"references"},"References"),(0,a.yg)("blockquote",null,(0,a.yg)("p",{parentName:"blockquote"},"Are there any relevant PR comments, issues that led up to this, or articles referrenced for why we made the given design choice? If so link them here!")),(0,a.yg)("ul",null,(0,a.yg)("li",{parentName:"ul"},"{reference link}")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0a1c5ce6.0b85f852.js b/assets/js/0a1c5ce6.0b85f852.js new file mode 100644 index 00000000000..fdcbb8a63d5 --- /dev/null +++ b/assets/js/0a1c5ce6.0b85f852.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcosmos_hub_docs_site=self.webpackChunkcosmos_hub_docs_site||[]).push([[1711],{5680:(e,n,a)=>{a.d(n,{xA:()=>u,yg:()=>m});var t=a(6540);function o(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function i(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}return a}function r(e){for(var n=1;n=0||(o[a]=e[a]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=t.createContext({}),c=function(e){var n=t.useContext(s),a=n;return e&&(a="function"==typeof e?e(n):r(r({},n),e)),a},u=function(e){var n=c(e.components);return t.createElement(s.Provider,{value:n},e.children)},d="mdxType",g={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},p=t.forwardRef((function(e,n){var a=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=c(a),p=o,m=d["".concat(s,".").concat(p)]||d[p]||g[p]||i;return a?t.createElement(m,r(r({ref:n},u),{},{components:a})):t.createElement(m,r({ref:n},u))}));function m(e,n){var a=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var i=a.length,r=new Array(i);r[0]=p;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l[d]="string"==typeof e?e:o,r[1]=l;for(var c=2;c{a.r(n),a.d(n,{assets:()=>s,contentTitle:()=>r,default:()=>g,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var t=a(8168),o=(a(6540),a(5680));const i={title:"Service Providers",order:4},r=void 0,l={unversionedId:"resources/service-providers",id:"version-v19.1.0/resources/service-providers",title:"Service Providers",description:"'Service Providers' are defined as entities that provide services for end-users that involve some form of interaction with the Cosmos Hub. More specifically, this document is focused on interactions with tokens.",source:"@site/versioned_docs/version-v19.1.0/resources/service-providers.md",sourceDirName:"resources",slug:"/resources/service-providers",permalink:"/v19.1.0/resources/service-providers",draft:!1,tags:[],version:"v19.1.0",frontMatter:{title:"Service Providers",order:4},sidebar:"tutorialSidebar",previous:{title:"Building Gaia Deterministically",permalink:"/v19.1.0/resources/reproducible-builds"},next:{title:"Architecture Decision Records (ADR)",permalink:"/v19.1.0/architecture/"}},s={},c=[{value:"Connection Options",id:"connection-options",level:2},{value:"Running a Full Node",id:"running-a-full-node",level:2},{value:"What is a Full Node?",id:"what-is-a-full-node",level:3},{value:"Installation and Configuration",id:"installation-and-configuration",level:3},{value:"Command-Line Interface",id:"command-line-interface",level:2},{value:"Available Commands",id:"available-commands",level:3},{value:"Remote Access to gaiad",id:"remote-access-to-gaiad",level:3},{value:"Create a Key Pair",id:"create-a-key-pair",level:3},{value:"Check your Account",id:"check-your-account",level:4},{value:"Check your Balance",id:"check-your-balance",level:3},{value:"Send Coins Using the CLI",id:"send-coins-using-the-cli",level:4},{value:"REST API",id:"rest-api",level:2},{value:"Listen for Incoming Transactions",id:"listen-for-incoming-transactions",level:3}],u={toc:c},d="wrapper";function g(e){let{components:n,...a}=e;return(0,o.yg)(d,(0,t.A)({},u,a,{components:n,mdxType:"MDXLayout"}),(0,o.yg)("p",null,"'Service Providers' are defined as entities that provide services for end-users that involve some form of interaction with the Cosmos Hub. More specifically, this document is focused on interactions with tokens."),(0,o.yg)("p",null,"Service Providers are expected to act as trusted points of contact to the blockchain for their end-users. This Service Providers section does not apply to wallet builders that want to provide Light Client functionalities."),(0,o.yg)("p",null,"This document describes:"),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#connection-options"},"Connection Options")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#running-a-full-node"},"Running a Full Node"),(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#what-is-a-full-node"},"What is a Full Node?")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#installation-and-configuration"},"Installation and Configuration")))),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#command-line-interface"},"Command-Line Interface"),(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#available-commands"},"Available Commands")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#remote-access-to-gaiad"},"Remote Access to gaiad")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#create-a-key-pair"},"Create a Key Pair"),(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#check-your-account"},"Check your Account")))),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#check-your-balance"},"Check your Balance"),(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#send-coins-using-the-cli"},"Send Coins Using the CLI")))))),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#rest-api"},"REST API"),(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#listen-for-incoming-transactions"},"Listen for Incoming Transactions"))))),(0,o.yg)("h2",{id:"connection-options"},"Connection Options"),(0,o.yg)("p",null,"There are four main technologies to consider to connect to the Cosmos Hub:"),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},"Full Nodes: Interact with the blockchain."),(0,o.yg)("li",{parentName:"ul"},"REST Server: Serves for HTTP calls."),(0,o.yg)("li",{parentName:"ul"},"REST API: Use available endpoints for the REST Server."),(0,o.yg)("li",{parentName:"ul"},"GRPC: Connect to the Cosmos Hub using gRPC.")),(0,o.yg)("h2",{id:"running-a-full-node"},"Running a Full Node"),(0,o.yg)("h3",{id:"what-is-a-full-node"},"What is a Full Node?"),(0,o.yg)("p",null,"A Full Node is a network node that syncs up with the state of the blockchain. It provides blockchain data to others by using RESTful APIs, a replica of the database by exposing data with interfaces. A Full Node keeps in syncs with the rest of the blockchain nodes and stores the state on disk. If the full node does not have the queried block on disk the full node can go find the blockchain where the queried data lives."),(0,o.yg)("h3",{id:"installation-and-configuration"},"Installation and Configuration"),(0,o.yg)("p",null,"This section describes the steps to run and interact with a full node for the Cosmos Hub."),(0,o.yg)("p",null,"First, you need to ",(0,o.yg)("a",{parentName:"p",href:"../getting-started/installation"},"install the software"),"."),(0,o.yg)("p",null,"Consider running your own ",(0,o.yg)("a",{parentName:"p",href:"../hub-tutorials/join-mainnet"},"Cosmos Hub Full Node"),"."),(0,o.yg)("h2",{id:"command-line-interface"},"Command-Line Interface"),(0,o.yg)("p",null,"The command-line interface (CLI) is the most powerful tool to access the Cosmos Hub and use gaia.\nTo use the CLI, you must install the latest version of ",(0,o.yg)("inlineCode",{parentName:"p"},"gaia")," on your machine."),(0,o.yg)("p",null,"Compare your version with the ",(0,o.yg)("a",{parentName:"p",href:"https://github.com/cosmos/gaia/releases"},"latest release version")),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},"gaiad version --long\n")),(0,o.yg)("h3",{id:"available-commands"},"Available Commands"),(0,o.yg)("p",null,"All available CLI commands are shown when you run the ",(0,o.yg)("inlineCode",{parentName:"p"},"gaiad")," command:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},"gaiad\n")),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},'Stargate Cosmos Hub App\n\nUsage:\n gaiad [command]\n\nAvailable Commands:\n\n\n add-genesis-account Add a genesis account to genesis.json\n collect-gentxs Collect genesis txs and output a genesis.json file\n debug Tool for helping with debugging your application\n export Export state to JSON\n gentx Generate a genesis tx carrying a self delegation\n help Help about any command\n init Initialize private validator, p2p, genesis, and application configuration files\n keys Manage your application\'s keys\n migrate Migrate genesis to a specified target version\n query Querying subcommands\n start Run the full node\n status Query remote node for status\n tendermint Tendermint subcommands\n testnet Initialize files for a simapp testnet\n tx Transactions subcommands\n unsafe-reset-all Resets the blockchain database, removes address book files, and resets data/priv_validator_state.json to the genesis state\n validate-genesis validates the genesis file at the default location or at the location passed as an arg\n version Print the application binary version information\n\nFlags:\n -h, --help help for gaiad\n --home string directory for config and data (default "/Users/tobias/.gaia")\n --log_format string The logging format (json|plain) (default "plain")\n --log_level string The logging level (trace|debug|info|warn|error|fatal|panic) (default "info")\n --trace print out full stack trace on errors\n\nUse "gaiad [command] --help" for more information about a command.\n')),(0,o.yg)("p",null,"For each displayed command, you can use the ",(0,o.yg)("inlineCode",{parentName:"p"},"--help")," flag to get further information."),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},'gaiad query --help\nUsage:\n gaiad query [flags]\n gaiad query [command]\n\nAliases:\n query, q\n\nAvailable Commands:\n account Query for account by address\n auth Querying commands for the auth module\n bank Querying commands for the bank module\n block Get verified data for a the block at given height\n distribution Querying commands for the distribution module\n evidence Query for evidence by hash or for all (paginated) submitted evidence\n gov Querying commands for the governance module\n ibc Querying commands for the IBC module\n ibc-transfer IBC fungible token transfer query subcommands\n mint Querying commands for the minting module\n params Querying commands for the params module\n slashing Querying commands for the slashing module\n staking Querying commands for the staking module\n tendermint-validator-set Get the full tendermint validator set at given height\n tx Query for a transaction by hash in a committed block\n txs Query for paginated transactions that match a set of events\n upgrade Querying commands for the upgrade module\n\nFlags:\n --chain-id string The network chain ID\n -h, --help help for query\n\nGlobal Flags:\n --home string directory for config and data (default "/Users/tobias/.gaia")\n --log_format string The logging format (json|plain) (default "plain")\n --log_level string The logging level (trace|debug|info|warn|error|fatal|panic) (default "info")\n --trace print out full stack trace on errors\n\nUse "gaiad query [command] --help" for more information about a command.\n')),(0,o.yg)("h3",{id:"remote-access-to-gaiad"},"Remote Access to gaiad"),(0,o.yg)("p",null,"When choosing to remote access a Full Node and gaiad, you need a Full Node running and gaia installed on your local machine."),(0,o.yg)("p",null,(0,o.yg)("inlineCode",{parentName:"p"},"gaiad")," is the tool that enables you to interact with the node that runs on the Cosmos Hub network, whether you run it yourself or not."),(0,o.yg)("p",null,"To set up ",(0,o.yg)("inlineCode",{parentName:"p"},"gaiad")," on a local machine and connect to an existing full node, use the following command:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},"gaiad config \n")),(0,o.yg)("p",null,"First, set up the address of the full node you want to connect to:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},"gaiad config node :\n")),(0,o.yg)("p",null,"You will be asked to create a password (at least 8 characters) for this key-pair. This will return the information listed below:"),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"NAME"),": Name of your key"),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"TYPE"),": Type of your key, always ",(0,o.yg)("inlineCode",{parentName:"li"},"local"),"."),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"ADDRESS"),": Your address. Used to receive funds."),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"PUBKEY"),": Your public key. Useful for validators."),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"MNEMONIC"),": 24-word phrase. ",(0,o.yg)("strong",{parentName:"li"},"Save this mnemonic somewhere safe"),". This phrase is required to recover your private key in case you forget the password. The mnemonic is displayed at the end of the output.")),(0,o.yg)("p",null,"You can see all available keys by typing:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},"gaiad keys list\n")),(0,o.yg)("p",null,"Use the ",(0,o.yg)("inlineCode",{parentName:"p"},"--recover")," flag to add a key that imports a mnemonic to your keyring."),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},"gaiad keys add --recover\n")),(0,o.yg)("h4",{id:"check-your-account"},"Check your Account"),(0,o.yg)("p",null,"You can view your account by using the ",(0,o.yg)("inlineCode",{parentName:"p"},"query account")," command."),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},"gaiad query account \n")),(0,o.yg)("p",null,"It will display your account type, account number, public key and current account sequence."),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},"'@type': /cosmos.auth.v1beta1.BaseAccount\naccount_number: \"xxxx\"\naddress: cosmosxxxx\npub_key:\n '@type': /cosmos.crypto.secp256k1.PubKey\n key: xxx\nsequence: \"x\"\n")),(0,o.yg)("h3",{id:"check-your-balance"},"Check your Balance"),(0,o.yg)("p",null,"Query the account balance with the command:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},"gaiad query bank balances \n")),(0,o.yg)("p",null,"The response contains keys ",(0,o.yg)("inlineCode",{parentName:"p"},"balances")," and ",(0,o.yg)("inlineCode",{parentName:"p"},"pagination"),".\nEach ",(0,o.yg)("inlineCode",{parentName:"p"},"balances")," entry contains an ",(0,o.yg)("inlineCode",{parentName:"p"},"amount")," held, connected to a ",(0,o.yg)("inlineCode",{parentName:"p"},"denom")," identifier.\nThe typical $ATOM token is identified by the denom ",(0,o.yg)("inlineCode",{parentName:"p"},"uatom"),". Where 1 ",(0,o.yg)("inlineCode",{parentName:"p"},"uatom")," is 0.000001 ATOM."),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},'balances:\n- amount: "12345678"\n denom: uatom\npagination:\n next_key: null\n total: "0"\n')),(0,o.yg)("p",null,"When you query an account that has not received any token yet, the ",(0,o.yg)("inlineCode",{parentName:"p"},"balances")," entry is shown as an empty array."),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},'balances: []\npagination:\n next_key: null\n total: "0"\n')),(0,o.yg)("h4",{id:"send-coins-using-the-cli"},"Send Coins Using the CLI"),(0,o.yg)("p",null,"To send coins using the CLI:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},"gaiad tx bank send [from_key_or_address] [to_address] [amount] [flags]\n")),(0,o.yg)("p",null,"Parameters:"),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},""),": Key name or address of sending account."),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},""),": Address of the recipient."),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},""),": This parameter accepts the format ",(0,o.yg)("inlineCode",{parentName:"li"},""),", such as ",(0,o.yg)("inlineCode",{parentName:"li"},"1000000uatom"),".")),(0,o.yg)("p",null,"Flags:"),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"--chain-id"),": This flag allows you to specify the id of the chain. There are different ids for different testnet chains and mainnet chains."),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"--gas-prices"),": This flag allows you to specify the gas prices you pay for the transaction. The format is used as ",(0,o.yg)("inlineCode",{parentName:"li"},"0.0025uatom"))),(0,o.yg)("h2",{id:"rest-api"},"REST API"),(0,o.yg)("p",null,"The REST API documents list all the available endpoints that you can use to interact\nwith your full node. Learn ",(0,o.yg)("a",{parentName:"p",href:"/v19.1.0/hub-tutorials/join-mainnet#enable-the-rest-api"},"how to enable the REST API")," on your full node."),(0,o.yg)("h3",{id:"listen-for-incoming-transactions"},"Listen for Incoming Transactions"),(0,o.yg)("p",null,"The recommended way to listen for incoming transactions is to periodically query the blockchain by using the following HTTP endpoint:"),(0,o.yg)("p",null,(0,o.yg)("inlineCode",{parentName:"p"},"/cosmos/bank/v1beta1/balances/{address}")))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0b65cac9.78e70349.js b/assets/js/0b65cac9.78e70349.js new file mode 100644 index 00000000000..2fc2168cf4f --- /dev/null +++ b/assets/js/0b65cac9.78e70349.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcosmos_hub_docs_site=self.webpackChunkcosmos_hub_docs_site||[]).push([[8070],{5680:(e,n,o)=>{o.d(n,{xA:()=>p,yg:()=>u});var i=o(6540);function a(e,n,o){return n in e?Object.defineProperty(e,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[n]=o,e}function t(e,n){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),o.push.apply(o,i)}return o}function r(e){for(var n=1;n=0||(a[o]=e[o]);return a}(e,n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var l=i.createContext({}),m=function(e){var n=i.useContext(l),o=n;return e&&(o="function"==typeof e?e(n):r(r({},n),e)),o},p=function(e){var n=m(e.components);return i.createElement(l.Provider,{value:n},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},g=i.forwardRef((function(e,n){var o=e.components,a=e.mdxType,t=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=m(o),g=a,u=d["".concat(l,".").concat(g)]||d[g]||c[g]||t;return o?i.createElement(u,r(r({ref:n},p),{},{components:o})):i.createElement(u,r({ref:n},p))}));function u(e,n){var o=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var t=o.length,r=new Array(t);r[0]=g;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s[d]="string"==typeof e?e:a,r[1]=s;for(var m=2;m{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>t,metadata:()=>s,toc:()=>m});var i=o(8168),a=(o(6540),o(5680));const t={},r="ADR 002: Globalfee Module",s={unversionedId:"architecture/adr/adr-002-globalfee",id:"architecture/adr/adr-002-globalfee",title:"ADR 002: Globalfee Module",description:"Changelog",source:"@site/docs/architecture/adr/adr-002-globalfee.md",sourceDirName:"architecture/adr",slug:"/architecture/adr/adr-002-globalfee",permalink:"/main/architecture/adr/adr-002-globalfee",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"adr-001-interchain-accounts",permalink:"/main/architecture/adr/adr-001-interchain-accounts"},next:{title:"ADR 003: Interchain Accounts Controller Module",permalink:"/main/architecture/adr/adr-003-ica-controller"}},l={},m=[{value:"Changelog",id:"changelog",level:2},{value:"Status",id:"status",level:2},{value:"Context",id:"context",level:2},{value:"Decision",id:"decision",level:2},{value:"ZeroCoins in MinimumGasPricesParam",id:"zerocoins-in-minimumgaspricesparam",level:3},{value:"Coins Split",id:"coins-split",level:4},{value:"Fee Checks",id:"fee-checks",level:4},{value:"Bypass Message Types",id:"bypass-message-types",level:3},{value:"Fee Checks in DeliverTx",id:"fee-checks-in--delivertx",level:3},{value:"Consequences",id:"consequences",level:2},{value:"Positive",id:"positive",level:3},{value:"Negative",id:"negative",level:3},{value:"References",id:"references",level:2}],p={toc:m},d="wrapper";function c(e){let{components:n,...o}=e;return(0,a.yg)(d,(0,i.A)({},p,o,{components:n,mdxType:"MDXLayout"}),(0,a.yg)("h1",{id:"adr-002-globalfee-module"},"ADR 002: Globalfee Module"),(0,a.yg)("h2",{id:"changelog"},"Changelog"),(0,a.yg)("ul",null,(0,a.yg)("li",{parentName:"ul"},"2023-06-12: Initial Draft"),(0,a.yg)("li",{parentName:"ul"},"2024-06-06: Change status to deprecated")),(0,a.yg)("h2",{id:"status"},"Status"),(0,a.yg)("p",null,"Deprecated"),(0,a.yg)("h2",{id:"context"},"Context"),(0,a.yg)("p",null,"The globalfee module was created to manage a parameter called ",(0,a.yg)("inlineCode",{parentName:"p"},"MinimumGasPricesParam"),", which sets a network-wide minimum fee requirement. The intention was to stop random denominations from entering fee collections and to reduce the time validators take to check a long list of transaction fees. To address scenarios where no fee payment is required but the denominations for volunteered paid fees are still restricted, the zero coins was introduced to serve as a means of limiting the denoms. Nevertheless, the initial version of the globalfee module had some issues:"),(0,a.yg)("ul",null,(0,a.yg)("li",{parentName:"ul"},(0,a.yg)("p",{parentName:"li"},"In the globalfee module, several Cosmos SDK coins methods were redefined because of the allowance of zero-value coins in the ",(0,a.yg)("inlineCode",{parentName:"p"},"MinimumGasPricesParam"),". The ",(0,a.yg)("inlineCode",{parentName:"p"},"MinimumGasPricesParam")," is of ",(0,a.yg)("inlineCode",{parentName:"p"},"sdk.DecCoins")," type. In the Cosmos SDK, ",(0,a.yg)("inlineCode",{parentName:"p"},"sdk.DecCoins")," are ",(0,a.yg)("a",{parentName:"p",href:"https://github.com/cosmos/cosmos-sdk/blob/67f04e629623d4691c4b2e48806f7793a3aa211e/types/dec_coin.go#L160-L177"},"sanitized")," to remove zero-value coins. As a result, several methods from ",(0,a.yg)("inlineCode",{parentName:"p"},"sdk.Coins")," were ",(0,a.yg)("a",{parentName:"p",href:"https://github.com/cosmos/gaia/blob/890ab3aa2e5788537b0d2ebc9bafdc968340e0e5/x/globalfee/ante/fee_utils.go#L46-L104"},"redefined in the Gaia fee antehandler"),".")),(0,a.yg)("li",{parentName:"ul"},(0,a.yg)("p",{parentName:"li"},(0,a.yg)("inlineCode",{parentName:"p"},"BypassMinFeeMsgTypes")," exists in ",(0,a.yg)("inlineCode",{parentName:"p"},"app.toml"),", which means each node can define its own value. Thus, it's not clear whether a transaction containing bypass-messages will be exempted from paying a fee.")),(0,a.yg)("li",{parentName:"ul"},(0,a.yg)("p",{parentName:"li"},"The fee check logic is only executed in ",(0,a.yg)("inlineCode",{parentName:"p"},"CheckTx"),". This could enable malicious validators to change the fee check code and propose transactions that do not meet the fee requirement."))),(0,a.yg)("h2",{id:"decision"},"Decision"),(0,a.yg)("p",null,"To fix these problems, the following changes are added to the globalfee module:"),(0,a.yg)("ul",null,(0,a.yg)("li",{parentName:"ul"},(0,a.yg)("strong",{parentName:"li"},"ZeroCoins in ",(0,a.yg)("inlineCode",{parentName:"strong"},"MinimumGasPricesParam"),":"),"\\\nRefactor the fee check logics, in order to use the Cosmos SDK coins' methods instead of the redefined methods."),(0,a.yg)("li",{parentName:"ul"},(0,a.yg)("strong",{parentName:"li"},"Bypass Message Types:"),"\\\n",(0,a.yg)("inlineCode",{parentName:"li"},"BypassMinFeeMsgTypes")," is refactored to be a param of the globalfee module, in order to make the bypass messages deterministic."),(0,a.yg)("li",{parentName:"ul"},(0,a.yg)("strong",{parentName:"li"},"Check Fees in ",(0,a.yg)("inlineCode",{parentName:"strong"},"DeliverTx"),":"),"\\\nThe fee check is factored to executed in both ",(0,a.yg)("inlineCode",{parentName:"li"},"DeliverTx")," and ",(0,a.yg)("inlineCode",{parentName:"li"},"CheckTx"),". This is to prevent malicious validators from changing the fee check logic and allowing any transactions to pass fee check. As a consequence, ",(0,a.yg)("inlineCode",{parentName:"li"},"MinimumGasPricesParam")," is introduced as a globalfee param.")),(0,a.yg)("h3",{id:"zerocoins-in-minimumgaspricesparam"},"ZeroCoins in ",(0,a.yg)("inlineCode",{parentName:"h3"},"MinimumGasPricesParam")),(0,a.yg)("h4",{id:"coins-split"},"Coins Split"),(0,a.yg)("p",null,(0,a.yg)("inlineCode",{parentName:"p"},"CombinedFeeRequirement")," refers to the fee requirement that takes into account both ",(0,a.yg)("inlineCode",{parentName:"p"},"globalFees")," (",(0,a.yg)("inlineCode",{parentName:"p"},"MinimumGasPricesParam")," in the globalfee module) and ",(0,a.yg)("inlineCode",{parentName:"p"},"localFees")," (",(0,a.yg)("inlineCode",{parentName:"p"},"minimum-gas-prices")," in ",(0,a.yg)("inlineCode",{parentName:"p"},"app.toml"),"). This requirement is calculated as the maximum value between ",(0,a.yg)("inlineCode",{parentName:"p"},"globalFees")," and ",(0,a.yg)("inlineCode",{parentName:"p"},"localFees")," for denomination exists ",(0,a.yg)("inlineCode",{parentName:"p"},"globalFees"),".\nThe allowance of zero coins in the ",(0,a.yg)("inlineCode",{parentName:"p"},"MinimumGasPricesParam")," within the globalfee module implies that ",(0,a.yg)("inlineCode",{parentName:"p"},"CombinedFeeRequirement(globalFees, localFees)")," also permits zero coins. Therefore, the ",(0,a.yg)("inlineCode",{parentName:"p"},"CombinedFeeRequirement")," doesn't meet the requirements of certain ",(0,a.yg)("inlineCode",{parentName:"p"},"sdk.Coins")," methods. For instance, the ",(0,a.yg)("inlineCode",{parentName:"p"},"DenomsSubsetOf")," method requires coins that do not contain zero coins."),(0,a.yg)("p",null,"To address this issue, the ",(0,a.yg)("inlineCode",{parentName:"p"},"CombinedFeeRequirement")," and ",(0,a.yg)("inlineCode",{parentName:"p"},"feeCoins")," are split as shown in the chart below."),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre",className:"language-mermaid"},"---\ntitle: Fee Requirements and Fee Splits\n---\nflowchart TD\n subgraph feeReq\n A[CombinedFeeRequirement]--\x3eB[/Split zero/nonzero coins/]\n B--\x3e|zero coins| C[zeroCoinFeesDenomReq];\n B--\x3e|nonzero coins| D[nonzeroCoinFeesDenomReq];\n\n end\n\n subgraph feeCoin\n E[feeCoins]--\x3eF[/Split by the denoms in zero/nonzero CoinFeesDenomReq/]\n F--\x3e|denoms in zeroCoinFeesDenomReq set| G[feeCoinsZeroDenom]\n F--\x3e|denoms in nonzeroCoinFeesDenomReq set| H[feeCoinsNonZeroDenom]\n end\n")),(0,a.yg)("p",null,"The ",(0,a.yg)("inlineCode",{parentName:"p"},"CombinedFeeRequirement")," is split into zero and non-zero coins, forming ",(0,a.yg)("inlineCode",{parentName:"p"},"nonZeroCoinFeesReq")," and ",(0,a.yg)("inlineCode",{parentName:"p"},"zeroCoinFeesDenomReq"),". Similarly, the paid fees (feeCoins) are split into ",(0,a.yg)("inlineCode",{parentName:"p"},"feeCoinsNonZeroDenom")," and ",(0,a.yg)("inlineCode",{parentName:"p"},"feeCoinsZeroDenom"),", based on the denominations of ",(0,a.yg)("inlineCode",{parentName:"p"},"nonZeroCoinFeesReq")," and ",(0,a.yg)("inlineCode",{parentName:"p"},"zeroCoinFeesDenomReq")," as shown in the following code snippet."),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre",className:"language-go"}," nonZeroCoinFeesReq, zeroCoinFeesDenomReq := getNonZeroFees(feeRequired)\n\n // feeCoinsNonZeroDenom contains non-zero denominations from the feeRequired\n // feeCoinsNonZeroDenom is used to check if the fees meets the requirement imposed by nonZeroCoinFeesReq\n // when feeCoins does not contain zero coins' denoms in feeRequired\n feeCoinsNonZeroDenom, feeCoinsZeroDenom := splitCoinsByDenoms(feeCoins, zeroCoinFeesDenomReq)\n\n")),(0,a.yg)("h4",{id:"fee-checks"},"Fee Checks"),(0,a.yg)("p",null,"The Workflow of feeCheck is shown below:"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre",className:"language-mermaid"},"---\ntitle: Fee Check\n---\nflowchart TD\n\nA[feeCoinsNonZeroDenom]--\x3eB[/DenomsSubsetOf_nonZeroCoinFeesReq/];\nB--\x3e|yes|C[is_bypass_msg];\nB--\x3e|no|D((reject));\n\nC--\x3e|yes|pass1((pass));\nC--\x3e|no|D[/contain_zeroCoinFeesDenomReq_denom/];\n\nD--\x3e|yes|pass2((pass));\nD--\x3e|no|E[/feeCoinsZeroDenom_nonEmpty/];\n\n\nE--\x3e|yes|pass3((pass));\nE--\x3e|no|F[/IsAnyGTE_nonZeroCoinFeesDenomReq/];\n\nF--\x3e|yes|pass4((pass));\nF--\x3e|no|reject2((reject));\n")),(0,a.yg)("p",null,"The split enable checking ",(0,a.yg)("inlineCode",{parentName:"p"},"feeCoinsNonZeroDenom")," against ",(0,a.yg)("inlineCode",{parentName:"p"},"nonZeroCoinFeesReq"),", and ",(0,a.yg)("inlineCode",{parentName:"p"},"feeCoinsZeroDenom")," against\n",(0,a.yg)("inlineCode",{parentName:"p"},"zeroCoinFeesDenomReq")," (as shown in the following code snippet). In the check of ",(0,a.yg)("inlineCode",{parentName:"p"},"feeCoinsNonZeroDenom")," against ",(0,a.yg)("inlineCode",{parentName:"p"},"nonZeroCoinFeesReq"),", the Cosmos SDK coins' methods can be used since zero coins are removed from the ",(0,a.yg)("inlineCode",{parentName:"p"},"nonZeroCoinFeesReq"),", while in the check ",(0,a.yg)("inlineCode",{parentName:"p"},"feeCoinsZeroDenom")," against ",(0,a.yg)("inlineCode",{parentName:"p"},"zeroCoinFeesDenomReq"),", only denoms need to be checked."),(0,a.yg)("p",null,"Checking ",(0,a.yg)("inlineCode",{parentName:"p"},"feeCoinsNonZeroDenom")," against ",(0,a.yg)("inlineCode",{parentName:"p"},"nonZeroCoinFeesReq"),":"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre",className:"language-go"},' if !feeCoinsNonZeroDenom.IsAnyGTE(nonZeroCoinFeesReq) {\n return ctx, sdkerrors.Wrapf(sdkerrors.ErrInsufficientFee, "insufficient fees; got: %s required: %s", feeCoins.String(), feeRequired.String())\n }\n')),(0,a.yg)("p",null,"Here is an example of how the coins split and checked in fee antehandler:"),(0,a.yg)("p",null,(0,a.yg)("strong",{parentName:"p"},"assumption"),":"),(0,a.yg)("p",null,(0,a.yg)("inlineCode",{parentName:"p"},"globalfee=[1photon, 0uatom, 1stake]")," and ",(0,a.yg)("inlineCode",{parentName:"p"},"local min-gas-prices=[0.5stake]")),(0,a.yg)("p",null,(0,a.yg)("strong",{parentName:"p"},"fee requirement"),":"),(0,a.yg)("p",null,(0,a.yg)("inlineCode",{parentName:"p"},"combinedFeeRequirement=[1photon, 0uatom, 1stake]")),(0,a.yg)("p",null,(0,a.yg)("strong",{parentName:"p"},"split fee requirement"),":"),(0,a.yg)("p",null,"the ",(0,a.yg)("inlineCode",{parentName:"p"},"combinedFeeRequirement")," into ",(0,a.yg)("inlineCode",{parentName:"p"},"nonZeroCoinFeesReq=[0uatom]"),", and ",(0,a.yg)("inlineCode",{parentName:"p"},"nonZeroCoinFeesReq=[1photon, 1stake]")),(0,a.yg)("p",null,(0,a.yg)("strong",{parentName:"p"},"split the paid fees"),":"),(0,a.yg)("p",null,"if ",(0,a.yg)("inlineCode",{parentName:"p"},"paidFee=[1uatom, 0.5photon]"),",\nthe ",(0,a.yg)("inlineCode",{parentName:"p"},"splitCoinsByDenoms")," splits the paidFee into ",(0,a.yg)("inlineCode",{parentName:"p"},"feeCoinsZeroDenom=[1uatom]")," (the same denom as zero coins in ",(0,a.yg)("inlineCode",{parentName:"p"},"combinedFeeRequirement"),"), and ",(0,a.yg)("inlineCode",{parentName:"p"},"feeCoinsNonZeroDenom=[0.5stake]"),"\nthen ",(0,a.yg)("inlineCode",{parentName:"p"},"feeCoinsZeroDenom=[1uatom]")," is checked by ",(0,a.yg)("inlineCode",{parentName:"p"},"nonZeroCoinFeesReq=[1photon, 1stake]"),"."),(0,a.yg)("p",null,"Please note that ",(0,a.yg)("inlineCode",{parentName:"p"},"feeCoins")," does not contain zero coins. The fee coins are split according to the denoms in ",(0,a.yg)("inlineCode",{parentName:"p"},"zeroCoinFeesDenomReq")," or ",(0,a.yg)("inlineCode",{parentName:"p"},"nonZeroCoinFeesDenomReq"),". If feeCoins contains coins not in both ",(0,a.yg)("inlineCode",{parentName:"p"},"zeroCoinFeesDenomReq")," and ",(0,a.yg)("inlineCode",{parentName:"p"},"nonZeroCoinFeesDenomReq"),", the transaction should be rejected. On the contrary, if feeCoins' denoms are in either ",(0,a.yg)("inlineCode",{parentName:"p"},"zeroCoinFeesDenomReq")," or ",(0,a.yg)("inlineCode",{parentName:"p"},"nonZeroCoinFeesDenomReq"),", and ",(0,a.yg)("inlineCode",{parentName:"p"},"len(zeroCoinFeesDenomReq)!=0"),", the transaction can directly pass, otherwise, the fee amount need to be checked."),(0,a.yg)("h3",{id:"bypass-message-types"},"Bypass Message Types"),(0,a.yg)("p",null,(0,a.yg)("inlineCode",{parentName:"p"},"BypassMinFeeMsgTypes")," was a setup in ",(0,a.yg)("inlineCode",{parentName:"p"},"config/app.toml")," before the refactor. ",(0,a.yg)("inlineCode",{parentName:"p"},"BypassMinFeeMsgTypes")," is refactored to be a param of the globalfee module to get a network level agreement. Correspondingly,",(0,a.yg)("inlineCode",{parentName:"p"},"MaxTotalBypassMinFeeMsgGasUsage")," is also introduced as a globalfee param."),(0,a.yg)("h3",{id:"fee-checks-in--delivertx"},"Fee Checks in ",(0,a.yg)("inlineCode",{parentName:"h3"},"DeliverTx")),(0,a.yg)("p",null,"Implementing fee checks within the ",(0,a.yg)("inlineCode",{parentName:"p"},"DeliverTx")," function introduces a few requirements:"),(0,a.yg)("ul",null,(0,a.yg)("li",{parentName:"ul"},(0,a.yg)("strong",{parentName:"li"},"Deterministic Minimum Fee Requirement"),": For the ",(0,a.yg)("inlineCode",{parentName:"li"},"DeliverTx")," process, it is essential to have a deterministic minimum fee requirement. In ",(0,a.yg)("inlineCode",{parentName:"li"},"CheckTx"),", fee is checked by the ",(0,a.yg)("inlineCode",{parentName:"li"},"CombinedFeeRequirement(globalFees, localFees)"),", which considers both ",(0,a.yg)("inlineCode",{parentName:"li"},"minimum-gas-prices")," from ",(0,a.yg)("inlineCode",{parentName:"li"},"config/app.toml")," and ",(0,a.yg)("inlineCode",{parentName:"li"},"MinimumGasPricesParam")," from the globalfee Params (For more details, see ",(0,a.yg)("a",{parentName:"li",href:"/main/modules/globalfee"},"globalfee"),"). ",(0,a.yg)("inlineCode",{parentName:"li"},"CombinedFeeRequirement")," contains non-deterministic part: ",(0,a.yg)("inlineCode",{parentName:"li"},"minimum-gas-prices")," from ",(0,a.yg)("inlineCode",{parentName:"li"},"app.toml"),". Therefore, ",(0,a.yg)("inlineCode",{parentName:"li"},"CombinedFeeRequirement")," cannot be used in ",(0,a.yg)("inlineCode",{parentName:"li"},"DeliverTx"),". In ",(0,a.yg)("inlineCode",{parentName:"li"},"DeliverTx"),", only ",(0,a.yg)("inlineCode",{parentName:"li"},"MinimumGasPricesParam")," in globalfee Params is used for fee verification. The code implementation is shown below. ")),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre",className:"language-go"},'func (mfd FeeDecorator) GetTxFeeRequired(ctx sdk.Context, tx sdk.FeeTx) (sdk.Coins, error) {\n // Get required global fee min gas prices\n // Note that it should never be empty since its default value is set to coin={"StakingBondDenom", 0}\n globalFees, err := mfd.GetGlobalFee(ctx, tx)\n if err != nil {\n return sdk.Coins{}, err\n }\n\n // In DeliverTx, the global fee min gas prices are the only tx fee requirements.\n if !ctx.IsCheckTx() {\n return globalFees, nil\n }\n\n // In CheckTx mode, the local and global fee min gas prices are combined\n // to form the tx fee requirements\n\n // Get local minimum-gas-prices\n localFees := GetMinGasPrice(ctx, int64(tx.GetGas()))\n\n // Return combined fee requirements\n return CombinedFeeRequirement(globalFees, localFees)\n}\n')),(0,a.yg)("ul",null,(0,a.yg)("li",{parentName:"ul"},(0,a.yg)("p",{parentName:"li"},(0,a.yg)("strong",{parentName:"p"},"Deterministic Bypass Parameters"),": The decision of whether a message can bypass the minimum fee has to be deterministic as well. To ensure this, ",(0,a.yg)("inlineCode",{parentName:"p"},"BypassMinFeeMsgTypes")," and ",(0,a.yg)("inlineCode",{parentName:"p"},"MaxTotalBypassMinFeeMsgGasUsage")," parameters are moved to a persistent store.")),(0,a.yg)("li",{parentName:"ul"},(0,a.yg)("p",{parentName:"li"},(0,a.yg)("strong",{parentName:"p"},"Module Initialization Order"),": The genutils module must be initialized before the globalfee module. This is due to the ",(0,a.yg)("inlineCode",{parentName:"p"},"DeliverGenTxs")," in the genutils module, is called during ",(0,a.yg)("inlineCode",{parentName:"p"},"initGenesis"),". This function executes ",(0,a.yg)("inlineCode",{parentName:"p"},"DeliverTx"),", which subsequently calls the AnteHandle in FeeDecorator, triggering the fee check in ",(0,a.yg)("inlineCode",{parentName:"p"},"DeliverTx"),".\nTo prevent the ",(0,a.yg)("inlineCode",{parentName:"p"},"DeliverGenTxs")," go through a fee check, the initialization of the globalfee module should occur after the genutils module. This sequencing ensures that all necessary components are in place when the fee check occurs. See ",(0,a.yg)("a",{parentName:"p",href:"https://github.com/cosmos/gaia/issues/2489"},"Gaia Issue #2489")," for more context."))),(0,a.yg)("h2",{id:"consequences"},"Consequences"),(0,a.yg)("h3",{id:"positive"},"Positive"),(0,a.yg)("p",null,"This refactor results in code that is easier to maintain. It prevents malicious validators from escaping fee checks and make the bypass messages work at network level."),(0,a.yg)("h3",{id:"negative"},"Negative"),(0,a.yg)("p",null,"The introduction of FeeDecorator has replaced the usage of ",(0,a.yg)("inlineCode",{parentName:"p"},"MempoolFeeDecorator")," in the Cosmos SDK. Currently, if both FeeDecorator and MempoolFeeDecorator are added to the AnteDecorator chain, it will result in redundant checks. However, there's potential for FeeDecorator and MempoolFeeDecorator to become incompatible in the future, depending on updates to the Cosmos SDK."),(0,a.yg)("h2",{id:"references"},"References"),(0,a.yg)("ul",null,(0,a.yg)("li",{parentName:"ul"},(0,a.yg)("a",{parentName:"li",href:"../../modules/globalfee"},"Documentation of the globalfee module"))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0ce6bca3.7f4755fc.js b/assets/js/0ce6bca3.7f4755fc.js new file mode 100644 index 00000000000..16e4701e345 --- /dev/null +++ b/assets/js/0ce6bca3.7f4755fc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcosmos_hub_docs_site=self.webpackChunkcosmos_hub_docs_site||[]).push([[4036],{5680:(e,t,a)=>{a.d(t,{xA:()=>p,yg:()=>g});var n=a(6540);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 i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),u=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},p=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),c=u(a),m=r,g=c["".concat(s,".").concat(m)]||c[m]||d[m]||i;return a?n.createElement(g,l(l({ref:t},p),{},{components:a})):n.createElement(g,l({ref:t},p))}));function g(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=a.length,l=new Array(i);l[0]=m;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[c]="string"==typeof e?e:r,l[1]=o;for(var u=2;u{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>i,metadata:()=>o,toc:()=>u});var n=a(8168),r=(a(6540),a(5680));const i={title:"ADR Creation Process",order:2},l=void 0,o={unversionedId:"architecture/PROCESS",id:"architecture/PROCESS",title:"ADR Creation Process",description:"1. Copy the adr-template.md file. Use the following filename pattern: adr-next_number-title.md",source:"@site/docs/architecture/PROCESS.md",sourceDirName:"architecture",slug:"/architecture/PROCESS",permalink:"/main/architecture/PROCESS",draft:!1,tags:[],version:"current",frontMatter:{title:"ADR Creation Process",order:2},sidebar:"tutorialSidebar",previous:{title:"adr-template",permalink:"/main/architecture/templates/adr-template"},next:{title:"Gaia Modules",permalink:"/main/modules/"}},s={},u=[{value:"ADR life cycle",id:"adr-life-cycle",level:2},{value:"ADR status",id:"adr-status",level:3},{value:"Consensus Status",id:"consensus-status",level:4},{value:"Language used in ADR",id:"language-used-in-adr",level:2}],p={toc:u},c="wrapper";function d(e){let{components:t,...a}=e;return(0,r.yg)(c,(0,n.A)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.yg)("ol",null,(0,r.yg)("li",{parentName:"ol"},"Copy the ",(0,r.yg)("inlineCode",{parentName:"li"},"adr-template.md")," file. Use the following filename pattern: ",(0,r.yg)("inlineCode",{parentName:"li"},"adr-next_number-title.md")),(0,r.yg)("li",{parentName:"ol"},"Create a draft Pull Request and solicit input from the stewarding team, if you want to get an early feedback."),(0,r.yg)("li",{parentName:"ol"},"Make sure that the problem, the context and a recommended solution is clear and well documented. Be sure to document alternate solution spaces and give reasons why they have been discarded."),(0,r.yg)("li",{parentName:"ol"},"Add an entry to a list in the README file ",(0,r.yg)("a",{parentName:"li",href:"/main/architecture/#adr-table-of-contents"},"Table of Contents"),"."),(0,r.yg)("li",{parentName:"ol"},"Create a Pull Request to propose a new ADR.")),(0,r.yg)("h2",{id:"adr-life-cycle"},"ADR life cycle"),(0,r.yg)("p",null,"ADR creation is an ",(0,r.yg)("strong",{parentName:"p"},"iterative")," process. Instead of trying to solve all decisions in a single ADR pull request, we MUST firstly understand the problem and collect feedback through a GitHub Issue."),(0,r.yg)("ol",null,(0,r.yg)("li",{parentName:"ol"},(0,r.yg)("p",{parentName:"li"},"Every proposal SHOULD start with a new GitHub Issue or be a result of existing Issues. The Issue should contain just a brief proposal summary.")),(0,r.yg)("li",{parentName:"ol"},(0,r.yg)("p",{parentName:"li"},"Once the motivation is validated, a GitHub Pull Request (PR) is created with a new document based on the ",(0,r.yg)("inlineCode",{parentName:"p"},"adr-template.md"),".")),(0,r.yg)("li",{parentName:"ol"},(0,r.yg)("p",{parentName:"li"},"An ADR doesn't have to arrive to ",(0,r.yg)("inlineCode",{parentName:"p"},"main")," with an ",(0,r.yg)("em",{parentName:"p"},"accepted")," status in a single PR. If the motivation is clear and the solution is sound, we SHOULD be able to merge it and keep a ",(0,r.yg)("em",{parentName:"p"},"proposed")," status. It's preferable to have an iterative approach rather than long, not merged Pull Requests.")),(0,r.yg)("li",{parentName:"ol"},(0,r.yg)("p",{parentName:"li"},"If a ",(0,r.yg)("em",{parentName:"p"},"proposed")," ADR is merged, then it should clearly document outstanding issues either in ADR document notes or in a GitHub Issue.")),(0,r.yg)("li",{parentName:"ol"},(0,r.yg)("p",{parentName:"li"},"The PR SHOULD always be merged. In the case of a faulty ADR, we still prefer to merge it with a ",(0,r.yg)("em",{parentName:"p"},"rejected")," status. The only time the ADR SHOULD NOT be merged is if the author abandons it.")),(0,r.yg)("li",{parentName:"ol"},(0,r.yg)("p",{parentName:"li"},"Merged ADRs SHOULD NOT be deleted."))),(0,r.yg)("h3",{id:"adr-status"},"ADR status"),(0,r.yg)("p",null,"Status has two components:"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre",className:"language-text"},"{CONSENSUS STATUS} {IMPLEMENTATION STATUS}\n")),(0,r.yg)("p",null,"IMPLEMENTATION STATUS is either ",(0,r.yg)("inlineCode",{parentName:"p"},"Implemented")," or ",(0,r.yg)("inlineCode",{parentName:"p"},"Not Implemented"),"."),(0,r.yg)("h4",{id:"consensus-status"},"Consensus Status"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre",className:"language-mermaid"},"flowchart TD\n A[DRAFT] --\x3e B[PROPOSED]\n B --\x3e C[LAST CALL YYYY-MM-DD]\n B --\x3e D[ABANDONED]\n C --\x3e E[ACCEPTED or REJECTED]\n E --\x3e F[SUPERSEDED by ADR-xxx]\n")),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"DRAFT"),": ","[optional]"," an ADR which is work in progress, not being ready for a general review. This is to present an early work and get an early feedback in a Draft Pull Request form."),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"PROPOSED"),": an ADR covering a full solution architecture and still in the review - project stakeholders haven't reached an agreement yet."),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"LAST CALL "),": ","[optional]"," clear notify that we are close to accept updates. Changing a status to ",(0,r.yg)("inlineCode",{parentName:"li"},"LAST CALL")," means that social consensus (of Cosmos SDK maintainers) has been reached and we still want to give it a time to let the community react or analyze."),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"ACCEPTED"),": ADR which will represent a currently implemented or to be implemented architecture design."),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"REJECTED"),": ADR can go from PROPOSED or ACCEPTED to rejected if the consensus among project stakeholders will decide so."),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"SUPERSEEDED by ADR-xxx"),": ADR which has been superseded by a new ADR."),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"ABANDONED"),": the ADR is no longer pursued by the original authors.")),(0,r.yg)("h2",{id:"language-used-in-adr"},"Language used in ADR"),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"The context/background should be written in the present tense."),(0,r.yg)("li",{parentName:"ul"},"Avoid using a first, personal form.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1094a517.78d19757.js b/assets/js/1094a517.78d19757.js new file mode 100644 index 00000000000..62d4bab230e --- /dev/null +++ b/assets/js/1094a517.78d19757.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcosmos_hub_docs_site=self.webpackChunkcosmos_hub_docs_site||[]).push([[8637],{5680:(e,t,o)=>{o.d(t,{xA:()=>m,yg:()=>d});var a=o(6540);function n(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function s(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,a)}return o}function r(e){for(var t=1;t=0||(n[o]=e[o]);return n}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var l=a.createContext({}),p=function(e){var t=a.useContext(l),o=t;return e&&(o="function"==typeof e?e(t):r(r({},t),e)),o},m=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var o=e.components,n=e.mdxType,s=e.originalType,l=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),c=p(o),h=n,d=c["".concat(l,".").concat(h)]||c[h]||u[h]||s;return o?a.createElement(d,r(r({ref:t},m),{},{components:o})):a.createElement(d,r({ref:t},m))}));function d(e,t){var o=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var s=o.length,r=new Array(s);r[0]=h;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[c]="string"==typeof e?e:n,r[1]=i;for(var p=2;p{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>p});var a=o(8168),n=(o(6540),o(5680));const s={title:"Formatting a Proposal",order:4},r=void 0,i={unversionedId:"governance/formatting",id:"governance/formatting",title:"Formatting a Proposal",description:"Many proposals allow for long form text to be included, usually under the key description. These provide the opportunity to include markdown if formatted correctly, as well as line breaks with \\n.",source:"@site/docs/governance/formatting.md",sourceDirName:"governance",slug:"/governance/formatting",permalink:"/main/governance/formatting",draft:!1,tags:[],version:"current",frontMatter:{title:"Formatting a Proposal",order:4},sidebar:"tutorialSidebar",previous:{title:"Off-Chain Proposal Process",permalink:"/main/governance/best-practices"},next:{title:"On-Chain Proposal Process",permalink:"/main/governance/process"}},l={},p=[{value:"Text",id:"text",level:2},{value:"Real example",id:"real-example",level:3},{value:"Community Pool Spend",id:"community-pool-spend",level:2},{value:"Real example",id:"real-example-1",level:3},{value:"Legacy Param Change",id:"legacy-param-change",level:2},{value:"Real example",id:"real-example-2",level:3}],m={toc:p},c="wrapper";function u(e){let{components:t,...o}=e;return(0,n.yg)(c,(0,a.A)({},m,o,{components:t,mdxType:"MDXLayout"}),(0,n.yg)("p",null,"Many proposals allow for long form text to be included, usually under the key ",(0,n.yg)("inlineCode",{parentName:"p"},"description"),". These provide the opportunity to include ",(0,n.yg)("a",{parentName:"p",href:"https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax"},"markdown")," if formatted correctly, as well as line breaks with ",(0,n.yg)("inlineCode",{parentName:"p"},"\\n"),". "),(0,n.yg)("p",null,"Beware, however, that if you are using the CLI to create a proposal, and setting ",(0,n.yg)("inlineCode",{parentName:"p"},"description")," using a flag, the text will be ",(0,n.yg)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Escape_sequences_in_C"},"escaped")," which may have undesired effects. "),(0,n.yg)("p",null,"Formatting a proposal can be a trial-and-error process, which is why first submitting to the ",(0,n.yg)("a",{parentName:"p",href:"/main/governance/submitting#submitting-your-proposal-to-the-testnet"},"testnet")," is recommended. "),(0,n.yg)("p",null,"The examples shown below are of the text in a ",(0,n.yg)("inlineCode",{parentName:"p"},"json")," file packaged into a ",(0,n.yg)("inlineCode",{parentName:"p"},"submit-proposal")," transaction sent on-chain. More details about how to submit a proposal are in the ",(0,n.yg)("a",{parentName:"p",href:"/main/governance/submitting"},"Submitting a Governance Proposal")," section, but for now just be aware that the examples are the contents of a file separate from the transaction. As a general rule, any flags specific to a proposal (e.g., Title, description, deposit, parameters, recipient) can be placed in a ",(0,n.yg)("inlineCode",{parentName:"p"},"json")," file, while flags general to a transaction of any kind (e.g., chain-id, node-id, gas, fees) can remain in the CLI."),(0,n.yg)("h2",{id:"text"},"Text"),(0,n.yg)("p",null,"Text proposals are used by delegators to agree to a certain strategy, plan, commitment, future upgrade, or any other statement in the form of text. Aside from having a record of the proposal outcome on the Cosmos Hub chain, a text proposal has no direct effect on the change Cosmos Hub."),(0,n.yg)("p",null,"There are four components:"),(0,n.yg)("ol",null,(0,n.yg)("li",{parentName:"ol"},(0,n.yg)("strong",{parentName:"li"},"Title")," - the distinguishing name of the proposal, typically the way that explorers list proposals"),(0,n.yg)("li",{parentName:"ol"},(0,n.yg)("strong",{parentName:"li"},"Summary")," - the body of the proposal that further describes what is being proposed and details surrounding the proposal"),(0,n.yg)("li",{parentName:"ol"},(0,n.yg)("strong",{parentName:"li"},"Deposit"),' - the amount that will be contributed to the deposit (in micro-ATOMs "uatom") from the account submitting the proposal'),(0,n.yg)("li",{parentName:"ol"},(0,n.yg)("strong",{parentName:"li"},"Metadata")," - usually a link to an off-chain resource")),(0,n.yg)("h3",{id:"real-example"},"Real example"),(0,n.yg)("p",null,(0,n.yg)("a",{parentName:"p",href:"https://www.mintscan.io/cosmos/proposals/12"},"Proposal 12")," asked if the Cosmos Hub community of validators charging 0% commission was harmful to the success of the Cosmos Hub."),(0,n.yg)("p",null,"You can use ",(0,n.yg)("inlineCode",{parentName:"p"},"gaiad tx gov draft-proposal")," and choose ",(0,n.yg)("inlineCode",{parentName:"p"},"text")," to create the proposal file."),(0,n.yg)("p",null,"You must submit the proposal using ",(0,n.yg)("inlineCode",{parentName:"p"},"gaiad tx gov submit-proposal "),"."),(0,n.yg)("pre",null,(0,n.yg)("code",{parentName:"pre",className:"language-json"},'{\n "title": "Are Validators Charging 0% Commission Harmful to the Success of the Cosmos Hub?",\n "summary": "This governance proposal is intended to act purely as a signalling proposal. Throughout this history of the Cosmos Hub, there has been much debate about the impact that validators charging 0% commission has on the Cosmos Hub, particularly with respect to the decentralization of the Cosmos Hub and the sustainability for validator operations. Discussion around this topic has taken place in many places including numerous threads on the Cosmos Forum, public Telegram channels, and in-person meetups. Because this has been one of the primary discussion points in off-chain Cosmos governance discussions, we believe it is important to get a signal on the matter from the on-chain governance process of the Cosmos Hub. There have been past discussions on the Cosmos Forum about placing an in-protocol restriction on validators from charging 0% commission. https://forum.cosmos.network/t/governance-limit-validators-from-0-commission-fee/2182 This proposal is NOT proposing a protocol-enforced minimum. It is merely a signalling proposal to query the viewpoint of the bonded Atom holders as a whole. We encourage people to discuss the question behind this governance proposal in the associated Cosmos Hub forum post here: https://forum.cosmos.network/t/proposal-are-validators-charging-0-commission-harmful-to-the-success-of-the-cosmos-hub/2505 Also, for voters who believe that 0% commission rates are harmful to the network, we encourage optionally sharing your belief on what a healthy minimum commission rate for the network using the memo field of their vote transaction on this governance proposal or linking to a longer written explanation such as a Forum or blog post. The question on this proposal is \u201cAre validators charging 0% commission harmful to the success of the Cosmos Hub?\u201d. A Yes vote is stating that they ARE harmful to the network\'s success, and a No vote is a statement that they are NOT harmful.",\n "deposit": "100000uatom",\n "metadata": "ipfs://CID",\n}\n')),(0,n.yg)("h2",{id:"community-pool-spend"},"Community Pool Spend"),(0,n.yg)("p",null,"There are five (5) components:"),(0,n.yg)("ol",null,(0,n.yg)("li",{parentName:"ol"},(0,n.yg)("strong",{parentName:"li"},"Title")," - the distinguishing name of the proposal, typically the way that explorers list proposals"),(0,n.yg)("li",{parentName:"ol"},(0,n.yg)("strong",{parentName:"li"},"Summary")," - the body of the proposal that further describes what is being proposed and details surrounding the proposal"),(0,n.yg)("li",{parentName:"ol"},(0,n.yg)("strong",{parentName:"li"},"Recipient")," - the Cosmos Hub (bech32-based) address that will receive funding from the Community Pool"),(0,n.yg)("li",{parentName:"ol"},(0,n.yg)("strong",{parentName:"li"},"Amount")," - the amount of funding that the recipient will receive in micro-ATOMs (uatom)"),(0,n.yg)("li",{parentName:"ol"},(0,n.yg)("strong",{parentName:"li"},"Deposit"),' - the amount that will be contributed to the deposit (in micro-ATOMs "uatom") from the account submitting the proposal')),(0,n.yg)("p",null,"If the description says that a certain address will receive a certain number of ATOMs, it should also be programmed to do that, but it's possible that that's not the case (accidentally or otherwise). Check that the description aligns with the 'recipient' address."),(0,n.yg)("h3",{id:"real-example-1"},"Real example"),(0,n.yg)("p",null,"The ",(0,n.yg)("inlineCode",{parentName:"p"},"amount")," is ",(0,n.yg)("inlineCode",{parentName:"p"},"1000000000uatom"),". 1,000,000 micro-ATOM is equal to 1 ATOM, so ",(0,n.yg)("inlineCode",{parentName:"p"},"recipient")," address ",(0,n.yg)("inlineCode",{parentName:"p"},"cosmos1xf2qwf6g6xvuttpf37xwrgp08qq984244952ze")," will receive 1000 ATOM if this proposal is passed."),(0,n.yg)("p",null,"The ",(0,n.yg)("inlineCode",{parentName:"p"},'deposit": "1000000uatom')," results in 1 ATOM being used from the proposal submitter's account."),(0,n.yg)("p",null,"You can use the ",(0,n.yg)("inlineCode",{parentName:"p"},"gaiad tx gov draft-proposal")," utility and choose ",(0,n.yg)("inlineCode",{parentName:"p"},"/cosmos.distribution.v1beta1.MsgCommunityPoolSpend")," to create a draft proposal file."),(0,n.yg)("p",null,"You must use ",(0,n.yg)("inlineCode",{parentName:"p"},"gaiad tx gov submit-proposal ")," to submit the proposal. The proposal cannot be submitted using ",(0,n.yg)("inlineCode",{parentName:"p"},"submit-legacy-proposal"),"."),(0,n.yg)("pre",null,(0,n.yg)("code",{parentName:"pre",className:"language-json"},'{\n "messages":[\n {\n "@type": "/cosmos.distribution.v1beta1.MsgCommunityPoolSpend",\n "authority": "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn",\n "recipient": "cosmos00af8sd0a9dfansdfoiasf0a9ssd9fa09i99990",\n "amount": [{\n "denom": "uatom",\n "amount": "10000000000"\n }]\n }\n ],\n "deposit": "100000uatom",\n "proposer": "cosmos12xpdapokdfpsodf32das75sokdaadapsokd1sa",\n "metadata": "Community Pool Spend Proposal Example",\n "title": "Activate governance discussions on the Discourse forum using community pool funds",\n "summary": "## Summary\\nProposal to request for 1000 ATOM from the community spending pool to be sent to a multisig who will put funds towards stewardship of the Discourse forum to make it an authoritative record of governance decisions as well as a vibrant space to draft and discuss proposals.\\n## Details\\nWe are requesting 1000 ATOM from the community spending pool to activate and steward the Cosmos Hub (Discourse) forum for the next six months.\\n\\nOff-chain governance conversations are currently highly fragmented, with no shared public venue for discussing proposals as they proceed through the process of being drafted and voted on. It means there is no record of discussion that voters can confidently point to for context, potentially leading to governance decisions becoming delegitimized by stakeholders.\\n\\nThe requested amount will be sent to a multisig comprising individuals (members listed below) who can ensure that the tokens are spent judiciously. We believe stewardship of the forum requires:\\n\\n* **Moderation**: Format, edit, and categorize posts; Standardize titles and tags; Monitor and approve new posts; Archive posts.\\n* **Facilitation**: Ask clarifying questions in post threads; Summarize discussions; Provide historical precedence to discussions.\\n* **Engagement**: Circulate important posts on other social channels to increase community participation; Solicit input from key stakeholders.\\n* **Guidance**: Orient and assist newcomers; Guide proposers through governance process; Answer questions regarding the forum or Cosmos ecosystem.\\nThe work to steward the forum will be carried out by members of [Hypha Worker Co-op](https://hypha.coop/) and individuals selected from the community to carry out scoped tasks in exchange for ATOM from this budget.\\n## Multisig Members\\n* Hypha: Mai Ishikawa Sutton (Hypha Co-op)\\n* Validator: Daniel Hwang (Stakefish)\\n* Cosmos Hub developer: Lauren Gallinaro (Interchain Berlin)\\n\\nWe feel the membership of the multisig should be rotated following the six-month pilot period to preserve insight from the distinct specializations (i.e., Cosmos Hub validators and developers).\\n## Timeline and Deliverables\\nWe estimate the total work to take 250-300 hours over six months where we hope to produce:\\n* **Moving summaries:** Provide succinct summaries of the proposals and include all publicly stated reasons why various entities are choosing to vote for/against a given proposal. These summaries will be written objectively, not siding with any one entity.\\n* **Validator platforms:** Create a section of the Forum where we collate all validators\' visions for Cosmos Hub governance to allow them to state their positions publicly. We will work with the smaller validators to ensure they are equally represented.\\n* **Regular check-ins with the Cosmonaut DAO:** Collaborate with the future Cosmonaut DAO to ensure maximal accessibility and engagement. Community management is a critical, complementary aspect of increasing participation in governance.\\n* **Announcement channel:** Create a read-only announcement channel in the Cosmos Community Discord, so that new proposals and major discussions can be easily followed.\\n* **Tooling friendly posts:** Tag and categorize posts so that they can be easily ingested into existing tooling that validators have setup.\\n* **Neutral moderation framework:** Document and follow transparent standards for how the forum is moderated.\\n\\nAt the end of the period, we will produce a report reflecting on our successes and failures, and recommendations for how the work of maintaining a governance venue can be continuously sustained (e.g., through a DAO). We see this initiative as a process of discovery, where we are learning by doing.\\n\\nFor more context, you can read through the discussions on this [proposal on the Discourse forum](https://forum.cosmos.network/t/proposal-draft-activate-governance-discussions-on-the-discourse-forum-using-community-pool-funds/5833).\\n\\n## Governance Votes\\nThe following items summarize the voting options and what it means for this proposal:\\n**YES** - You approve this community spend proposal to deposit 1000 ATOM to a multisig that will spend them to improve governance discussions in the Discourse forum.\\n**NO** - You disapprove of this community spend proposal in its current form (please indicate why in the Cosmos Forum).\\n**NO WITH VETO** - You are strongly opposed to this change and will exit the network if passed.\\n**ABSTAIN** - You are impartial to the outcome of the proposal.\\n## Recipient\\ncosmos1xf2qwf6g6xvuttpf37xwrgp08qq984244952ze\\n## Amount\\n1000 ATOM\\n\\n***Disclosure**: Hypha has an existing contract with the Interchain Foundation focused on the testnet program and improving documentation. This work is beyond the scope of that contract and is focused on engaging the community in governance.*\\n\\nIPFS pin of proposal on-forum: (https://ipfs.io/ipfs/Qmaq7ftqWccgYCo8U1KZfEnjvjUDzSEGpMxcRy61u8gf2Y)",\n}\n')),(0,n.yg)("h2",{id:"legacy-param-change"},"Legacy Param Change"),(0,n.yg)("admonition",{type:"tip"},(0,n.yg)("p",{parentName:"admonition"},"Legacy parameter change proposals are not available for cosmos-sdk modules."),(0,n.yg)("p",{parentName:"admonition"},"You can update these CosmosHub modules using ",(0,n.yg)("inlineCode",{parentName:"p"},"submit-legacy-proposal"),":"),(0,n.yg)("ul",{parentName:"admonition"},(0,n.yg)("li",{parentName:"ul"},"ibc (transfer, interchain-accounts)"),(0,n.yg)("li",{parentName:"ul"},"provider"))),(0,n.yg)("p",null,(0,n.yg)("strong",{parentName:"p"},"Note:")," The changes outlined here must be submitted using ",(0,n.yg)("inlineCode",{parentName:"p"},"submit-legacy-proposal"),"."),(0,n.yg)("p",null,"For ",(0,n.yg)("inlineCode",{parentName:"p"},"param-change")," proposals, there are arguably seven (7) components, though three are nested beneath 'Changes':"),(0,n.yg)("ol",null,(0,n.yg)("li",{parentName:"ol"},(0,n.yg)("strong",{parentName:"li"},"Title")," - the distinguishing name of the proposal, typically the way that explorers list proposals"),(0,n.yg)("li",{parentName:"ol"},(0,n.yg)("strong",{parentName:"li"},"Description")," - the body of the proposal that further describes what is being proposed and details surrounding the proposal"),(0,n.yg)("li",{parentName:"ol"},(0,n.yg)("strong",{parentName:"li"},"Changes")," - a component containing "),(0,n.yg)("li",{parentName:"ol"},(0,n.yg)("strong",{parentName:"li"},"Subspace")," - the Cosmos Hub module with the parameter that is being changed"),(0,n.yg)("li",{parentName:"ol"},(0,n.yg)("strong",{parentName:"li"},"Key")," - the parameter that will be changed"),(0,n.yg)("li",{parentName:"ol"},(0,n.yg)("strong",{parentName:"li"},"Value")," - the value of the parameter that will be changed by the governance mechanism"),(0,n.yg)("li",{parentName:"ol"},(0,n.yg)("strong",{parentName:"li"},"Deposit"),' - the amount that will be contributed to the deposit (in micro-ATOMs "uatom") from the account submitting the proposal')),(0,n.yg)("p",null,"The components must be presented as shown in the example."),(0,n.yg)("admonition",{type:"info"},(0,n.yg)("p",{parentName:"admonition"},"To update any of the cosmos-sdk modules you must use ",(0,n.yg)("inlineCode",{parentName:"p"},"gaiad tx gov submit-proposal")," with a correctly formatted proposal file containing a ",(0,n.yg)("inlineCode",{parentName:"p"},"MsgUpdateParams"),"."),(0,n.yg)("p",{parentName:"admonition"},"When using ",(0,n.yg)("inlineCode",{parentName:"p"},"MsgUpdateParams")," please note that ",(0,n.yg)("strong",{parentName:"p"},"all")," fields must always be specified (",(0,n.yg)("inlineCode",{parentName:"p"},"PUT")," semantics). Please be careful to not accidentally submit a proposal\nthat changes more parameters than was intended. The parameters that you do not want to change you can simply copy from existing module params.")),(0,n.yg)("h3",{id:"real-example-2"},"Real example"),(0,n.yg)("p",null,"This example is 'real', because it was put on-chain using the Theta testnet and can be seen in the block explorer ",(0,n.yg)("a",{parentName:"p",href:"https://explorer.theta-testnet.polypore.xyz/proposals/87"},"here"),"."),(0,n.yg)("p",null,"Not all explorers will show the proposed parameter changes that are coded into the proposal, so ensure that you verify that the description aligns with what the governance proposal is programmed to enact. If the description says that a certain parameter will be increased, it should also be programmed to do that, but it's possible that that's not the case (accidentally or otherwise)."),(0,n.yg)("pre",null,(0,n.yg)("code",{parentName:"pre",className:"language-json"},' {\n "title": "Doc update test: Param change for transfer/SendEnabled",\n "description": "Testing the proposal format for enabling IBC transfers on our chain",\n "changes": [\n {\n "subspace": "transfer",\n "key": "transfer",\n "value": true\n }\n ],\n "deposit": "100000uatom"\n}\n')))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/13a5fa71.1b673cba.js b/assets/js/13a5fa71.1b673cba.js new file mode 100644 index 00000000000..1d5d7eef56a --- /dev/null +++ b/assets/js/13a5fa71.1b673cba.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcosmos_hub_docs_site=self.webpackChunkcosmos_hub_docs_site||[]).push([[214],{5680:(e,t,a)=>{a.d(t,{xA:()=>m,yg:()=>g});var o=a(6540);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,o)}return a}function i(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=o.createContext({}),p=function(e){var t=o.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},m=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},u="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},c=o.forwardRef((function(e,t){var a=e.components,n=e.mdxType,r=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=p(a),c=n,g=u["".concat(s,".").concat(c)]||u[c]||h[c]||r;return a?o.createElement(g,i(i({ref:t},m),{},{components:a})):o.createElement(g,i({ref:t},m))}));function g(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var r=a.length,i=new Array(r);i[0]=c;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:n,i[1]=l;for(var p=2;p{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var o=a(8168),n=(a(6540),a(5680));const r={title:"Introduction",order:1,sidebar_position:1},i=void 0,l={unversionedId:"index",id:"version-v19.1.0/index",title:"Introduction",description:"Welcome to the Cosmos Hub",source:"@site/versioned_docs/version-v19.1.0/index.md",sourceDirName:".",slug:"/",permalink:"/v19.1.0/",draft:!1,tags:[],version:"v19.1.0",sidebarPosition:1,frontMatter:{title:"Introduction",order:1,sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"Getting Started",permalink:"/v19.1.0/getting-started/"}},s={},p=[{value:"The ATOM",id:"the-atom",level:2},{value:"Cosmos Hub Wallets",id:"cosmos-hub-wallets",level:2},{value:"Metamask Snaps",id:"metamask-snaps",level:2},{value:"Cosmos Hub Explorers",id:"cosmos-hub-explorers",level:2},{value:"Cosmos Hub CLI",id:"cosmos-hub-cli",level:2},{value:"Running a full-node on the Cosmos Hub Mainnet",id:"running-a-full-node-on-the-cosmos-hub-mainnet",level:2},{value:"Join the Community",id:"join-the-community",level:2}],m={toc:p},u="wrapper";function h(e){let{components:t,...r}=e;return(0,n.yg)(u,(0,o.A)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,n.yg)("p",null,(0,n.yg)("img",{alt:"Welcome to the Cosmos Hub",src:a(3312).A,width:"1920",height:"1080"})),(0,n.yg)("h1",{id:"introduction"},"Introduction"),(0,n.yg)("p",null,"The Cosmos Hub is the first of ",(0,n.yg)("a",{parentName:"p",href:"https://cosmos.network"},"thousands of interconnected blockchains")," that will eventually comprise the ",(0,n.yg)("strong",{parentName:"p"},"Cosmos Network"),". The primary token of the Cosmos Hub is the ",(0,n.yg)("strong",{parentName:"p"},"ATOM"),", but the Hub will support many tokens in the future."),(0,n.yg)("h2",{id:"the-atom"},"The ATOM"),(0,n.yg)("p",null,"Do you have ATOM tokens? With ATOM, you have the superpower to contribute to the security and governance of the Cosmos Hub. Delegate your ATOM to one or more of the validators on the Cosmos Hub blockchain to earn more ATOM through Proof-of-Stake. You can also vote with your ATOM to influence the future of the Cosmos Hub through on-chain governance proposals."),(0,n.yg)("p",null,"Learn more about ",(0,n.yg)("a",{parentName:"p",href:"/v19.1.0/delegators/delegator-faq"},"being a delegator"),", learn about ",(0,n.yg)("a",{parentName:"p",href:"/v19.1.0/delegators/delegator-security"},"the security risks"),", and start participating with one of the following wallets."),(0,n.yg)("h2",{id:"cosmos-hub-wallets"},"Cosmos Hub Wallets"),(0,n.yg)("admonition",{type:"warning"},(0,n.yg)("p",{parentName:"admonition"},"Do your own research and take precautions in regards to wallet security. Maintaining proper security practices is solely your responsibility when using third party wallets.")),(0,n.yg)("p",null,"These community-maintained web and mobile wallets allow you to store & transfer ATOM, delegate ATOM to validators, and vote on on-chain governance proposals. Note that we do not endorse any of the wallets, they are listed for your convenience."),(0,n.yg)("ul",null,(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://wallet.keplr.app"},"Keplr")," - Web"),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://www.ledger.com/cosmos-wallet"},"Ledger")," - Hardware"),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://www.cosmostation.io/"},"Cosmostation")," - Android, iOS"),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://www.leapwallet.io/"},"Leap Wallet")," - Android, iOS, Web"),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://atomicwallet.io/"},"Atomic Wallet")," - Android, Linux, macOS, Windows"),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://citadel.one/#mobile"},"Citadel.One")," - Android, iOS"),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://cobo.com/"},"Cobo")," - Android, iOS"),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://crypto.com/"},"Crypto.com")," - Android, iOS"),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://www.huobiwallet.com/"},"Huobi Wallet")," - Android, iOS"),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://app.shapeshift.com/"},"ShapeShift Wallet")," - Android, iOS"),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://token.im/"},"imToken")," - Android, iOS"),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://www.mathwallet.org/en/"},"Math Wallet")," - Android, iOS, Web"),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://www.rainbow.one"},"Rainbow Wallet")," - Android, iOS"),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://trustwallet.com/"},"Trust Wallet")," Android, iOS"),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://atomicdex.io/en/"},"Komodo Wallet"))),(0,n.yg)("h2",{id:"metamask-snaps"},"Metamask Snaps"),(0,n.yg)("ul",null,(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://www.leapwallet.io/snaps"},"Leap Wallet")),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://metamask.mysticlabs.xyz/"},"Mystic Lab"))),(0,n.yg)("h2",{id:"cosmos-hub-explorers"},"Cosmos Hub Explorers"),(0,n.yg)("p",null,"These block explorers allow you to search, view and analyze Cosmos Hub data","\u2014","like blocks, transactions, validators, etc."),(0,n.yg)("ul",null,(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://mintscan.io"},"Mintscan")),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://www.datalenses.zone/chain/cosmos"},"Numia")),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://atomscan.com"},"ATOMScan")),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://cosmoshub.iobscan.io/"},"IOBScan")),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://ping.pub/cosmos"},"Ping.Pub")),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://monitor.bronbro.io/d/cosmos-stats/cosmos"},"BronBro")),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://cosmos.smartstake.io/stats"},"SmartStake"))),(0,n.yg)("h2",{id:"cosmos-hub-cli"},"Cosmos Hub CLI"),(0,n.yg)("p",null,(0,n.yg)("inlineCode",{parentName:"p"},"gaiad")," is a command-line interface that lets you interact with the Cosmos Hub. ",(0,n.yg)("inlineCode",{parentName:"p"},"gaiad")," is the only tool that supports 100% of the Cosmos Hub features, including accounts, transfers, delegation, and governance. Learn more about ",(0,n.yg)("inlineCode",{parentName:"p"},"gaiad")," with the ",(0,n.yg)("a",{parentName:"p",href:"/v19.1.0/delegators/delegator-guide-cli"},"delegator's CLI guide"),"."),(0,n.yg)("h2",{id:"running-a-full-node-on-the-cosmos-hub-mainnet"},"Running a full-node on the Cosmos Hub Mainnet"),(0,n.yg)("p",null,"In order to run a full-node for the Cosmos Hub mainnet, you must first ",(0,n.yg)("a",{parentName:"p",href:"./getting-started/installation"},"install ",(0,n.yg)("inlineCode",{parentName:"a"},"gaiad")),". Then, follow ",(0,n.yg)("a",{parentName:"p",href:"./hub-tutorials/join-mainnet"},"the guide"),".\nIf you are looking to run a validator node, follow the ","[validator setup guide]","(./validators/valid\nator-setup)."),(0,n.yg)("h2",{id:"join-the-community"},"Join the Community"),(0,n.yg)("p",null,"Have questions, comments, or new ideas? Participate in the Cosmos community through one of the following channels."),(0,n.yg)("ul",null,(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://discord.gg/interchain"},"Discord")),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://forum.cosmos.network"},"Cosmos Forum")),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://reddit.com/r/cosmosnetwork"},"Cosmos on Reddit"))),(0,n.yg)("p",null,"To learn more about the Cosmos Hub and how it fits within the Cosmos Network, visit ",(0,n.yg)("a",{parentName:"p",href:"https://cosmos.network"},"cosmos.network"),"."))}h.isMDXComponent=!0},3312:(e,t,a)=>{a.d(t,{A:()=>o});const o=a.p+"assets/images/cosmos-hub-image-64b35193bcb3998afd27f30060ed5ab5.jpg"}}]); \ No newline at end of file diff --git a/assets/js/1502a611.c775c645.js b/assets/js/1502a611.c775c645.js new file mode 100644 index 00000000000..f8aacf3d307 --- /dev/null +++ b/assets/js/1502a611.c775c645.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcosmos_hub_docs_site=self.webpackChunkcosmos_hub_docs_site||[]).push([[6128],{5680:(e,n,a)=>{a.d(n,{xA:()=>g,yg:()=>c});var t=a(6540);function o(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function r(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}return a}function i(e){for(var n=1;n=0||(o[a]=e[a]);return o}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var l=t.createContext({}),d=function(e){var n=t.useContext(l),a=n;return e&&(a="function"==typeof e?e(n):i(i({},n),e)),a},g=function(e){var n=d(e.components);return t.createElement(l.Provider,{value:n},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},m=t.forwardRef((function(e,n){var a=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,g=s(e,["components","mdxType","originalType","parentName"]),p=d(a),m=o,c=p["".concat(l,".").concat(m)]||p[m]||u[m]||r;return a?t.createElement(c,i(i({ref:n},g),{},{components:a})):t.createElement(c,i({ref:n},g))}));function c(e,n){var a=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var r=a.length,i=new Array(r);i[0]=m;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s[p]="string"==typeof e?e:o,i[1]=s;for(var d=2;d{a.r(n),a.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>d});var t=a(8168),o=(a(6540),a(5680));const r={title:"Delegator Guide (CLI)",order:2},i=void 0,s={unversionedId:"delegators/delegator-guide-cli",id:"version-v19.1.0/delegators/delegator-guide-cli",title:"Delegator Guide (CLI)",description:"This document contains all the necessary information for delegators to interact with the Cosmos Hub through the Command-Line Interface (CLI).",source:"@site/versioned_docs/version-v19.1.0/delegators/delegator-guide-cli.md",sourceDirName:"delegators",slug:"/delegators/delegator-guide-cli",permalink:"/v19.1.0/delegators/delegator-guide-cli",draft:!1,tags:[],version:"v19.1.0",frontMatter:{title:"Delegator Guide (CLI)",order:2},sidebar:"tutorialSidebar",previous:{title:"Delegator FAQ",permalink:"/v19.1.0/delegators/delegator-faq"},next:{title:"Delegator Security",permalink:"/v19.1.0/delegators/delegator-security"}},l={},d=[{value:"Table of Contents",id:"table-of-contents",level:2},{value:"Installing gaiad",id:"installing-gaiad",level:2},{value:"Cosmos Accounts",id:"cosmos-accounts",level:2},{value:"Restoring an Account from the Fundraiser",id:"restoring-an-account-from-the-fundraiser",level:3},{value:"On a Ledger Device",id:"on-a-ledger-device",level:4},{value:"On a Computer",id:"on-a-computer",level:4},{value:"Creating an Account",id:"creating-an-account",level:3},{value:"Using a Ledger Device",id:"using-a-ledger-device",level:4},{value:"Using a Computer",id:"using-a-computer",level:4},{value:"Accessing the Cosmos Hub Network",id:"accessing-the-cosmos-hub-network",level:2},{value:"Running Your Own Full-Node",id:"running-your-own-full-node",level:3},{value:"Connecting to a Remote Full-Node",id:"connecting-to-a-remote-full-node",level:3},{value:"Setting Up gaiad",id:"setting-up-gaiad",level:2},{value:"Querying the State",id:"querying-the-state",level:2},{value:"Sending Transactions",id:"sending-transactions",level:2},{value:"A Note on Gas and Fees",id:"a-note-on-gas-and-fees",level:3},{value:"Sending Tokens",id:"sending-tokens",level:3},{value:"Bonding Atoms and Withdrawing Rewards",id:"bonding-atoms-and-withdrawing-rewards",level:3},{value:"Participating in Governance",id:"participating-in-governance",level:2},{value:"Primer on Governance",id:"primer-on-governance",level:3},{value:"In Practice",id:"in-practice",level:3},{value:"Signing Transactions From an Offline Computer",id:"signing-transactions-from-an-offline-computer",level:3}],g={toc:d},p="wrapper";function u(e){let{components:n,...a}=e;return(0,o.yg)(p,(0,t.A)({},g,a,{components:n,mdxType:"MDXLayout"}),(0,o.yg)("p",null,"This document contains all the necessary information for delegators to interact with the Cosmos Hub through the Command-Line Interface (CLI)."),(0,o.yg)("p",null,"It also contains instructions on how to manage accounts, restore accounts from the fundraiser and use a ledger nano device."),(0,o.yg)("admonition",{type:"tip"},(0,o.yg)("p",{parentName:"admonition"},(0,o.yg)("strong",{parentName:"p"},"Very Important"),": Please assure that you follow the steps described hereinafter\ncarefully, as negligence in this significant process could lead to an indefinite\nloss of your Atoms. Therefore, read through the following instructions in their\nentirety prior to proceeding and reach out to us in case you need support."),(0,o.yg)("p",{parentName:"admonition"},"Please also note that you are about to interact with the Cosmos Hub, a\nblockchain technology containing highly experimental software. While the\nblockchain has been developed in accordance to the state of the art and audited\nwith utmost care, we can nevertheless expect to have issues, updates and bugs.\nFurthermore, interaction with blockchain technology requires\nadvanced technical skills and always entails risks that are outside our control.\nBy using the software, you confirm that you understand the inherent risks\nassociated with cryptographic software (see also risk section of the\n",(0,o.yg)("a",{parentName:"p",href:"https://github.com/cosmos/cosmos/blob/master/fundraiser/Interchain%20Cosmos%20Contribution%20Terms%20-%20FINAL.pdf"},"Interchain Cosmos Contribution terms"),') and that the Interchain Foundation and/or\nthe Tendermint Team may not be held liable for potential damages arising out of the use of the\nsoftware. Any use of this open source software released under the Apache 2.0 license is\ndone at your own risk and on a "AS IS" basis, without warranties or conditions\nof any kind.')),(0,o.yg)("p",null,"Please exercise extreme caution!"),(0,o.yg)("h2",{id:"table-of-contents"},"Table of Contents"),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#table-of-contents"},"Table of Contents")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#installing-gaiad"},"Installing ",(0,o.yg)("inlineCode",{parentName:"a"},"gaiad"))),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#cosmos-accounts"},"Cosmos Accounts"),(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#restoring-an-account-from-the-fundraiser"},"Restoring an Account from the Fundraiser"),(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#on-a-ledger-device"},"On a Ledger Device")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#on-a-computer"},"On a Computer")))),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#creating-an-account"},"Creating an Account"),(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#using-a-ledger-device"},"Using a Ledger Device")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#using-a-computer"},"Using a Computer")))))),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#accessing-the-cosmos-hub-network"},"Accessing the Cosmos Hub Network"),(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#running-your-own-full-node"},"Running Your Own Full-Node")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#connecting-to-a-remote-full-node"},"Connecting to a Remote Full-Node")))),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#setting-up-gaiad"},"Setting Up ",(0,o.yg)("inlineCode",{parentName:"a"},"gaiad"))),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#querying-the-state"},"Querying the State")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#sending-transactions"},"Sending Transactions"),(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#a-note-on-gas-and-fees"},"A Note on Gas and Fees")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#sending-tokens"},"Sending Tokens")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#bonding-atoms-and-withdrawing-rewards"},"Bonding Atoms and Withdrawing Rewards")))),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#participating-in-governance"},"Participating in Governance"),(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#primer-on-governance"},"Primer on Governance")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#in-practice"},"In Practice")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#signing-transactions-from-an-offline-computer"},"Signing Transactions From an Offline Computer"))))),(0,o.yg)("h2",{id:"installing-gaiad"},"Installing ",(0,o.yg)("inlineCode",{parentName:"h2"},"gaiad")),(0,o.yg)("p",null,(0,o.yg)("inlineCode",{parentName:"p"},"gaiad"),": This is the command-line interface to interact with a ",(0,o.yg)("inlineCode",{parentName:"p"},"gaiad")," full-node."),(0,o.yg)("admonition",{type:"warning"},(0,o.yg)("p",{parentName:"admonition"},(0,o.yg)("strong",{parentName:"p"},"Please check that you download the latest stable release of ",(0,o.yg)("inlineCode",{parentName:"strong"},"gaiad")," that is available"))),(0,o.yg)("p",null,"[",(0,o.yg)("strong",{parentName:"p"},"Download the binaries"),"]","\nNot available yet."),(0,o.yg)("p",null,(0,o.yg)("a",{parentName:"p",href:"../getting-started/installation"},(0,o.yg)("strong",{parentName:"a"},"Install from source"))),(0,o.yg)("admonition",{type:"tip"},(0,o.yg)("p",{parentName:"admonition"},(0,o.yg)("inlineCode",{parentName:"p"},"gaiad")," is used from a terminal. To open the terminal, follow these steps:"),(0,o.yg)("ul",{parentName:"admonition"},(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("strong",{parentName:"li"},"Windows"),": ",(0,o.yg)("inlineCode",{parentName:"li"},"Start")," > ",(0,o.yg)("inlineCode",{parentName:"li"},"All Programs")," > ",(0,o.yg)("inlineCode",{parentName:"li"},"Accessories")," > ",(0,o.yg)("inlineCode",{parentName:"li"},"Command Prompt")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("strong",{parentName:"li"},"MacOS"),": ",(0,o.yg)("inlineCode",{parentName:"li"},"Finder")," > ",(0,o.yg)("inlineCode",{parentName:"li"},"Applications")," > ",(0,o.yg)("inlineCode",{parentName:"li"},"Utilities")," > ",(0,o.yg)("inlineCode",{parentName:"li"},"Terminal")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("strong",{parentName:"li"},"Linux"),": ",(0,o.yg)("inlineCode",{parentName:"li"},"Ctrl")," + ",(0,o.yg)("inlineCode",{parentName:"li"},"Alt")," + ",(0,o.yg)("inlineCode",{parentName:"li"},"T")))),(0,o.yg)("h2",{id:"cosmos-accounts"},"Cosmos Accounts"),(0,o.yg)("p",null,"At the core of every Cosmos account, there is a seed, which takes the form of a 12 or 24-words mnemonic. From this mnemonic, it is possible to create any number of Cosmos accounts, i.e. pairs of private key/public key. This is called an HD wallet (see ",(0,o.yg)("a",{parentName:"p",href:"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki"},"BIP32")," for more information on the HD wallet specification)."),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-txt"}," Account 0 Account 1 Account 2\n\n+------------------+ +------------------+ +------------------+\n| | | | | |\n| Address 0 | | Address 1 | | Address 2 |\n| ^ | | ^ | | ^ |\n| | | | | | | | |\n| | | | | | | | |\n| | | | | | | | |\n| + | | + | | + |\n| Public key 0 | | Public key 1 | | Public key 2 |\n| ^ | | ^ | | ^ |\n| | | | | | | | |\n| | | | | | | | |\n| | | | | | | | |\n| + | | + | | + |\n| Private key 0 | | Private key 1 | | Private key 2 |\n| ^ | | ^ | | ^ |\n+------------------+ +------------------+ +------------------+\n | | |\n | | |\n | | |\n +--------------------------------------------------------------------+\n |\n |\n +---------+---------+\n | |\n | Mnemonic (Seed) |\n | |\n +-------------------+\n")),(0,o.yg)("p",null,"The funds stored in an account are controlled by the private key. This private key is generated using a one-way function from the mnemonic. If you lose the private key, you can retrieve it using the mnemonic. However, if you lose the mnemonic, you will lose access to all the derived private keys. Likewise, if someone gains access to your mnemonic, they gain access to all the associated accounts."),(0,o.yg)("admonition",{type:"warning"},(0,o.yg)("p",{parentName:"admonition"},(0,o.yg)("strong",{parentName:"p"},"Do not lose or share your 12 words with anyone. To prevent theft or loss of funds, it is best to ensure that you keep multiple copies of your mnemonic, and store it in a safe, secure place and that only you know how to access. If someone is able to gain access to your mnemonic, they will be able to gain access to your private keys and control the accounts associated with them."))),(0,o.yg)("p",null,"The address is a public string with a human-readable prefix (e.g. ",(0,o.yg)("inlineCode",{parentName:"p"},"cosmos10snjt8dmpr5my0h76xj48ty80uzwhraqalu4eg"),") that identifies your account. When someone wants to send you funds, they send it to your address. It is computationally infeasible to find the private key associated with a given address."),(0,o.yg)("h3",{id:"restoring-an-account-from-the-fundraiser"},"Restoring an Account from the Fundraiser"),(0,o.yg)("admonition",{type:"tip"},(0,o.yg)("p",{parentName:"admonition"},(0,o.yg)("em",{parentName:"p"},"NOTE: This section only concerns fundraiser participants"))),(0,o.yg)("p",null,"If you participated in the fundraiser, you should be in possession of a 12-words mnemonic. Newly generated mnemonics use 24 words, but 12-word mnemonics are also compatible with all the Cosmos tools."),(0,o.yg)("h4",{id:"on-a-ledger-device"},"On a Ledger Device"),(0,o.yg)("p",null,"At the core of a ledger device, there is a mnemonic used to generate accounts on multiple blockchains (including the Cosmos Hub). Usually, you will create a new mnemonic when you initialize your ledger device. However, it is possible to tell the ledger device to use a mnemonic provided by the user instead. Let us go ahead and see how you can input the mnemonic you obtained during the fundraiser as the seed of your ledger device."),(0,o.yg)("admonition",{type:"warning"},(0,o.yg)("p",{parentName:"admonition"},"*NOTE: To do this, ",(0,o.yg)("strong",{parentName:"p"},"it is preferable to use a brand new ledger device."),". Indeed, there can be only one mnemonic per ledger device. If, however, you want to use a ledger that is already initialized with a seed, you can reset it by going in ",(0,o.yg)("inlineCode",{parentName:"p"},"Settings"),">",(0,o.yg)("inlineCode",{parentName:"p"},"Device"),">",(0,o.yg)("inlineCode",{parentName:"p"},"Reset All"),". ",(0,o.yg)("strong",{parentName:"p"},"Please note that this will wipe out the seed currently stored on the device. If you have not properly secured the associated mnemonic, you could lose your funds!!!*"))),(0,o.yg)("p",null,"The following steps need to be performed on an un-initialized ledger device:"),(0,o.yg)("ol",null,(0,o.yg)("li",{parentName:"ol"},"Connect your ledger device to the computer via USB"),(0,o.yg)("li",{parentName:"ol"},"Press both buttons"),(0,o.yg)("li",{parentName:"ol"},"Do ",(0,o.yg)("strong",{parentName:"li"},"NOT"),' choose the "Config as a new device" option. Instead, choose "Restore Configuration"'),(0,o.yg)("li",{parentName:"ol"},"Choose a PIN"),(0,o.yg)("li",{parentName:"ol"},"Choose the 12 words option"),(0,o.yg)("li",{parentName:"ol"},"Input each of the words you got during the fundraiser, in the correct order.")),(0,o.yg)("p",null,"Your ledger is now correctly set up with your fundraiser mnemonic! Do not lose this mnemonic! If your ledger is compromised, you can always restore a new device again using the same mnemonic."),(0,o.yg)("p",null,"Next, click ",(0,o.yg)("a",{parentName:"p",href:"#using-a-ledger-device"},"here")," to learn how to generate an account."),(0,o.yg)("h4",{id:"on-a-computer"},"On a Computer"),(0,o.yg)("admonition",{type:"warning"},(0,o.yg)("p",{parentName:"admonition"},(0,o.yg)("strong",{parentName:"p"},"NOTE: It is more secure to perform this action on an offline computer"))),(0,o.yg)("p",null,"To restore an account using a fundraiser mnemonic and store the associated encrypted private key on a computer, use the following command:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},"gaiad keys add --recover\n")),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"")," is the name of the account. It is a reference to the account number used to derive the key pair from the mnemonic. You will use this name to identify your account when you want to send a transaction."),(0,o.yg)("li",{parentName:"ul"},"You can add the optional ",(0,o.yg)("inlineCode",{parentName:"li"},"--account")," flag to specify the path (",(0,o.yg)("inlineCode",{parentName:"li"},"0"),", ",(0,o.yg)("inlineCode",{parentName:"li"},"1"),", ",(0,o.yg)("inlineCode",{parentName:"li"},"2"),", ...) you want to use to generate your account. By default, account ",(0,o.yg)("inlineCode",{parentName:"li"},"0")," is generated.")),(0,o.yg)("p",null,"The private key of account ",(0,o.yg)("inlineCode",{parentName:"p"},"0")," will be saved in your operating system's credentials storage.\nEach time you want to send a transaction, you will need to unlock your system's credentials store.\nIf you lose access to your credentials storage, you can always recover the private key with the\nmnemonic."),(0,o.yg)("admonition",{type:"tip"},(0,o.yg)("p",{parentName:"admonition"},(0,o.yg)("strong",{parentName:"p"},"You may not be prompted for password each time you send a transaction since most operating systems\nunlock user's credentials store upon login by default. If you want to change your credentials\nstore security policies please refer to your operating system manual."))),(0,o.yg)("h3",{id:"creating-an-account"},"Creating an Account"),(0,o.yg)("p",null,"To create an account, you just need to have ",(0,o.yg)("inlineCode",{parentName:"p"},"gaiad")," installed. Before creating it, you need to know where you intend to store and interact with your private keys. The best options are to store them in an offline dedicated computer or a ledger device. Storing them on your regular online computer involves more risk, since anyone who infiltrates your computer through the internet could exfiltrate your private keys and steal your funds."),(0,o.yg)("h4",{id:"using-a-ledger-device"},"Using a Ledger Device"),(0,o.yg)("admonition",{type:"warning"},(0,o.yg)("p",{parentName:"admonition"},(0,o.yg)("strong",{parentName:"p"},"Only use Ledger devices that you bought factory new or trust fully"))),(0,o.yg)("p",null,"When you initialize your ledger, a 24-word mnemonic is generated and stored in the device. This mnemonic is compatible with Cosmos and Cosmos accounts can be derived from it. Therefore, all you have to do is make your ledger compatible with ",(0,o.yg)("inlineCode",{parentName:"p"},"gaiad"),". To do so, you need to go through the following steps:"),(0,o.yg)("ol",null,(0,o.yg)("li",{parentName:"ol"},"Download the Ledger Live app ",(0,o.yg)("a",{parentName:"li",href:"https://www.ledger.com/ledger-live"},"here"),"."),(0,o.yg)("li",{parentName:"ol"},"Connect your ledger via USB and update to the latest firmware"),(0,o.yg)("li",{parentName:"ol"},'Go to the ledger live app store, and download the "Cosmos" application (this can take a while). ',(0,o.yg)("strong",{parentName:"li"},"Note: You may have to enable ",(0,o.yg)("inlineCode",{parentName:"strong"},"Dev Mode")," in the ",(0,o.yg)("inlineCode",{parentName:"strong"},"Settings"),' of Ledger Live to be able to download the "Cosmos" application'),"."),(0,o.yg)("li",{parentName:"ol"},"Navigate to the Cosmos app on your ledger device")),(0,o.yg)("p",null,"Then, to create an account, use the following command:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},"gaiad keys add --ledger\n")),(0,o.yg)("admonition",{type:"warning"},(0,o.yg)("p",{parentName:"admonition"},(0,o.yg)("strong",{parentName:"p"},"This command will only work while the Ledger is plugged in and unlocked"))),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"")," is the name of the account. It is a reference to the account number used to derive the key pair from the mnemonic. You will use this name to identify your account when you want to send a transaction."),(0,o.yg)("li",{parentName:"ul"},"You can add the optional ",(0,o.yg)("inlineCode",{parentName:"li"},"--account")," flag to specify the path (",(0,o.yg)("inlineCode",{parentName:"li"},"0"),", ",(0,o.yg)("inlineCode",{parentName:"li"},"1"),", ",(0,o.yg)("inlineCode",{parentName:"li"},"2"),", ...) you want to use to generate your account. By default, account ",(0,o.yg)("inlineCode",{parentName:"li"},"0")," is generated.")),(0,o.yg)("h4",{id:"using-a-computer"},"Using a Computer"),(0,o.yg)("admonition",{type:"warning"},(0,o.yg)("p",{parentName:"admonition"},(0,o.yg)("strong",{parentName:"p"},"NOTE: It is more secure to perform this action on an offline computer"))),(0,o.yg)("p",null,"To generate an account, just use the following command:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},"gaiad keys add \n")),(0,o.yg)("p",null,"The command will generate a 24-words mnemonic and save the private and public keys for account ",(0,o.yg)("inlineCode",{parentName:"p"},"0"),"\nat the same time.\nEach time you want to send a transaction, you will need to unlock your system's credentials store.\nIf you lose access to your credentials storage, you can always recover the private key with the\nmnemonic."),(0,o.yg)("admonition",{type:"tip"},(0,o.yg)("p",{parentName:"admonition"},(0,o.yg)("strong",{parentName:"p"},"You may not be prompted for password each time you send a transaction since most operating systems\nunlock user's credentials store upon login by default. If you want to change your credentials\nstore security policies please refer to your operating system manual."))),(0,o.yg)("admonition",{type:"warning"},(0,o.yg)("p",{parentName:"admonition"},(0,o.yg)("strong",{parentName:"p"},"Do not lose or share your 12 words with anyone. To prevent theft or loss of funds, it is best to ensure that you keep multiple copies of your mnemonic, and store it in a safe, secure place and that only you know how to access. If someone is able to gain access to your mnemonic, they will be able to gain access to your private keys and control the accounts associated with them."))),(0,o.yg)("admonition",{type:"warning"},(0,o.yg)("p",{parentName:"admonition"},"After you have secured your mnemonic (triple check!), you can delete bash history to ensure no one can retrieve it:"),(0,o.yg)("pre",{parentName:"admonition"},(0,o.yg)("code",{parentName:"pre",className:"language-bash"},"history -c\nrm ~/.bash_history\n"))),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"")," is the name of the account. It is a reference to the account number used to derive the key pair from the mnemonic. You will use this name to identify your account when you want to send a transaction."),(0,o.yg)("li",{parentName:"ul"},"You can add the optional ",(0,o.yg)("inlineCode",{parentName:"li"},"--account")," flag to specify the path (",(0,o.yg)("inlineCode",{parentName:"li"},"0"),", ",(0,o.yg)("inlineCode",{parentName:"li"},"1"),", ",(0,o.yg)("inlineCode",{parentName:"li"},"2"),", ...) you want to use to generate your account. By default, account ",(0,o.yg)("inlineCode",{parentName:"li"},"0")," is generated.")),(0,o.yg)("p",null,"You can generate more accounts from the same mnemonic using the following command:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},"gaiad keys add --recover --account 1\n")),(0,o.yg)("p",null,"This command will prompt you to input a passphrase as well as your mnemonic. Change the account number to generate a different account."),(0,o.yg)("h2",{id:"accessing-the-cosmos-hub-network"},"Accessing the Cosmos Hub Network"),(0,o.yg)("p",null,"In order to query the state and send transactions, you need a way to access the network. To do so, you can either run your own full-node, or connect to someone else's."),(0,o.yg)("admonition",{type:"warning"},(0,o.yg)("p",{parentName:"admonition"},(0,o.yg)("strong",{parentName:"p"},'NOTE: Do not share your mnemonic (12 or 24 words) with anyone. The only person who should ever need to know it is you. This is especially important if you are ever approached via email or direct message by someone requesting that you share your mnemonic for any kind of blockchain services or support. No one from Cosmos, the Tendermint team or the Interchain Foundation will ever send an email that asks for you to share any kind of account credentials or your mnemonic."'),".")),(0,o.yg)("h3",{id:"running-your-own-full-node"},"Running Your Own Full-Node"),(0,o.yg)("p",null,"This is the most secure option, but comes with relatively high resource requirements. In order to run your own full-node, you need good bandwidth and at least 1TB of disk space."),(0,o.yg)("p",null,"You will find the tutorial on how to install ",(0,o.yg)("inlineCode",{parentName:"p"},"gaiad")," ",(0,o.yg)("a",{parentName:"p",href:"../getting-started/installation"},"here"),", and the guide to run a full-node ",(0,o.yg)("a",{parentName:"p",href:"../hub-tutorials/join-mainnet"},"here"),"."),(0,o.yg)("h3",{id:"connecting-to-a-remote-full-node"},"Connecting to a Remote Full-Node"),(0,o.yg)("p",null,"If you do not want or cannot run your own node, you can connect to someone else's full-node. You should pick an operator you trust, because a malicious operator could return incorrect query results or censor your transactions. However, they will never be able to steal your funds, as your private keys are stored locally on your computer or ledger device. Possible options of full-node operators include validators, wallet providers or exchanges."),(0,o.yg)("p",null,"In order to connect to the full-node, you will need an address of the following form: ",(0,o.yg)("inlineCode",{parentName:"p"},"https://77.87.106.33:26657")," (",(0,o.yg)("em",{parentName:"p"},"Note: This is a placeholder"),"). This address has to be communicated by the full-node operator you choose to trust. You will use this address in the ",(0,o.yg)("a",{parentName:"p",href:"#setting-up-gaiad"},"following section"),"."),(0,o.yg)("h2",{id:"setting-up-gaiad"},"Setting Up ",(0,o.yg)("inlineCode",{parentName:"h2"},"gaiad")),(0,o.yg)("admonition",{type:"tip"},(0,o.yg)("p",{parentName:"admonition"},(0,o.yg)("strong",{parentName:"p"},"Before setting up ",(0,o.yg)("inlineCode",{parentName:"strong"},"gaiad"),", make sure you have set up a way to ",(0,o.yg)("a",{parentName:"strong",href:"#accessing-the-cosmos-hub-network"},"access the Cosmos Hub network")))),(0,o.yg)("admonition",{type:"warning"},(0,o.yg)("p",{parentName:"admonition"},(0,o.yg)("strong",{parentName:"p"},"Please check that you are always using the latest stable release of ",(0,o.yg)("inlineCode",{parentName:"strong"},"gaiad")))),(0,o.yg)("p",null,(0,o.yg)("inlineCode",{parentName:"p"},"gaiad")," is the tool that enables you to interact with the node that runs on the Cosmos Hub network, whether you run it yourself or not. Let us set it up properly."),(0,o.yg)("p",null,"In order to set up ",(0,o.yg)("inlineCode",{parentName:"p"},"gaiad"),", use the following command:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},"gaiad config \n")),(0,o.yg)("p",null,"It allows you to set a default value for each given flag."),(0,o.yg)("p",null,"First, set up the address of the full-node you want to connect to:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},"gaiad config node :\n\n// query the list of validators\ngaiad query staking validators\n\n// query the information of a validator given their address (e.g. cosmosvaloper1n5pepvmgsfd3p2tqqgvt505jvymmstf6s9gw27)\ngaiad query staking validator \n\n// query all delegations made from a delegator given their address (e.g. cosmos10snjt8dmpr5my0h76xj48ty80uzwhraqalu4eg)\ngaiad query staking delegations \n\n// query a specific delegation made from a delegator (e.g. cosmos10snjt8dmpr5my0h76xj48ty80uzwhraqalu4eg) to a validator (e.g. cosmosvaloper1n5pepvmgsfd3p2tqqgvt505jvymmstf6s9gw27) given their addresses\ngaiad query staking delegation \n\n// query the rewards of a delegator given a delegator address (e.g. cosmos10snjt8dmpr5my0h76xj48ty80uzwhraqalu4eg)\ngaiad query distribution rewards \n\n// query all proposals currently open for depositing\ngaiad query gov proposals --status deposit_period\n\n// query all proposals currently open for voting\ngaiad query gov proposals --status voting_period\n\n// query a proposal given its proposalID\ngaiad query gov proposal \n")),(0,o.yg)("p",null,"For more commands, just type:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},"gaiad query\n")),(0,o.yg)("p",null,"For each command, you can use the ",(0,o.yg)("inlineCode",{parentName:"p"},"-h")," or ",(0,o.yg)("inlineCode",{parentName:"p"},"--help")," flag to get more information."),(0,o.yg)("h2",{id:"sending-transactions"},"Sending Transactions"),(0,o.yg)("admonition",{type:"warning"},(0,o.yg)("p",{parentName:"admonition"},"On Cosmos Hub mainnet, the accepted denom is ",(0,o.yg)("inlineCode",{parentName:"p"},"uatom"),", where ",(0,o.yg)("inlineCode",{parentName:"p"},"1atom = 1,000,000uatom"))),(0,o.yg)("h3",{id:"a-note-on-gas-and-fees"},"A Note on Gas and Fees"),(0,o.yg)("p",null,"Transactions on the Cosmos Hub network need to include a transaction fee in order to be processed. This fee pays for the gas required to run the transaction. The formula is the following:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-js"},"fees = ceil(gas * gasPrices)\n")),(0,o.yg)("p",null,"The ",(0,o.yg)("inlineCode",{parentName:"p"},"gas")," is dependent on the transaction. Different transaction require different amount of ",(0,o.yg)("inlineCode",{parentName:"p"},"gas"),". The ",(0,o.yg)("inlineCode",{parentName:"p"},"gas")," amount for a transaction is calculated as it is being processed, but there is a way to estimate it beforehand by using the ",(0,o.yg)("inlineCode",{parentName:"p"},"auto")," value for the ",(0,o.yg)("inlineCode",{parentName:"p"},"gas")," flag. Of course, this only gives an estimate. You can adjust this estimate with the flag ",(0,o.yg)("inlineCode",{parentName:"p"},"--gas-adjustment")," (default ",(0,o.yg)("inlineCode",{parentName:"p"},"1.0"),") if you want to be sure you provide enough ",(0,o.yg)("inlineCode",{parentName:"p"},"gas")," for the transaction. For the remainder of this tutorial, we will use a ",(0,o.yg)("inlineCode",{parentName:"p"},"--gas-adjustment")," of ",(0,o.yg)("inlineCode",{parentName:"p"},"1.5"),"."),(0,o.yg)("p",null,"The ",(0,o.yg)("inlineCode",{parentName:"p"},"gasPrice")," is the price of each unit of ",(0,o.yg)("inlineCode",{parentName:"p"},"gas"),". Each validator sets a ",(0,o.yg)("inlineCode",{parentName:"p"},"min-gas-price")," value, and will only include transactions that have a ",(0,o.yg)("inlineCode",{parentName:"p"},"gasPrice")," greater than their ",(0,o.yg)("inlineCode",{parentName:"p"},"min-gas-price"),"."),(0,o.yg)("p",null,"The transaction ",(0,o.yg)("inlineCode",{parentName:"p"},"fees")," are the product of ",(0,o.yg)("inlineCode",{parentName:"p"},"gas")," and ",(0,o.yg)("inlineCode",{parentName:"p"},"gasPrice"),". As a user, you have to input 2 out of 3. The higher the ",(0,o.yg)("inlineCode",{parentName:"p"},"gasPrice"),"/",(0,o.yg)("inlineCode",{parentName:"p"},"fees"),", the higher the chance that your transaction will get included in a block."),(0,o.yg)("admonition",{type:"tip"},(0,o.yg)("p",{parentName:"admonition"},"For mainnet, the recommended ",(0,o.yg)("inlineCode",{parentName:"p"},"gas-prices")," is ",(0,o.yg)("inlineCode",{parentName:"p"},"0.0025uatom"),".")),(0,o.yg)("h3",{id:"sending-tokens"},"Sending Tokens"),(0,o.yg)("admonition",{type:"tip"},(0,o.yg)("p",{parentName:"admonition"},(0,o.yg)("strong",{parentName:"p"},"Before you can bond atoms and withdraw rewards, you need to ",(0,o.yg)("a",{parentName:"strong",href:"#setting-up-gaiad"},"set up ",(0,o.yg)("inlineCode",{parentName:"a"},"gaiad"))," and ",(0,o.yg)("a",{parentName:"strong",href:"#creating-an-account"},"create an account")))),(0,o.yg)("admonition",{type:"warning"},(0,o.yg)("p",{parentName:"admonition"},(0,o.yg)("strong",{parentName:"p"},"Note: These commands need to be run on an online computer. It is more secure to perform them commands using a Ledger Nano S device. For the offline procedure, click ",(0,o.yg)("a",{parentName:"strong",href:"#signing-transactions-from-an-offline-computer"},"here"),"."))),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},"// Send a certain amount of tokens to an address\n// Ex value for parameters (do not actually use these values in your tx!!): =cosmos16m93fezfiezhvnjajzrfyszml8qm92a0w67ntjhd3d0 =1000000uatom\n// Ex value for flags: =0.0025uatom\n\ngaiad tx bank send [from_key_or_address] [to_address] [amount] [flags]\n")),(0,o.yg)("h3",{id:"bonding-atoms-and-withdrawing-rewards"},"Bonding Atoms and Withdrawing Rewards"),(0,o.yg)("admonition",{type:"tip"},(0,o.yg)("p",{parentName:"admonition"},(0,o.yg)("strong",{parentName:"p"},"Before you can bond atoms and withdraw rewards, you need to ",(0,o.yg)("a",{parentName:"strong",href:"#setting-up-gaiad"},"set up ",(0,o.yg)("inlineCode",{parentName:"a"},"gaiad"))," and ",(0,o.yg)("a",{parentName:"strong",href:"#creating-an-account"},"create an account")))),(0,o.yg)("admonition",{type:"warning"},(0,o.yg)("p",{parentName:"admonition"},(0,o.yg)("strong",{parentName:"p"},"Before bonding Atoms, please read the ",(0,o.yg)("a",{parentName:"strong",href:"https://hub.cosmos.network/delegators/delegator-faq"},"delegator faq")," to understand the risk and responsibilities involved with delegating"))),(0,o.yg)("admonition",{type:"warning"},(0,o.yg)("p",{parentName:"admonition"},(0,o.yg)("strong",{parentName:"p"},"Note: These commands need to be run on an online computer. It is more secure to perform them commands using a ledger device. For the offline procedure, click ",(0,o.yg)("a",{parentName:"strong",href:"#signing-transactions-from-an-offline-computer"},"here"),"."))),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},"// Bond a certain amount of Atoms to a given validator\n// ex value for flags: =cosmosvaloper18thamkhnj9wz8pa4nhnp9rldprgant57pk2m8s, =10000000uatom, =0.0025uatom\n\ngaiad tx staking delegate --from --gas auto --gas-adjustment 1.5 --gas-prices \n\n\n// Redelegate a certain amount of Atoms from a validator to another\n// Can only be used if already bonded to a validator\n// Redelegation takes effect immediately, there is no waiting period to redelegate\n// After a redelegation, no other redelegation can be made from the account for the next 3 weeks\n// ex value for flags: =cosmosvaloper18thamkhnj9wz8pa4nhnp9rldprgant57pk2m8s, =100000000uatom, =0.0025uatom\n\ngaiad tx staking redelegate --from --gas auto --gas-adjustment 1.5 --gas-prices \n\n// Withdraw all rewards\n// ex value for flag: =0.0025uatom\n\ngaiad tx distribution withdraw-all-rewards --from --gas auto --gas-adjustment 1.5 --gas-prices \n\n\n// Unbond a certain amount of Atoms from a given validator\n// You will have to wait 3 weeks before your Atoms are fully unbonded and transferrable\n// ex value for flags: =cosmosvaloper18thamkhnj9wz8pa4nhnp9rldprgant57pk2m8s, =10000000uatom, =0.0025uatom\n\ngaiad tx staking unbond --from --gas auto --gas-adjustment 1.5 --gas-prices \n")),(0,o.yg)("admonition",{type:"warning"},(0,o.yg)("p",{parentName:"admonition"},(0,o.yg)("strong",{parentName:"p"},"If you use a connected Ledger, you will be asked to confirm the transaction on the device before it is signed and broadcast to the network. Note that the command will only work while the Ledger is plugged in and unlocked."))),(0,o.yg)("p",null,"To confirm that your transaction went through, you can use the following queries:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},"// your balance should change after you bond Atoms or withdraw rewards\ngaiad query account\n\n// you should have delegations after you bond Atom\ngaiad query staking delegations \n\n// this returns your tx if it has been included\n// use the tx hash that was displayed when you created the tx\ngaiad query tx \n\n")),(0,o.yg)("p",null,"Double check with a block explorer if you interact with the network through a trusted full-node."),(0,o.yg)("h2",{id:"participating-in-governance"},"Participating in Governance"),(0,o.yg)("h3",{id:"primer-on-governance"},"Primer on Governance"),(0,o.yg)("p",null,"The Cosmos Hub has a built-in governance system that lets bonded Atom holders vote on proposals. There are three types of proposal:"),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"Text Proposals"),": These are the most basic type of proposals. They can be used to get the opinion of the network on a given topic."),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"Parameter Proposals"),": These are used to update the value of an existing parameter."),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"Software Upgrade Proposal"),": These are used to propose an upgrade of the Hub's software.")),(0,o.yg)("p",null,"Any Atom holder can submit a proposal. In order for the proposal to be open for voting, it needs to come with a ",(0,o.yg)("inlineCode",{parentName:"p"},"deposit")," that is greater than a parameter called ",(0,o.yg)("inlineCode",{parentName:"p"},"minDeposit"),". The ",(0,o.yg)("inlineCode",{parentName:"p"},"deposit")," need not be provided in its entirety by the submitter. If the initial proposer's ",(0,o.yg)("inlineCode",{parentName:"p"},"deposit")," is not sufficient, the proposal enters the ",(0,o.yg)("inlineCode",{parentName:"p"},"deposit_period")," status. Then, any Atom holder can increase the deposit by sending a ",(0,o.yg)("inlineCode",{parentName:"p"},"depositTx"),"."),(0,o.yg)("p",null,"Once the ",(0,o.yg)("inlineCode",{parentName:"p"},"deposit")," reaches ",(0,o.yg)("inlineCode",{parentName:"p"},"minDeposit"),", the proposal enters the ",(0,o.yg)("inlineCode",{parentName:"p"},"voting_period"),", which lasts 2 weeks. Any ",(0,o.yg)("strong",{parentName:"p"},"bonded")," Atom holder can then cast a vote on this proposal. The options are ",(0,o.yg)("inlineCode",{parentName:"p"},"Yes"),", ",(0,o.yg)("inlineCode",{parentName:"p"},"No"),", ",(0,o.yg)("inlineCode",{parentName:"p"},"NoWithVeto")," and ",(0,o.yg)("inlineCode",{parentName:"p"},"Abstain"),". The weight of the vote is based on the amount of bonded Atoms of the sender. If they don't vote, delegator inherit the vote of their validator. However, delegators can override their validator's vote by sending a vote themselves."),(0,o.yg)("p",null,"At the end of the voting period, the proposal is accepted if there are more than 50% ",(0,o.yg)("inlineCode",{parentName:"p"},"Yes")," votes (excluding ",(0,o.yg)("inlineCode",{parentName:"p"},"Abstain")," votes) and less than 33.33% of ",(0,o.yg)("inlineCode",{parentName:"p"},"NoWithVeto")," votes (excluding ",(0,o.yg)("inlineCode",{parentName:"p"},"Abstain")," votes)."),(0,o.yg)("h3",{id:"in-practice"},"In Practice"),(0,o.yg)("admonition",{type:"tip"},(0,o.yg)("p",{parentName:"admonition"},(0,o.yg)("strong",{parentName:"p"},"Before you can bond atoms and withdraw rewards, you need to ",(0,o.yg)("a",{parentName:"strong",href:"#bonding-atoms-and-withdrawing-rewards"},"bond Atoms")))),(0,o.yg)("admonition",{type:"warning"},(0,o.yg)("p",{parentName:"admonition"},(0,o.yg)("strong",{parentName:"p"},"Note: These commands need to be run on an online computer. It is more secure to perform them commands using a ledger device. For the offline procedure, click ",(0,o.yg)("a",{parentName:"strong",href:"#signing-transactions-from-an-offline-computer"},"here"),"."))),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},'// Submit a Proposal\n// =text/parameter_change/software_upgrade\n// ex value for flag: =0.0025uatom\n\n// the proposal must meet the minimum deposit amount - please check the current chain params\ngaiad tx gov submit-legacy-proposal --title "Test Text Proposal" --description "My awesome proposal" --type "text" --deposit=10000000uatom --gas auto --gas-adjustment 1.5 --gas-prices --from \n\n// Increase deposit of a proposal\n// Retrieve proposalID from $gaiad query gov proposals --status deposit_period\n// ex value for parameter: =10000000uatom\n\ngaiad tx gov deposit --gas auto --gas-adjustment 1.5 --gas-prices --from \n\n// Vote on a proposal\n// Retrieve proposalID from $gaiad query gov proposals --status voting_period\n//