diff --git a/404.html b/404.html index f7fdbcc..c048db4 100644 --- a/404.html +++ b/404.html @@ -5,13 +5,13 @@ Page Not Found | Jackal Chain Docs - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- - + + \ No newline at end of file diff --git a/assets/js/03cdf430.dbf2f3d6.js b/assets/js/03cdf430.b9c55531.js similarity index 56% rename from assets/js/03cdf430.dbf2f3d6.js rename to assets/js/03cdf430.b9c55531.js index d03d28f..b7ae6e0 100644 --- a/assets/js/03cdf430.dbf2f3d6.js +++ b/assets/js/03cdf430.b9c55531.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[229],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),p=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},l=function(e){var t=p(e.components);return n.createElement(c.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),u=p(r),f=o,h=u["".concat(c,".").concat(f)]||u[f]||d[f]||a;return r?n.createElement(h,i(i({ref:t},l),{},{components:r})):n.createElement(h,i({ref:t},l))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=f;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[u]="string"==typeof e?e:o,i[1]=s;for(var p=2;p{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={sidebar_position:2},i="Partnerships",s={unversionedId:"ecosystem/partnerships",id:"ecosystem/partnerships",title:"Partnerships",description:"Blockchain and web3 native software engineering teams often wish to become core contributors through a partnership with the Jackal Foundation. In a partnership role, the team would be assigned direct tasks and held to a high standard of execution, professionalism, and accountability. If your team desires to partner with the Jackal Foundation, please reach out directly, we look forward to working with you.",source:"@site/docs/ecosystem/partnerships.md",sourceDirName:"ecosystem",slug:"/ecosystem/partnerships",permalink:"/docs/ecosystem/partnerships",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/ecosystem/partnerships.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Grants and Funding",permalink:"/docs/ecosystem/grants-funding"},next:{title:"Setting Up",permalink:"/docs/nodes/install"}},c={},p=[],l={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"partnerships"},"Partnerships"),(0,o.kt)("p",null,"Blockchain and web3 native software engineering teams often wish to become core contributors through a partnership with the Jackal Foundation. In a partnership role, the team would be assigned direct tasks and held to a high standard of execution, professionalism, and accountability. If your team desires to partner with the Jackal Foundation, please reach out directly, we look forward to working with you."))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[229],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),p=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},l=function(e){var t=p(e.components);return n.createElement(c.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),u=p(r),f=o,m=u["".concat(c,".").concat(f)]||u[f]||d[f]||a;return r?n.createElement(m,i(i({ref:t},l),{},{components:r})):n.createElement(m,i({ref:t},l))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=f;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[u]="string"==typeof e?e:o,i[1]=s;for(var p=2;p{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={sidebar_position:2},i="Partnerships",s={unversionedId:"ecosystem/partnerships",id:"ecosystem/partnerships",title:"Partnerships",description:"Blockchain and web3 native software engineering teams often wish to become core contributors through a partnership with",source:"@site/docs/ecosystem/partnerships.md",sourceDirName:"ecosystem",slug:"/ecosystem/partnerships",permalink:"/docs/ecosystem/partnerships",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/ecosystem/partnerships.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Grants and Funding",permalink:"/docs/ecosystem/grants-funding"},next:{title:"Setting Up",permalink:"/docs/nodes/install"}},c={},p=[],l={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"partnerships"},"Partnerships"),(0,o.kt)("p",null,"Blockchain and web3 native software engineering teams often wish to become core contributors through a partnership with\nthe Jackal Foundation. In a partnership role, the team would be assigned direct tasks and held to a high standard of\nexecution, professionalism, and accountability. If your team desires to partner with the Jackal Foundation, please reach\nout directly, we look forward to working with you."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/041d8db4.e39f546e.js b/assets/js/041d8db4.e39f546e.js new file mode 100644 index 0000000..f00d8df --- /dev/null +++ b/assets/js/041d8db4.e39f546e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[6487],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(r),f=o,m=u["".concat(l,".").concat(f)]||u[f]||d[f]||a;return r?n.createElement(m,i(i({ref:t},p),{},{components:r})):n.createElement(m,i({ref:t},p))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=f;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:o,i[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var n=r(7462),o=(r(7294),r(3905));const a={sidebar_position:2},i="APIs",s={unversionedId:"developers/apis/apis",id:"developers/apis/apis",title:"APIs",description:"Self Custodial",source:"@site/docs/developers/apis/2_apis.md",sourceDirName:"developers/apis",slug:"/developers/apis/apis",permalink:"/docs/developers/apis/apis",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/developers/apis/2_apis.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"About Jackal APIs",permalink:"/docs/developers/apis/intro"},next:{title:"Getting Started",permalink:"/docs/developers/intro"}},l={},c=[{value:"Self Custodial",id:"self-custodial",level:2},{value:"Jackal Custodial",id:"jackal-custodial",level:2}],p={toc:c},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"apis"},"APIs"),(0,o.kt)("h2",{id:"self-custodial"},"Self Custodial"),(0,o.kt)("p",null,"Coming Soon"),(0,o.kt)("h2",{id:"jackal-custodial"},"Jackal Custodial"),(0,o.kt)("p",null,"Coming Soon"))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0558eea0.d0dc91a4.js b/assets/js/0558eea0.d0dc91a4.js new file mode 100644 index 0000000..5b5e122 --- /dev/null +++ b/assets/js/0558eea0.d0dc91a4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[9042],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var r=n(7294);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 i(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 l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=c(n),m=a,f=p["".concat(l,".").concat(m)]||p[m]||d[m]||o;return n?r.createElement(f,i(i({ref:t},u),{},{components:n})):r.createElement(f,i({ref:t},u))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:a,i[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var r=n(7462),a=(n(7294),n(3905));const o={sidebar_position:1},i="Grants and Funding",s={unversionedId:"ecosystem/grants-funding",id:"ecosystem/grants-funding",title:"Grants and Funding",description:"The Jackal Foundation facilitates non-equity grants, seed funding, and beyond through our various funding programs.",source:"@site/docs/ecosystem/grants-funding.md",sourceDirName:"ecosystem",slug:"/ecosystem/grants-funding",permalink:"/docs/ecosystem/grants-funding",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/ecosystem/grants-funding.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Jackal Labs Links",permalink:"/docs/official-links/jackal-labs"},next:{title:"Partnerships",permalink:"/docs/ecosystem/partnerships"}},l={},c=[],u={toc:c},p="wrapper";function d(e){let{components:t,...n}=e;return(0,a.kt)(p,(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"grants-and-funding"},"Grants and Funding"),(0,a.kt)("p",null,"The Jackal Foundation facilitates non-equity grants, seed funding, and beyond through our various funding programs.\nEcosystem funding aims to focus on the following categories;"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Research and Development"),(0,a.kt)("li",{parentName:"ul"},"Infrastructure"),(0,a.kt)("li",{parentName:"ul"},"Social Impact"),(0,a.kt)("li",{parentName:"ul"},"dApps"),(0,a.kt)("li",{parentName:"ul"},"Tooling"),(0,a.kt)("li",{parentName:"ul"},"Services")),(0,a.kt)("p",null,"For grants, applications will be reviewed based on the following criteria."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"<100k"),(0,a.kt)("th",{parentName:"tr",align:"left"},"100k - 200k"),(0,a.kt)("th",{parentName:"tr",align:"left"},"200k+"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"One round of review."),(0,a.kt)("td",{parentName:"tr",align:"left"},"Two rounds of review."),(0,a.kt)("td",{parentName:"tr",align:"left"},"Interviews, formal committee review, full pitch.")))),(0,a.kt)("p",null,"For seed funding, the Jackal Foundation or Investment Network may support an ecosystem project with equity or token\ninvestments. For innovative founders that bring strategic value and adoption to the Jackal Ecosystem, please reach out\ndirectly to our team."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0558eea0.dd319e8b.js b/assets/js/0558eea0.dd319e8b.js deleted file mode 100644 index 2ac2fd7..0000000 --- a/assets/js/0558eea0.dd319e8b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[9042],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var r=n(7294);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 i(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 l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=c(n),f=a,m=p["".concat(l,".").concat(f)]||p[f]||d[f]||o;return n?r.createElement(m,i(i({ref:t},u),{},{components:n})):r.createElement(m,i({ref:t},u))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=f;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:a,i[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var r=n(7462),a=(n(7294),n(3905));const o={sidebar_position:1},i="Grants and Funding",s={unversionedId:"ecosystem/grants-funding",id:"ecosystem/grants-funding",title:"Grants and Funding",description:"The Jackal Foundation facilitates non-equity grants, seed funding, and beyond through our various funding programs. Ecosystem funding aims to focus on the following categories;",source:"@site/docs/ecosystem/grants-funding.md",sourceDirName:"ecosystem",slug:"/ecosystem/grants-funding",permalink:"/docs/ecosystem/grants-funding",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/ecosystem/grants-funding.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Jackal Labs Links",permalink:"/docs/official-links/jackal-labs"},next:{title:"Partnerships",permalink:"/docs/ecosystem/partnerships"}},l={},c=[],u={toc:c},p="wrapper";function d(e){let{components:t,...n}=e;return(0,a.kt)(p,(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"grants-and-funding"},"Grants and Funding"),(0,a.kt)("p",null,"The Jackal Foundation facilitates non-equity grants, seed funding, and beyond through our various funding programs. Ecosystem funding aims to focus on the following categories;"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Research and Development"),(0,a.kt)("li",{parentName:"ul"},"Infrastructure"),(0,a.kt)("li",{parentName:"ul"},"Social Impact"),(0,a.kt)("li",{parentName:"ul"},"dApps"),(0,a.kt)("li",{parentName:"ul"},"Tooling"),(0,a.kt)("li",{parentName:"ul"},"Services")),(0,a.kt)("p",null,"For grants, applications will be reviewed based on the following criteria."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"<100k"),(0,a.kt)("th",{parentName:"tr",align:"left"},"100k - 200k"),(0,a.kt)("th",{parentName:"tr",align:"left"},"200k+"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"One round of review."),(0,a.kt)("td",{parentName:"tr",align:"left"},"Two rounds of review."),(0,a.kt)("td",{parentName:"tr",align:"left"},"Interviews, formal committee review, full pitch.")))),(0,a.kt)("p",null,"For seed funding, the Jackal Foundation or Investment Network may support an ecosystem project with equity or token investments. For innovative founders that bring strategic value and adoption to the Jackal Ecosystem, please reach out directly to our team."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0e384e19.459dce20.js b/assets/js/0e384e19.639cda40.js similarity index 60% rename from assets/js/0e384e19.459dce20.js rename to assets/js/0e384e19.639cda40.js index 763a848..aa8a89a 100644 --- a/assets/js/0e384e19.459dce20.js +++ b/assets/js/0e384e19.639cda40.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[9671],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),p=s(r),f=o,m=p["".concat(l,".").concat(f)]||p[f]||d[f]||a;return r?n.createElement(m,i(i({ref:t},u),{},{components:r})):n.createElement(m,i({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=f;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[p]="string"==typeof e?e:o,i[1]=c;for(var s=2;s{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>c,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const a={sidebar_position:1},i="Welcome to Jackal Wiki",c={unversionedId:"intro",id:"intro",title:"Welcome to Jackal Wiki",description:"Welcome, explorer, to the Jackal Wiki, where you'll embark on a journey to discover a more secure, simple, and self-custodial digital world.",source:"@site/docs/intro.md",sourceDirName:".",slug:"/intro",permalink:"/docs/intro",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/intro.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"Discover the Jackal Protocol",permalink:"/docs/overview/jackal-tldr"}},l={},s=[],u={toc:s},p="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome-to-jackal-wiki"},"Welcome to Jackal Wiki"),(0,o.kt)("p",null,"Welcome, explorer, to the Jackal Wiki, where you'll embark on a journey to discover a more secure, simple, and self-custodial digital world."),(0,o.kt)("p",null,"The Jackal Protocol, an ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain"},"open-source")," and community-driven innovation, fosters a transparent and trustless ecosystem. You've found the ultimate hub for all things Jackal: protocol insights, usage tips, infrastructure knowledge, and unique opportunities."),(0,o.kt)("p",null,"Our enthusiastic teams at ",(0,o.kt)("a",{parentName:"p",href:"/docs/official-links/jackal-labs"},"Jackal Labs")," and the ",(0,o.kt)("a",{parentName:"p",href:"/docs/contributors/foundation"},"Jackal Foundation")," diligently maintain the Jackal Wiki. If you happen to spot outdated information, don't hesitate to reach out\u2014your input helps us ensure accuracy for the entire community. Let's shape the future of digital experiences together!"))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[9671],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),p=s(r),f=o,m=p["".concat(l,".").concat(f)]||p[f]||d[f]||a;return r?n.createElement(m,i(i({ref:t},u),{},{components:r})):n.createElement(m,i({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=f;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[p]="string"==typeof e?e:o,i[1]=c;for(var s=2;s{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>c,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const a={sidebar_position:1},i="Welcome to Jackal Wiki",c={unversionedId:"intro",id:"intro",title:"Welcome to Jackal Wiki",description:"Welcome, explorer, to the Jackal Wiki, where you'll embark on a journey to discover a more secure, simple, and",source:"@site/docs/intro.md",sourceDirName:".",slug:"/intro",permalink:"/docs/intro",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/intro.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"Discover the Jackal Protocol",permalink:"/docs/overview/jackal-tldr"}},l={},s=[],u={toc:s},p="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome-to-jackal-wiki"},"Welcome to Jackal Wiki"),(0,o.kt)("p",null,"Welcome, explorer, to the Jackal Wiki, where you'll embark on a journey to discover a more secure, simple, and\nself-custodial digital world."),(0,o.kt)("p",null,"The Jackal Protocol, an ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain"},"open-source")," and community-driven innovation,\nfosters a transparent and trustless ecosystem. You've found the ultimate hub for all things Jackal: protocol insights,\nusage tips, infrastructure knowledge, and unique opportunities."),(0,o.kt)("p",null,"Our enthusiastic teams at ",(0,o.kt)("a",{parentName:"p",href:"/docs/official-links/jackal-labs"},"Jackal Labs")," and\nthe ",(0,o.kt)("a",{parentName:"p",href:"/docs/contributors/foundation"},"Jackal Foundation")," diligently maintain the Jackal Wiki. If you happen to spot\noutdated information, don't hesitate to reach out\u2014your input helps us ensure accuracy for the entire community. Let's\nshape the future of digital experiences together!"))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/18a433c4.5df3b24e.js b/assets/js/18a433c4.6917106a.js similarity index 52% rename from assets/js/18a433c4.5df3b24e.js rename to assets/js/18a433c4.6917106a.js index 912dc90..02bbb4a 100644 --- a/assets/js/18a433c4.5df3b24e.js +++ b/assets/js/18a433c4.6917106a.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[1210],{3905:(e,t,n)=>{n.d(t,{Zo:()=>f,kt:()=>k});var o=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=o.createContext({}),s=function(e){var t=o.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},f=function(e){var t=s(e.components);return o.createElement(c.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,c=e.parentName,f=l(e,["components","mdxType","originalType","parentName"]),u=s(n),d=a,k=u["".concat(c,".").concat(d)]||u[d]||p[d]||r;return n?o.createElement(k,i(i({ref:t},f),{},{components:n})):o.createElement(k,i({ref:t},f))}));function k(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=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,i[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>l,toc:()=>s});var o=n(7462),a=(n(7294),n(3905));const r={sidebar_position:2},i="Jackal Foundation Links",l={unversionedId:"official-links/jackal-foundation",id:"official-links/jackal-foundation",title:"Jackal Foundation Links",description:"Here are the official website links for Jackal Foundation. Please use and bookmark these links to reduce the likelihood of cyber phishing threats.",source:"@site/docs/official-links/jackal-foundation.md",sourceDirName:"official-links",slug:"/official-links/jackal-foundation",permalink:"/docs/official-links/jackal-foundation",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/official-links/jackal-foundation.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Jackal Protocol Links",permalink:"/docs/official-links/jackal-protocol"},next:{title:"Jackal Labs Links",permalink:"/docs/official-links/jackal-labs"}},c={},s=[{value:"Jackal Foundation",id:"jackal-foundation",level:2}],f={toc:s},u="wrapper";function p(e){let{components:t,...n}=e;return(0,a.kt)(u,(0,o.Z)({},f,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"jackal-foundation-links"},"Jackal Foundation Links"),(0,a.kt)("p",null,"Here are the official website links for Jackal Foundation. Please use and bookmark these links to reduce the likelihood of cyber phishing threats."),(0,a.kt)("h2",{id:"jackal-foundation"},"Jackal Foundation"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://twitter.com/FoundationJKL"},"Jackal Foundation Twitter")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Website"),": Coming Soon"))}p.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[1210],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var o=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=o.createContext({}),s=function(e){var t=o.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=s(e.components);return o.createElement(c.Provider,{value:t},e.children)},f="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,c=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),f=s(n),d=a,k=f["".concat(c,".").concat(d)]||f[d]||p[d]||r;return n?o.createElement(k,i(i({ref:t},u),{},{components:n})):o.createElement(k,i({ref:t},u))}));function k(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=d;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[f]="string"==typeof e?e:a,i[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>l,toc:()=>s});var o=n(7462),a=(n(7294),n(3905));const r={sidebar_position:2},i="Jackal Foundation Links",l={unversionedId:"official-links/jackal-foundation",id:"official-links/jackal-foundation",title:"Jackal Foundation Links",description:"Here are the official website links for Jackal Foundation. Please use and bookmark these links to reduce the likelihood",source:"@site/docs/official-links/jackal-foundation.md",sourceDirName:"official-links",slug:"/official-links/jackal-foundation",permalink:"/docs/official-links/jackal-foundation",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/official-links/jackal-foundation.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Jackal Protocol Links",permalink:"/docs/official-links/jackal-protocol"},next:{title:"Jackal Labs Links",permalink:"/docs/official-links/jackal-labs"}},c={},s=[{value:"Jackal Foundation",id:"jackal-foundation",level:2}],u={toc:s},f="wrapper";function p(e){let{components:t,...n}=e;return(0,a.kt)(f,(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"jackal-foundation-links"},"Jackal Foundation Links"),(0,a.kt)("p",null,"Here are the official website links for Jackal Foundation. Please use and bookmark these links to reduce the likelihood\nof cyber phishing threats."),(0,a.kt)("h2",{id:"jackal-foundation"},"Jackal Foundation"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://twitter.com/FoundationJKL"},"Jackal Foundation Twitter")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Website"),": Coming Soon"))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/23f3f2f9.54be1c3c.js b/assets/js/23f3f2f9.f7b88f60.js similarity index 83% rename from assets/js/23f3f2f9.54be1c3c.js rename to assets/js/23f3f2f9.f7b88f60.js index 452dcf1..c81ec8a 100644 --- a/assets/js/23f3f2f9.54be1c3c.js +++ b/assets/js/23f3f2f9.f7b88f60.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[6174],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=o.createContext({}),s=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=s(e.components);return o.createElement(l.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},f=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),p=s(n),f=r,h=p["".concat(l,".").concat(f)]||p[f]||d[f]||a;return n?o.createElement(h,i(i({ref:t},u),{},{components:n})):o.createElement(h,i({ref:t},u))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=f;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[p]="string"==typeof e?e:r,i[1]=c;for(var s=2;s{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>c,toc:()=>s});var o=n(7462),r=(n(7294),n(3905));const a={sidebar_position:2},i="Jackal Foundation",c={unversionedId:"contributors/foundation",id:"contributors/foundation",title:"Jackal Foundation",description:"What is the Jackal Foundation?",source:"@site/docs/contributors/foundation.md",sourceDirName:"contributors",slug:"/contributors/foundation",permalink:"/docs/contributors/foundation",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/contributors/foundation.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Join the Community!",permalink:"/docs/contributors/join"},next:{title:"Jackal Labs",permalink:"/docs/contributors/labs"}},l={},s=[{value:"What is the Jackal Foundation?",id:"what-is-the-jackal-foundation",level:2},{value:"What is the scope of the Jackal Foundation?",id:"what-is-the-scope-of-the-jackal-foundation",level:3}],u={toc:s},p="wrapper";function d(e){let{components:t,...n}=e;return(0,r.kt)(p,(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"jackal-foundation"},"Jackal Foundation"),(0,r.kt)("h2",{id:"what-is-the-jackal-foundation"},"What is the Jackal Foundation?"),(0,r.kt)("p",null,"The Jackal Foundation serves as the cornerstone of the Jackal Community. As a non-profit organization, it propels development forward by conducting research, testing software, championing projects, and promoting decentralization."),(0,r.kt)("h3",{id:"what-is-the-scope-of-the-jackal-foundation"},"What is the scope of the Jackal Foundation?"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Maintain and enhance the Jackal Protocol."),(0,r.kt)("li",{parentName:"ul"},"Allocate resources to foster ecosystem growth."),(0,r.kt)("li",{parentName:"ul"},"Establish and oversee Jackal Collectives."),(0,r.kt)("li",{parentName:"ul"},"Manage the core governance of the Jackal Protocol."),(0,r.kt)("li",{parentName:"ul"},"Uphold and implement changes resulting from the governance process.")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[6174],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=o.createContext({}),s=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=s(e.components);return o.createElement(l.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},f=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),p=s(n),f=r,h=p["".concat(l,".").concat(f)]||p[f]||d[f]||a;return n?o.createElement(h,i(i({ref:t},u),{},{components:n})):o.createElement(h,i({ref:t},u))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=f;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[p]="string"==typeof e?e:r,i[1]=c;for(var s=2;s{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>c,toc:()=>s});var o=n(7462),r=(n(7294),n(3905));const a={sidebar_position:2},i="Jackal Foundation",c={unversionedId:"contributors/foundation",id:"contributors/foundation",title:"Jackal Foundation",description:"What is the Jackal Foundation?",source:"@site/docs/contributors/foundation.md",sourceDirName:"contributors",slug:"/contributors/foundation",permalink:"/docs/contributors/foundation",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/contributors/foundation.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Join the Community!",permalink:"/docs/contributors/join"},next:{title:"Jackal Labs",permalink:"/docs/contributors/labs"}},l={},s=[{value:"What is the Jackal Foundation?",id:"what-is-the-jackal-foundation",level:2},{value:"What is the scope of the Jackal Foundation?",id:"what-is-the-scope-of-the-jackal-foundation",level:3}],u={toc:s},p="wrapper";function d(e){let{components:t,...n}=e;return(0,r.kt)(p,(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"jackal-foundation"},"Jackal Foundation"),(0,r.kt)("h2",{id:"what-is-the-jackal-foundation"},"What is the Jackal Foundation?"),(0,r.kt)("p",null,"The Jackal Foundation serves as the cornerstone of the Jackal Community. As a non-profit organization, it propels\ndevelopment forward by conducting research, testing software, championing projects, and promoting decentralization."),(0,r.kt)("h3",{id:"what-is-the-scope-of-the-jackal-foundation"},"What is the scope of the Jackal Foundation?"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Maintain and enhance the Jackal Protocol."),(0,r.kt)("li",{parentName:"ul"},"Allocate resources to foster ecosystem growth."),(0,r.kt)("li",{parentName:"ul"},"Establish and oversee Jackal Collectives."),(0,r.kt)("li",{parentName:"ul"},"Manage the core governance of the Jackal Protocol."),(0,r.kt)("li",{parentName:"ul"},"Uphold and implement changes resulting from the governance process.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/24536a89.e87a2e60.js b/assets/js/24536a89.e87a2e60.js new file mode 100644 index 0000000..a02ee2f --- /dev/null +++ b/assets/js/24536a89.e87a2e60.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[8206],{3905:(e,r,t)=>{t.d(r,{Zo:()=>l,kt:()=>b});var n=t(7294);function o(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function a(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function i(e){for(var r=1;r=0||(o[t]=e[t]);return o}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=n.createContext({}),p=function(e){var r=n.useContext(s),t=r;return e&&(t="function"==typeof e?e(r):i(i({},r),e)),t},l=function(e){var r=p(e.components);return n.createElement(s.Provider,{value:r},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},f=n.forwardRef((function(e,r){var t=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,l=c(e,["components","mdxType","originalType","parentName"]),u=p(t),f=o,b=u["".concat(s,".").concat(f)]||u[f]||d[f]||a;return t?n.createElement(b,i(i({ref:r},l),{},{components:t})):n.createElement(b,i({ref:r},l))}));function b(e,r){var t=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var a=t.length,i=new Array(a);i[0]=f;var c={};for(var s in r)hasOwnProperty.call(r,s)&&(c[s]=r[s]);c.originalType=e,c[u]="string"==typeof e?e:o,i[1]=c;for(var p=2;p{t.r(r),t.d(r,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>c,toc:()=>p});var n=t(7462),o=(t(7294),t(3905));const a={sidebar_position:1},i="About Jackal APIs",c={unversionedId:"developers/apis/intro",id:"developers/apis/intro",title:"About Jackal APIs",description:"Coming Soon",source:"@site/docs/developers/apis/1_intro.md",sourceDirName:"developers/apis",slug:"/developers/apis/intro",permalink:"/docs/developers/apis/intro",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/developers/apis/1_intro.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Jackal.go",permalink:"/docs/developers/dAppLibraries/jackal_go"},next:{title:"APIs",permalink:"/docs/developers/apis/apis"}},s={},p=[],l={toc:p},u="wrapper";function d(e){let{components:r,...t}=e;return(0,o.kt)(u,(0,n.Z)({},l,t,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"about-jackal-apis"},"About Jackal APIs"),(0,o.kt)("p",null,"Coming Soon"))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/24b4006e.30737e09.js b/assets/js/24b4006e.30737e09.js new file mode 100644 index 0000000..90210a2 --- /dev/null +++ b/assets/js/24b4006e.30737e09.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[63],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>k});var n=r(7294);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 o(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 s(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var i=n.createContext({}),p=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(i.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,i=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=a,k=u["".concat(i,".").concat(m)]||u[m]||d[m]||o;return r?n.createElement(k,s(s({ref:t},c),{},{components:r})):n.createElement(k,s({ref:t},c))}));function k(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,s=new Array(o);s[0]=m;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l[u]="string"==typeof e?e:a,s[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const o={sidebar_position:2},s="Jackal.js-protos / Jackal.nodejs-protos",l={unversionedId:"developers/dAppLibraries/jackal_protos",id:"developers/dAppLibraries/jackal_protos",title:"Jackal.js-protos / Jackal.nodejs-protos",description:"About",source:"@site/docs/developers/dAppLibraries/2_jackal_protos.md",sourceDirName:"developers/dAppLibraries",slug:"/developers/dAppLibraries/jackal_protos",permalink:"/docs/developers/dAppLibraries/jackal_protos",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/developers/dAppLibraries/2_jackal_protos.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"About These Libraries",permalink:"/docs/developers/dAppLibraries/intro"},next:{title:"Jackal.js",permalink:"/docs/developers/dAppLibraries/jackal_js"}},i={},p=[{value:"About",id:"about",level:2},{value:"Quickstart",id:"quickstart",level:2},{value:"Pre-requesites",id:"pre-requesites",level:3},{value:"Setting Up",id:"setting-up",level:3},{value:"Updating Vite Config",id:"updating-vite-config",level:4},{value:"Next Steps",id:"next-steps",level:2}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"jackaljs-protos--jackalnodejs-protos"},"Jackal.js-protos / Jackal.nodejs-protos"),(0,a.kt)("h2",{id:"about"},"About"),(0,a.kt)("p",null,'The Protos modules for Jackal.js and Jackal.nodejs ("Protos") is the conversion layer the accepts raw protobufs from the\nJackal chain and converts them to useable typescrypt code. The differences between these 2 packages are only in the\ncompatibility with either browser or Nodejs Javascript APIs and how they are packaged for consumption. Protos is\ndesigned\nfor those that wish to write their own Jackal-compatible library instead of using Jackal.js / Jackal.nodejs.'),(0,a.kt)("h2",{id:"quickstart"},"Quickstart"),(0,a.kt)("p",null,"To get started using Protos, you'll need a few things!"),(0,a.kt)("h3",{id:"pre-requesites"},"Pre-requesites"),(0,a.kt)("p",null,"Both:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Nodejs v20+"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://www.npmjs.com/package/eciesjs"},"ECIESJS"))),(0,a.kt)("p",null,"Jackal.js-protos:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://vitejs.dev"},"Vite")),(0,a.kt)("li",{parentName:"ul"},"Chromium-family browser (Chrome, Brave, Edge, etc)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://www.keplr.app"},"Keplr")," or ",(0,a.kt)("a",{parentName:"li",href:"https://www.leapwallet.io/cosmos"},"Leap")," wallet extension")),(0,a.kt)("p",null,"Jackal.nodejs-protos:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"None")),(0,a.kt)("p",null,"Protos requires Node v20+. The easiest way to manage this is\nwith ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/nvm-sh/nvm#installing-and-updating"},"NVM"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"nvm use 20\n")),(0,a.kt)("h3",{id:"setting-up"},"Setting Up"),(0,a.kt)("p",null,"To get started, make sure your Jackal.js-protos based project has ",(0,a.kt)("a",{parentName:"p",href:"https://vitejs.dev/guide"},"Vite installed"),".\nJackal.nodejs-protos\ndoes not need this."),(0,a.kt)("p",null,"Install dependencies:"),(0,a.kt)("p",null,"(Jackal.js-protos)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"npm create vite@latest\nnpm install jackal.js-protos eciesjs @cosmjs/launchpad @cosmjs/proto-signing @cosmjs/stargate\nnpm install -D vite-plugin-node-stdlib-browser\n")),(0,a.kt)("p",null,"OR"),(0,a.kt)("p",null,"(Jackal.nodejs-protos)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"npm install jackal.nodejs-protos eciesjs @cosmjs/launchpad @cosmjs/proto-signing @cosmjs/stargate\nnpm install -D @types/node typescript tscpaths\n")),(0,a.kt)("h4",{id:"updating-vite-config"},"Updating Vite Config"),(0,a.kt)("p",null,"(Jackal.js-protos)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js"},"// In vite.config.js:\nimport { defineConfig } from 'vite'\nimport nodePolyfills from 'vite-plugin-node-stdlib-browser'\n\nexport default defineConfig({\n plugins: [\n nodePolyfills()\n ],\n})\n")),(0,a.kt)("h2",{id:"next-steps"},"Next Steps"),(0,a.kt)("p",null,"Once everything is set up as detailed above, you are free to create as little or as much using the methods exposed by\nProtos.\nFull documentation of these methods coming soon."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/259b7029.7c7113bb.js b/assets/js/259b7029.7c7113bb.js new file mode 100644 index 0000000..7bcf2fc --- /dev/null +++ b/assets/js/259b7029.7c7113bb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[7026],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>g});var r=t(7294);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function s(e){for(var n=1;n=0||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var l=r.createContext({}),d=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},p=function(e){var n=d(e.components);return r.createElement(l.Provider,{value:n},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},m=r.forwardRef((function(e,n){var t=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,p=a(e,["components","mdxType","originalType","parentName"]),u=d(t),m=i,g=u["".concat(l,".").concat(m)]||u[m]||c[m]||o;return t?r.createElement(g,s(s({ref:n},p),{},{components:t})):r.createElement(g,s({ref:n},p))}));function g(e,n){var t=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var o=t.length,s=new Array(o);s[0]=m;var a={};for(var l in n)hasOwnProperty.call(n,l)&&(a[l]=n[l]);a.originalType=e,a[u]="string"==typeof e?e:i,s[1]=a;for(var d=2;d{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>c,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var r=t(7462),i=(t(7294),t(3905));const o={sidebar_position:1},s="Creating Provider",a={unversionedId:"nodes/providers/building",id:"nodes/providers/building",title:"Creating Provider",description:"Disclaimer",source:"@site/docs/nodes/providers/1_building.md",sourceDirName:"nodes/providers",slug:"/nodes/providers/building",permalink:"/docs/nodes/providers/building",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/nodes/providers/1_building.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Enterprise Build",permalink:"/docs/nodes/providers/hardware/enterprise"},next:{title:"Setting Up JProvd",permalink:"/docs/nodes/providers/setting_up"}},l={},d=[{value:"Disclaimer",id:"disclaimer",level:2},{value:"Networking",id:"networking",level:2},{value:"Setting up ZFS Without Mirroring",id:"setting-up-zfs-without-mirroring",level:2}],p={toc:d},u="wrapper";function c(e){let{components:n,...t}=e;return(0,i.kt)(u,(0,r.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"creating-provider"},"Creating Provider"),(0,i.kt)("h2",{id:"disclaimer"},"Disclaimer"),(0,i.kt)("p",null,"This guide assumes you either have access to a full node over a network connection or are using the same machine as the\nfull node."),(0,i.kt)("h2",{id:"networking"},"Networking"),(0,i.kt)("p",null,"To allow your provider to be used by the Jackal Protocol Dashboard, please ensure you have a reverse proxy system setup\nand have a registered domain name pointing to your provider. We recommend\nusing ",(0,i.kt)("a",{parentName:"p",href:"https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/"},"Nginx"),"."),(0,i.kt)("p",null,"If you have UPNP enabled on your router, your provider will be open to the internet by default at port ",(0,i.kt)("inlineCode",{parentName:"p"},"3333"),". You can\nfind the address it can be connected to by running ",(0,i.kt)("inlineCode",{parentName:"p"},"canined network ip"),"."),(0,i.kt)("h2",{id:"setting-up-zfs-without-mirroring"},"Setting up ZFS Without Mirroring"),(0,i.kt)("p",null,"Setting up ZFS allows us to combine multiple drives together, in this case we are merging two drives. We don't recommend\nyou only merge drives with striping and instead we recommend mirroring. However mirroring is a longer process and\ndifferent for each configuration. In our case, this machine is only running with 24TB across 2 drives. We are less\nconcerned about a drive failing as that would wipe half our storage anyways."),(0,i.kt)("p",null,"List all drives with :"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"sudo fdisk -l\n")),(0,i.kt)("p",null,"You should end up seeing something like this"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"...\n\nDisk /dev/sda: 12.75 TiB, 14000519643136 bytes, 27344764928 sectors\nDisk model: ST14000NM001G-2K\nUnits: sectors of 1 * 512 = 512 bytes\nSector size (logical/physical): 512 bytes / 4096 bytes\nI/O size (minimum/optimal): 4096 bytes / 4096 bytes\nDisklabel type: gpt\nDisk identifier: 4DE192A1-7AFF-F64D-93D5-CA48B806DAA0\n\nDisk /dev/sdb: 12.75 TiB, 14000519643136 bytes, 27344764928 sectors\nDisk model: ST14000NM001G-2K\nUnits: sectors of 1 * 512 = 512 bytes\nSector size (logical/physical): 512 bytes / 4096 bytes\nI/O size (minimum/optimal): 4096 bytes / 4096 bytes\nDisklabel type: gpt\nDisk identifier: D2827F71-7F0A-EE4A-BB12-1B2172641DBE\n\n...\n")),(0,i.kt)("p",null,"Note down the Disk paths that you wish to use for your storage provider, in this case it is ",(0,i.kt)("inlineCode",{parentName:"p"},"/dev/sdb")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"/dev/sda"),"."),(0,i.kt)("p",null,"We install ZFS and create a new pool as follows:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"sudo apt install zfsutils-linux\n\nsudo zpool create {pool-name} /dev/sda /dev/sdb ...\n\nsudo zpool status\n")),(0,i.kt)("p",null,"This folder will now have the drives mounted at ",(0,i.kt)("inlineCode",{parentName:"p"},"/{pool-name}"),". For more in-depth guides to using zfs, check\nout ",(0,i.kt)("a",{parentName:"p",href:"https://zfsonlinux.org/"},"this page"),"."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/259b7029.f7e04bcc.js b/assets/js/259b7029.f7e04bcc.js deleted file mode 100644 index a85b6ab..0000000 --- a/assets/js/259b7029.f7e04bcc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[7026],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>g});var r=n(7294);function i(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 s(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=r.createContext({}),d=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},p=function(e){var t=d(e.components);return r.createElement(l.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,p=a(e,["components","mdxType","originalType","parentName"]),u=d(n),m=i,g=u["".concat(l,".").concat(m)]||u[m]||c[m]||o;return n?r.createElement(g,s(s({ref:t},p),{},{components:n})):r.createElement(g,s({ref:t},p))}));function g(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,s=new Array(o);s[0]=m;var a={};for(var l in t)hasOwnProperty.call(t,l)&&(a[l]=t[l]);a.originalType=e,a[u]="string"==typeof e?e:i,s[1]=a;for(var d=2;d{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>c,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var r=n(7462),i=(n(7294),n(3905));const o={sidebar_position:1},s="Creating Provider",a={unversionedId:"nodes/providers/building",id:"nodes/providers/building",title:"Creating Provider",description:"Disclaimer",source:"@site/docs/nodes/providers/1_building.md",sourceDirName:"nodes/providers",slug:"/nodes/providers/building",permalink:"/docs/nodes/providers/building",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/nodes/providers/1_building.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Enterprise Build",permalink:"/docs/nodes/providers/hardware/enterprise"},next:{title:"Setting Up JProvd",permalink:"/docs/nodes/providers/setting_up"}},l={},d=[{value:"Disclaimer",id:"disclaimer",level:2},{value:"Networking",id:"networking",level:2},{value:"Setting up ZFS Without Mirroring",id:"setting-up-zfs-without-mirroring",level:2}],p={toc:d},u="wrapper";function c(e){let{components:t,...n}=e;return(0,i.kt)(u,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"creating-provider"},"Creating Provider"),(0,i.kt)("h2",{id:"disclaimer"},"Disclaimer"),(0,i.kt)("p",null,"This guide assumes you either have access to a full node over a network connection or are using the same machine as the full node."),(0,i.kt)("h2",{id:"networking"},"Networking"),(0,i.kt)("p",null,"To allow your provider to be used by the Jackal Protocol Dashboard, please ensure you have a reverse proxy system setup and have a registered domain name pointing to your provider. We recommend using ",(0,i.kt)("a",{parentName:"p",href:"https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/"},"Nginx"),"."),(0,i.kt)("p",null,"If you have UPNP enabled on your router, your provider will be open to the internet by default at port ",(0,i.kt)("inlineCode",{parentName:"p"},"3333"),". You can find the address it can be connected to by running ",(0,i.kt)("inlineCode",{parentName:"p"},"canined network ip"),"."),(0,i.kt)("h2",{id:"setting-up-zfs-without-mirroring"},"Setting up ZFS Without Mirroring"),(0,i.kt)("p",null,"Setting up ZFS allows us to combine multiple drives together, in this case we are merging two drives. We don't recommend you only merge drives with striping and instead we recommend mirroring. However mirroring is a longer process and different for each configuration. In our case, this machine is only running with 24TB across 2 drives. We are less concerned about a drive failing as that would wipe half our storage anyways."),(0,i.kt)("p",null,"List all drives with :"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"sudo fdisk -l\n")),(0,i.kt)("p",null,"You should end up seeing something like this"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"...\n\nDisk /dev/sda: 12.75 TiB, 14000519643136 bytes, 27344764928 sectors\nDisk model: ST14000NM001G-2K\nUnits: sectors of 1 * 512 = 512 bytes\nSector size (logical/physical): 512 bytes / 4096 bytes\nI/O size (minimum/optimal): 4096 bytes / 4096 bytes\nDisklabel type: gpt\nDisk identifier: 4DE192A1-7AFF-F64D-93D5-CA48B806DAA0\n\nDisk /dev/sdb: 12.75 TiB, 14000519643136 bytes, 27344764928 sectors\nDisk model: ST14000NM001G-2K\nUnits: sectors of 1 * 512 = 512 bytes\nSector size (logical/physical): 512 bytes / 4096 bytes\nI/O size (minimum/optimal): 4096 bytes / 4096 bytes\nDisklabel type: gpt\nDisk identifier: D2827F71-7F0A-EE4A-BB12-1B2172641DBE\n\n...\n")),(0,i.kt)("p",null,"Note down the Disk paths that you wish to use for your storage provider, in this case it is ",(0,i.kt)("inlineCode",{parentName:"p"},"/dev/sdb")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"/dev/sda"),". "),(0,i.kt)("p",null,"We install ZFS and create a new pool as follows:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"sudo apt install zfsutils-linux\n\nsudo zpool create {pool-name} /dev/sda /dev/sdb ...\n\nsudo zpool status\n")),(0,i.kt)("p",null,"This folder will now have the drives mounted at ",(0,i.kt)("inlineCode",{parentName:"p"},"/{pool-name}"),". For more in-depth guides to using zfs, check out ",(0,i.kt)("a",{parentName:"p",href:"https://zfsonlinux.org/"},"this page"),"."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/29af3fe3.b7aa3bac.js b/assets/js/29af3fe3.b60f901c.js similarity index 75% rename from assets/js/29af3fe3.b7aa3bac.js rename to assets/js/29af3fe3.b60f901c.js index 1ed88d9..2045de3 100644 --- a/assets/js/29af3fe3.b7aa3bac.js +++ b/assets/js/29af3fe3.b60f901c.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[92],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>f});var r=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function o(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=r.createContext({}),c=function(e){var n=r.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},u=function(e){var n=c(e.components);return r.createElement(s.Provider,{value:n},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},m=r.forwardRef((function(e,n){var t=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=c(t),m=a,f=d["".concat(s,".").concat(m)]||d[m]||p[m]||i;return t?r.createElement(f,o(o({ref:n},u),{},{components:t})):r.createElement(f,o({ref:n},u))}));function f(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var i=t.length,o=new Array(i);o[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l[d]="string"==typeof e?e:a,o[1]=l;for(var c=2;c{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var r=t(7462),a=(t(7294),t(3905));const i={sidebar_position:2},o="Installing Canined",l={unversionedId:"nodes/nodes/installation",id:"nodes/nodes/installation",title:"Installing Canined",description:"Pre-Requisites",source:"@site/docs/nodes/nodes/2_installation.md",sourceDirName:"nodes/nodes",slug:"/nodes/nodes/installation",permalink:"/docs/nodes/nodes/installation",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/nodes/nodes/2_installation.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Hardware",permalink:"/docs/nodes/nodes/hardware"},next:{title:"Joining Testnet",permalink:"/docs/nodes/nodes/testnet"}},s={},c=[{value:"Pre-Requisites",id:"pre-requisites",level:2},{value:"Firewall Configuration",id:"firewall-configuration",level:3},{value:"Creating a Service",id:"creating-a-service",level:3},{value:"Building from Source",id:"building-from-source",level:2}],u={toc:c},d="wrapper";function p(e){let{components:n,...t}=e;return(0,a.kt)(d,(0,r.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"installing-canined"},"Installing Canined"),(0,a.kt)("h2",{id:"pre-requisites"},"Pre-Requisites"),(0,a.kt)("p",null,"See ",(0,a.kt)("a",{parentName:"p",href:"/docs/nodes/install"},"Set-up"),"."),(0,a.kt)("h3",{id:"firewall-configuration"},"Firewall Configuration"),(0,a.kt)("p",null,"Configure UFW to only accept traffic on ports we use."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"ufw limit ssh/tcp comment 'Rate limit for openssh server'\nufw default deny incoming\nufw default allow outgoing\nufw allow 26656/tcp comment 'JACKAL - Cosmos SDK/Tendermint P2P'\nufw allow 26657/tcp comment 'JACKAL - Cosmos SDK/Tendermint P2P'\nufw enable\n")),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"Perform the next follow steps as your ",(0,a.kt)("inlineCode",{parentName:"p"},"jackal")," user with 'sudo' permissions ")),(0,a.kt)("h3",{id:"creating-a-service"},"Creating a Service"),(0,a.kt)("p",null,"You may want the daemon to run without you needing to supervise it. To turn the executable into a service follow these steps."),(0,a.kt)("p",null,"First create the service file ",(0,a.kt)("inlineCode",{parentName:"p"},"/etc/systemd/system/canined.service")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},"sudo nano /etc/systemd/system/canined.service\n")),(0,a.kt)("p",null,"Copy and paste the follow into the service file: (you may need to edit it if you've set a custom home directory location)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-conf"},"[Unit]\nDescription=Jackal Validator\nAfter=network.target\n\n[Service]\nGroup=jackal\nUser=jackal\nWorkingDirectory=/home/jackal\nExecStart=/home/jackal/go/bin/canined start\nRestart=on-failure\nRestartSec=3\nLimitNOFILE=8192\n\n[Install]\nWantedBy=multi-user.target\n")),(0,a.kt)("p",null,"Update systemd and enable the service file."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},"sudo systemctl daemon-reload\nsudo systemctl enable canined.service\n")),(0,a.kt)("h2",{id:"building-from-source"},"Building from Source"),(0,a.kt)("p",null,"Replace ",(0,a.kt)("inlineCode",{parentName:"p"},"")," with the current running version."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},"git clone https://github.com/JackalLabs/canine-chain.git\ncd canine-chain\ngit fetch -a\ngit checkout \n\nmake install\n")),(0,a.kt)("p",null,"From there you will be able to use ",(0,a.kt)("inlineCode",{parentName:"p"},"canined"),", ex:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},"canined version\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[92],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>f});var r=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function o(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=r.createContext({}),c=function(e){var n=r.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},u=function(e){var n=c(e.components);return r.createElement(s.Provider,{value:n},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},m=r.forwardRef((function(e,n){var t=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=c(t),m=a,f=d["".concat(s,".").concat(m)]||d[m]||p[m]||i;return t?r.createElement(f,o(o({ref:n},u),{},{components:t})):r.createElement(f,o({ref:n},u))}));function f(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var i=t.length,o=new Array(i);o[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l[d]="string"==typeof e?e:a,o[1]=l;for(var c=2;c{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var r=t(7462),a=(t(7294),t(3905));const i={sidebar_position:2},o="Installing Canined",l={unversionedId:"nodes/nodes/installation",id:"nodes/nodes/installation",title:"Installing Canined",description:"Pre-Requisites",source:"@site/docs/nodes/nodes/2_installation.md",sourceDirName:"nodes/nodes",slug:"/nodes/nodes/installation",permalink:"/docs/nodes/nodes/installation",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/nodes/nodes/2_installation.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Hardware",permalink:"/docs/nodes/nodes/hardware"},next:{title:"Joining Testnet",permalink:"/docs/nodes/nodes/testnet"}},s={},c=[{value:"Pre-Requisites",id:"pre-requisites",level:2},{value:"Firewall Configuration",id:"firewall-configuration",level:3},{value:"Creating a Service",id:"creating-a-service",level:3},{value:"Building from Source",id:"building-from-source",level:2}],u={toc:c},d="wrapper";function p(e){let{components:n,...t}=e;return(0,a.kt)(d,(0,r.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"installing-canined"},"Installing Canined"),(0,a.kt)("h2",{id:"pre-requisites"},"Pre-Requisites"),(0,a.kt)("p",null,"See ",(0,a.kt)("a",{parentName:"p",href:"/docs/nodes/install"},"Set-up"),"."),(0,a.kt)("h3",{id:"firewall-configuration"},"Firewall Configuration"),(0,a.kt)("p",null,"Configure UFW to only accept traffic on ports we use."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"ufw limit ssh/tcp comment 'Rate limit for openssh server'\nufw default deny incoming\nufw default allow outgoing\nufw allow 26656/tcp comment 'JACKAL - Cosmos SDK/Tendermint P2P'\nufw allow 26657/tcp comment 'JACKAL - Cosmos SDK/Tendermint P2P'\nufw enable\n")),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"Perform the next follow steps as your ",(0,a.kt)("inlineCode",{parentName:"p"},"jackal")," user with 'sudo' permissions")),(0,a.kt)("h3",{id:"creating-a-service"},"Creating a Service"),(0,a.kt)("p",null,"You may want the daemon to run without you needing to supervise it. To turn the executable into a service follow these\nsteps."),(0,a.kt)("p",null,"First create the service file ",(0,a.kt)("inlineCode",{parentName:"p"},"/etc/systemd/system/canined.service")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},"sudo nano /etc/systemd/system/canined.service\n")),(0,a.kt)("p",null,"Copy and paste the follow into the service file: (you may need to edit it if you've set a custom home directory\nlocation)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-conf"},"[Unit]\nDescription=Jackal Validator\nAfter=network.target\n\n[Service]\nGroup=jackal\nUser=jackal\nWorkingDirectory=/home/jackal\nExecStart=/home/jackal/go/bin/canined start\nRestart=on-failure\nRestartSec=3\nLimitNOFILE=8192\n\n[Install]\nWantedBy=multi-user.target\n")),(0,a.kt)("p",null,"Update systemd and enable the service file."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},"sudo systemctl daemon-reload\nsudo systemctl enable canined.service\n")),(0,a.kt)("h2",{id:"building-from-source"},"Building from Source"),(0,a.kt)("p",null,"Replace ",(0,a.kt)("inlineCode",{parentName:"p"},"")," with the current running version."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},"git clone https://github.com/JackalLabs/canine-chain.git\ncd canine-chain\ngit fetch -a\ngit checkout \n\nmake install\n")),(0,a.kt)("p",null,"From there you will be able to use ",(0,a.kt)("inlineCode",{parentName:"p"},"canined"),", ex:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},"canined version\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/344debb6.11ce8114.js b/assets/js/344debb6.11ce8114.js deleted file mode 100644 index ed90159..0000000 --- a/assets/js/344debb6.11ce8114.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[54],{3905:(e,t,o)=>{o.d(t,{Zo:()=>c,kt:()=>f});var r=o(7294);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 i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function a(e){for(var t=1;t=0||(n[o]=e[o]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var s=r.createContext({}),p=function(e){var t=r.useContext(s),o=t;return e&&(o="function"==typeof e?e(t):a(a({},t),e)),o},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var o=e.components,n=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(o),m=n,f=d["".concat(s,".").concat(m)]||d[m]||u[m]||i;return o?r.createElement(f,a(a({ref:t},c),{},{components:o})):r.createElement(f,a({ref:t},c))}));function f(e,t){var o=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=o.length,a=new Array(i);a[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[d]="string"==typeof e?e:n,a[1]=l;for(var p=2;p{o.r(t),o.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var r=o(7462),n=(o(7294),o(3905));const i={sidebar_position:3},a="LP Module (Coming Soon)",l={unversionedId:"protocol/modules/lp",id:"protocol/modules/lp",title:"LP Module (Coming Soon)",description:"The lp (Liquidity Provision) module is a vital part of the Jackal Protocol, enabling the creation and management of liquidity pools for trading and swapping tokens. This module provides a decentralized solution for users to contribute liquidity to the ecosystem and earn rewards in return.",source:"@site/docs/protocol/modules/lp.md",sourceDirName:"protocol/modules",slug:"/protocol/modules/lp",permalink:"/docs/protocol/modules/lp",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/protocol/modules/lp.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"JKLmint Module",permalink:"/docs/protocol/modules/jklmint"},next:{title:"Name Service Module",permalink:"/docs/protocol/modules/rns"}},s={},p=[{value:"Overview",id:"overview",level:2}],c={toc:p},d="wrapper";function u(e){let{components:t,...o}=e;return(0,n.kt)(d,(0,r.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"lp-module-coming-soon"},"LP Module (Coming Soon)"),(0,n.kt)("p",null,"The ",(0,n.kt)("inlineCode",{parentName:"p"},"lp")," (Liquidity Provision) module is a vital part of the Jackal Protocol, enabling the creation and management of liquidity pools for trading and swapping tokens. This module provides a decentralized solution for users to contribute liquidity to the ecosystem and earn rewards in return."),(0,n.kt)("h2",{id:"overview"},"Overview"),(0,n.kt)("p",null,"The ",(0,n.kt)("inlineCode",{parentName:"p"},"lp")," module manages the following aspects of liquidity pools:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Liquidity Pool Creation"),": Allows the creation of new liquidity pools for token pairs."),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Liquidity Provision"),": Facilitates users to add or remove liquidity from existing pools."),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Token Swaps"),": Enables decentralized trading and swapping of tokens within the liquidity pools."),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Rewards"),": Distributes rewards to liquidity providers proportionate to their contribution.")),(0,n.kt)("p",null,"For a more detailed guide on the 'lp' module, please refer to the ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain/blob/master/x/lp/README.md"},"module documentation")," on GitHub."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/344debb6.eb515929.js b/assets/js/344debb6.eb515929.js new file mode 100644 index 0000000..b799d00 --- /dev/null +++ b/assets/js/344debb6.eb515929.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[54],{3905:(e,t,o)=>{o.d(t,{Zo:()=>c,kt:()=>f});var r=o(7294);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 i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function a(e){for(var t=1;t=0||(n[o]=e[o]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var p=r.createContext({}),s=function(e){var t=r.useContext(p),o=t;return e&&(o="function"==typeof e?e(t):a(a({},t),e)),o},c=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var o=e.components,n=e.mdxType,i=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(o),m=n,f=u["".concat(p,".").concat(m)]||u[m]||d[m]||i;return o?r.createElement(f,a(a({ref:t},c),{},{components:o})):r.createElement(f,a({ref:t},c))}));function f(e,t){var o=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=o.length,a=new Array(i);a[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:n,a[1]=l;for(var s=2;s{o.r(t),o.d(t,{assets:()=>p,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var r=o(7462),n=(o(7294),o(3905));const i={sidebar_position:3},a="LP Module (Coming Soon)",l={unversionedId:"protocol/modules/lp",id:"protocol/modules/lp",title:"LP Module (Coming Soon)",description:"The lp (Liquidity Provision) module is a vital part of the Jackal Protocol, enabling the creation and management of",source:"@site/docs/protocol/modules/lp.md",sourceDirName:"protocol/modules",slug:"/protocol/modules/lp",permalink:"/docs/protocol/modules/lp",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/protocol/modules/lp.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"JKLmint Module",permalink:"/docs/protocol/modules/jklmint"},next:{title:"Name Service Module",permalink:"/docs/protocol/modules/rns"}},p={},s=[{value:"Overview",id:"overview",level:2}],c={toc:s},u="wrapper";function d(e){let{components:t,...o}=e;return(0,n.kt)(u,(0,r.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"lp-module-coming-soon"},"LP Module (Coming Soon)"),(0,n.kt)("p",null,"The ",(0,n.kt)("inlineCode",{parentName:"p"},"lp")," (Liquidity Provision) module is a vital part of the Jackal Protocol, enabling the creation and management of\nliquidity pools for trading and swapping tokens. This module provides a decentralized solution for users to contribute\nliquidity to the ecosystem and earn rewards in return."),(0,n.kt)("h2",{id:"overview"},"Overview"),(0,n.kt)("p",null,"The ",(0,n.kt)("inlineCode",{parentName:"p"},"lp")," module manages the following aspects of liquidity pools:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Liquidity Pool Creation"),": Allows the creation of new liquidity pools for token pairs."),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Liquidity Provision"),": Facilitates users to add or remove liquidity from existing pools."),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Token Swaps"),": Enables decentralized trading and swapping of tokens within the liquidity pools."),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Rewards"),": Distributes rewards to liquidity providers proportionate to their contribution.")),(0,n.kt)("p",null,"For a more detailed guide on the 'lp' module, please refer to\nthe ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain/blob/master/x/lp/README.md"},"module documentation")," on GitHub."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/365ebb01.06cfa97a.js b/assets/js/365ebb01.06cfa97a.js deleted file mode 100644 index be66aca..0000000 --- a/assets/js/365ebb01.06cfa97a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[9293],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>b});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=o.createContext({}),l=function(e){var t=o.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=l(e.components);return o.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},f=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,s=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),p=l(r),f=n,b=p["".concat(s,".").concat(f)]||p[f]||u[f]||a;return r?o.createElement(b,i(i({ref:t},d),{},{components:r})):o.createElement(b,i({ref:t},d))}));function b(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=f;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c[p]="string"==typeof e?e:n,i[1]=c;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>l});var o=r(7462),n=(r(7294),r(3905));const a={sidebar_position:5},i="Validators",c={unversionedId:"protocol/validators",id:"protocol/validators",title:"Validators",description:"The Jackal Validators are secure web servers, dedicated machines that participate in the consensus protocol by broadcasting cryptographic signatures, or votes, to agree upon the next block. Voting power is determined by the amount of staking tokens delegated by non-validators and bonded as collateral to earn a reward. These non-validators, or delegators, incur the risk of getting punished (slashed) if the delegate validator gets hacked or violates the protocol.",source:"@site/docs/protocol/validators.md",sourceDirName:"protocol",slug:"/protocol/validators",permalink:"/docs/protocol/validators",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/protocol/validators.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Encryption in Jackal Protocol",permalink:"/docs/protocol/encryption"},next:{title:"Jackal Protocol Links",permalink:"/docs/official-links/jackal-protocol"}},s={},l=[],d={toc:l},p="wrapper";function u(e){let{components:t,...r}=e;return(0,n.kt)(p,(0,o.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"validators"},"Validators"),(0,n.kt)("p",null,"The Jackal Validators are secure web servers, dedicated machines that participate in the consensus protocol by broadcasting cryptographic signatures, or votes, to agree upon the next block. Voting power is determined by the amount of staking tokens delegated by non-validators and bonded as collateral to earn a reward. These non-validators, or delegators, incur the risk of getting punished (slashed) if the delegate validator gets hacked or violates the protocol."),(0,n.kt)("p",null,"To set up a validator and become a contributing part of the network, read the installation instructions ",(0,n.kt)("a",{parentName:"p",href:"/docs/nodes/nodes/installation"},"here")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/365ebb01.4242157c.js b/assets/js/365ebb01.4242157c.js new file mode 100644 index 0000000..e1f52a1 --- /dev/null +++ b/assets/js/365ebb01.4242157c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[9293],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>b});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=o.createContext({}),s=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=s(e.components);return o.createElement(l.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},f=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),d=s(r),f=n,b=d["".concat(l,".").concat(f)]||d[f]||u[f]||a;return r?o.createElement(b,i(i({ref:t},p),{},{components:r})):o.createElement(b,i({ref:t},p))}));function b(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=f;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[d]="string"==typeof e?e:n,i[1]=c;for(var s=2;s{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>s});var o=r(7462),n=(r(7294),r(3905));const a={sidebar_position:5},i="Validators",c={unversionedId:"protocol/validators",id:"protocol/validators",title:"Validators",description:"The Jackal Validators are secure web servers, dedicated machines that participate in the consensus protocol by",source:"@site/docs/protocol/validators.md",sourceDirName:"protocol",slug:"/protocol/validators",permalink:"/docs/protocol/validators",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/protocol/validators.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Encryption in Jackal Protocol",permalink:"/docs/protocol/encryption"},next:{title:"Jackal Protocol Links",permalink:"/docs/official-links/jackal-protocol"}},l={},s=[],p={toc:s},d="wrapper";function u(e){let{components:t,...r}=e;return(0,n.kt)(d,(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"validators"},"Validators"),(0,n.kt)("p",null,"The Jackal Validators are secure web servers, dedicated machines that participate in the consensus protocol by\nbroadcasting cryptographic signatures, or votes, to agree upon the next block. Voting power is determined by the amount\nof staking tokens delegated by non-validators and bonded as collateral to earn a reward. These non-validators, or\ndelegators, incur the risk of getting punished (slashed) if the delegate validator gets hacked or violates the protocol."),(0,n.kt)("p",null,"To set up a validator and become a contributing part of the network, read the installation\ninstructions ",(0,n.kt)("a",{parentName:"p",href:"/docs/nodes/nodes/installation"},"here")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3d14bff3.5536ceda.js b/assets/js/3d14bff3.5536ceda.js deleted file mode 100644 index 52ee818..0000000 --- a/assets/js/3d14bff3.5536ceda.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[737],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>b});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),s=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},l=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,l=c(e,["components","mdxType","originalType","parentName"]),d=s(r),f=o,b=d["".concat(p,".").concat(f)]||d[f]||u[f]||a;return r?n.createElement(b,i(i({ref:t},l),{},{components:r})):n.createElement(b,i({ref:t},l))}));function b(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=f;var c={};for(var p in t)hasOwnProperty.call(t,p)&&(c[p]=t[p]);c.originalType=e,c[d]="string"==typeof e?e:o,i[1]=c;for(var s=2;s{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const a={sidebar_position:2},i="Getting Started",c={unversionedId:"developers/intro",id:"developers/intro",title:"Getting Started",description:"Web-Apps",source:"@site/docs/developers/intro.md",sourceDirName:"developers",slug:"/developers/intro",permalink:"/docs/developers/intro",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/developers/intro.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Jackal.js",permalink:"/docs/developers/jackaljs/intro"}},p={},s=[{value:"Web-Apps",id:"web-apps",level:2}],l={toc:s},d="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(d,(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"getting-started"},"Getting Started"),(0,o.kt)("h2",{id:"web-apps"},"Web-Apps"),(0,o.kt)("p",null,"To get started building web apps that leverage Jackal, head over to the ",(0,o.kt)("a",{parentName:"p",href:"/docs/developers/jackaljs/intro"},"Jackal.js Quickstart")),(0,o.kt)("h1",{id:"dapp-docs-coming-soon"},"dApp Docs Coming Soon"))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3d14bff3.623b4cd0.js b/assets/js/3d14bff3.623b4cd0.js new file mode 100644 index 0000000..28bcd87 --- /dev/null +++ b/assets/js/3d14bff3.623b4cd0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[737],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>f});var n=r(7294);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 o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var p=n.createContext({}),c=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},l=function(e){var t=c(e.components);return n.createElement(p.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},v=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,p=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),d=c(r),v=a,f=d["".concat(p,".").concat(v)]||d[v]||u[v]||o;return r?n.createElement(f,i(i({ref:t},l),{},{components:r})):n.createElement(f,i({ref:t},l))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=v;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[d]="string"==typeof e?e:a,i[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var n=r(7462),a=(r(7294),r(3905));const o={sidebar_position:2},i="Getting Started",s={unversionedId:"developers/intro",id:"developers/intro",title:"Getting Started",description:"Web-Apps",source:"@site/docs/developers/intro.md",sourceDirName:"developers",slug:"/developers/intro",permalink:"/docs/developers/intro",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/developers/intro.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"APIs",permalink:"/docs/developers/apis/apis"}},p={},c=[{value:"Web-Apps",id:"web-apps",level:2},{value:"Server-side",id:"server-side",level:2},{value:"APIs",id:"apis",level:2}],l={toc:c},d="wrapper";function u(e){let{components:t,...r}=e;return(0,a.kt)(d,(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"getting-started"},"Getting Started"),(0,a.kt)("h2",{id:"web-apps"},"Web-Apps"),(0,a.kt)("p",null,"To get started building web apps that leverage Jackal, head over to\nthe ",(0,a.kt)("a",{parentName:"p",href:"/docs/developers/dAppLibraries/jackal_js"},"Jackal.js Quickstart")),(0,a.kt)("h2",{id:"server-side"},"Server-side"),(0,a.kt)("p",null,"To get started building server-side apps that leverage Jackal, head over to\nthe ",(0,a.kt)("a",{parentName:"p",href:"/docs/developers/dAppLibraries/jackal_nodejs"},"Jackal.nodejs Quickstart"),"\nor ",(0,a.kt)("a",{parentName:"p",href:"/docs/developers/dAppLibraries/jackal_go"},"Jackalgo Quickstart"),"."),(0,a.kt)("h2",{id:"apis"},"APIs"),(0,a.kt)("p",null,"To get started building using our APIs, check out ",(0,a.kt)("a",{parentName:"p",href:"/docs/developers/apis/apis"},"API Quickstart"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3e125dc6.0e24697b.js b/assets/js/3e125dc6.0e24697b.js new file mode 100644 index 0000000..2c0f8a8 --- /dev/null +++ b/assets/js/3e125dc6.0e24697b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[1148],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>f});var r=a(7294);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 i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var l=r.createContext({}),c=function(e){var t=r.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},d=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},v=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=c(a),v=n,f=u["".concat(l,".").concat(v)]||u[v]||p[v]||i;return a?r.createElement(f,o(o({ref:t},d),{},{components:a})):r.createElement(f,o({ref:t},d))}));function f(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,o=new Array(i);o[0]=v;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:n,o[1]=s;for(var c=2;c{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var r=a(7462),n=(a(7294),a(3905));const i={sidebar_position:3},o="Why Choose Jackal Protocol",s={unversionedId:"overview/why-jackal",id:"overview/why-jackal",title:"Why Choose Jackal Protocol",description:"The Jackal Protocol offers various advantages for individuals, small businesses, and large enterprises seeking secure,",source:"@site/docs/overview/why-jackal.md",sourceDirName:"overview",slug:"/overview/why-jackal",permalink:"/docs/overview/why-jackal",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/overview/why-jackal.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"What Is The JKL Token?",permalink:"/docs/overview/jkl"},next:{title:"Keplr Wallet",permalink:"/docs/using-jackal/wallet/keplr"}},l={},c=[{value:"Individuals",id:"individuals",level:2},{value:"Enhanced data privacy and security",id:"enhanced-data-privacy-and-security",level:3},{value:"Self-custodial storage",id:"self-custodial-storage",level:3},{value:"On-chain permissions",id:"on-chain-permissions",level:3},{value:"Small Businesses",id:"small-businesses",level:2},{value:"Cost-effective storage",id:"cost-effective-storage",level:3},{value:"Scalability",id:"scalability",level:3},{value:"Simplified compliance",id:"simplified-compliance",level:3},{value:"Large Enterprises",id:"large-enterprises",level:2},{value:"Improved data governance",id:"improved-data-governance",level:3},{value:"Enhanced security",id:"enhanced-security",level:3},{value:"Customizable solutions",id:"customizable-solutions",level:3}],d={toc:c},u="wrapper";function p(e){let{components:t,...a}=e;return(0,n.kt)(u,(0,r.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"why-choose-jackal-protocol"},"Why Choose Jackal Protocol"),(0,n.kt)("p",null,"The Jackal Protocol offers various advantages for individuals, small businesses, and large enterprises seeking secure,\ndecentralized data storage and management solutions."),(0,n.kt)("h2",{id:"individuals"},"Individuals"),(0,n.kt)("p",null,"Individuals choose the Jackal Protocol for several reasons:"),(0,n.kt)("h3",{id:"enhanced-data-privacy-and-security"},"Enhanced data privacy and security"),(0,n.kt)("p",null,"The decentralized nature of the Jackal Protocol ensures that your data is stored across multiple nodes, reducing the\nrisk of data breaches and unauthorized access."),(0,n.kt)("h3",{id:"self-custodial-storage"},"Self-custodial storage"),(0,n.kt)("p",null,"The Jackal Protocol allows individuals to retain full control over their data, ensuring that no third party, not even\nthe Jackal team, can access or view it without the user's consent."),(0,n.kt)("h3",{id:"on-chain-permissions"},"On-chain permissions"),(0,n.kt)("p",null,"The transparent and secure permissions system enables users to manage access to their data, granting, revoking, or\nmodifying permissions as needed."),(0,n.kt)("h2",{id:"small-businesses"},"Small Businesses"),(0,n.kt)("p",null,"Small businesses benefit from the Jackal Protocol in various ways:"),(0,n.kt)("h3",{id:"cost-effective-storage"},"Cost-effective storage"),(0,n.kt)("p",null,"With the Jackal Protocol's decentralized storage model, businesses can benefit from competitive pricing, making it more\naffordable than traditional centralized storage solutions."),(0,n.kt)("h3",{id:"scalability"},"Scalability"),(0,n.kt)("p",null,"The Jackal Protocol is built to scale with your business, ensuring that your data storage capacity can grow as your\norganization expands."),(0,n.kt)("h3",{id:"simplified-compliance"},"Simplified compliance"),(0,n.kt)("p",null,"Jackal Protocol's immutable records of data access and modification make it easier to meet industry-specific regulatory\nrequirements and simplify auditing processes."),(0,n.kt)("h2",{id:"large-enterprises"},"Large Enterprises"),(0,n.kt)("p",null,"Large enterprises can leverage the Jackal Protocol for:"),(0,n.kt)("h3",{id:"improved-data-governance"},"Improved data governance"),(0,n.kt)("p",null,"The on-chain permissions system allows for transparent and secure management of data access, ensuring that sensitive\ninformation remains protected and accessible only to authorized personnel."),(0,n.kt)("h3",{id:"enhanced-security"},"Enhanced security"),(0,n.kt)("p",null,"By leveraging the decentralized infrastructure, Jackal Protocol offers an additional layer of security for enterprise\ndata storage, reducing the risk of cyber-attacks and data breaches."),(0,n.kt)("h3",{id:"customizable-solutions"},"Customizable solutions"),(0,n.kt)("p",null,"The Jackal Protocol enables developers to build and deploy a wide range of decentralized applications (dApps) that can\ninteract with user data, opening up new possibilities for services and products that prioritize user privacy and\ncontrol."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3e125dc6.4cfeb910.js b/assets/js/3e125dc6.4cfeb910.js deleted file mode 100644 index a44b0e8..0000000 --- a/assets/js/3e125dc6.4cfeb910.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[1148],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>f});var r=a(7294);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 i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var l=r.createContext({}),c=function(e){var t=r.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},d=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},v=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=c(a),v=n,f=u["".concat(l,".").concat(v)]||u[v]||p[v]||i;return a?r.createElement(f,o(o({ref:t},d),{},{components:a})):r.createElement(f,o({ref:t},d))}));function f(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,o=new Array(i);o[0]=v;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:n,o[1]=s;for(var c=2;c{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var r=a(7462),n=(a(7294),a(3905));const i={sidebar_position:3},o="Why Choose Jackal Protocol",s={unversionedId:"overview/why-jackal",id:"overview/why-jackal",title:"Why Choose Jackal Protocol",description:"The Jackal Protocol offers various advantages for individuals, small businesses, and large enterprises seeking secure, decentralized data storage and management solutions.",source:"@site/docs/overview/why-jackal.md",sourceDirName:"overview",slug:"/overview/why-jackal",permalink:"/docs/overview/why-jackal",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/overview/why-jackal.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"What Is The JKL Token?",permalink:"/docs/overview/jkl"},next:{title:"Keplr Wallet",permalink:"/docs/using-jackal/wallet/keplr"}},l={},c=[{value:"Individuals",id:"individuals",level:2},{value:"Enhanced data privacy and security",id:"enhanced-data-privacy-and-security",level:3},{value:"Self-custodial storage",id:"self-custodial-storage",level:3},{value:"On-chain permissions",id:"on-chain-permissions",level:3},{value:"Small Businesses",id:"small-businesses",level:2},{value:"Cost-effective storage",id:"cost-effective-storage",level:3},{value:"Scalability",id:"scalability",level:3},{value:"Simplified compliance",id:"simplified-compliance",level:3},{value:"Large Enterprises",id:"large-enterprises",level:2},{value:"Improved data governance",id:"improved-data-governance",level:3},{value:"Enhanced security",id:"enhanced-security",level:3},{value:"Customizable solutions",id:"customizable-solutions",level:3}],d={toc:c},u="wrapper";function p(e){let{components:t,...a}=e;return(0,n.kt)(u,(0,r.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"why-choose-jackal-protocol"},"Why Choose Jackal Protocol"),(0,n.kt)("p",null,"The Jackal Protocol offers various advantages for individuals, small businesses, and large enterprises seeking secure, decentralized data storage and management solutions."),(0,n.kt)("h2",{id:"individuals"},"Individuals"),(0,n.kt)("p",null,"Individuals choose the Jackal Protocol for several reasons:"),(0,n.kt)("h3",{id:"enhanced-data-privacy-and-security"},"Enhanced data privacy and security"),(0,n.kt)("p",null,"The decentralized nature of the Jackal Protocol ensures that your data is stored across multiple nodes, reducing the risk of data breaches and unauthorized access."),(0,n.kt)("h3",{id:"self-custodial-storage"},"Self-custodial storage"),(0,n.kt)("p",null,"The Jackal Protocol allows individuals to retain full control over their data, ensuring that no third party, not even the Jackal team, can access or view it without the user's consent."),(0,n.kt)("h3",{id:"on-chain-permissions"},"On-chain permissions"),(0,n.kt)("p",null,"The transparent and secure permissions system enables users to manage access to their data, granting, revoking, or modifying permissions as needed."),(0,n.kt)("h2",{id:"small-businesses"},"Small Businesses"),(0,n.kt)("p",null,"Small businesses benefit from the Jackal Protocol in various ways:"),(0,n.kt)("h3",{id:"cost-effective-storage"},"Cost-effective storage"),(0,n.kt)("p",null,"With the Jackal Protocol's decentralized storage model, businesses can benefit from competitive pricing, making it more affordable than traditional centralized storage solutions."),(0,n.kt)("h3",{id:"scalability"},"Scalability"),(0,n.kt)("p",null,"The Jackal Protocol is built to scale with your business, ensuring that your data storage capacity can grow as your organization expands."),(0,n.kt)("h3",{id:"simplified-compliance"},"Simplified compliance"),(0,n.kt)("p",null,"Jackal Protocol's immutable records of data access and modification make it easier to meet industry-specific regulatory requirements and simplify auditing processes."),(0,n.kt)("h2",{id:"large-enterprises"},"Large Enterprises"),(0,n.kt)("p",null,"Large enterprises can leverage the Jackal Protocol for:"),(0,n.kt)("h3",{id:"improved-data-governance"},"Improved data governance"),(0,n.kt)("p",null,"The on-chain permissions system allows for transparent and secure management of data access, ensuring that sensitive information remains protected and accessible only to authorized personnel."),(0,n.kt)("h3",{id:"enhanced-security"},"Enhanced security"),(0,n.kt)("p",null,"By leveraging the decentralized infrastructure, Jackal Protocol offers an additional layer of security for enterprise data storage, reducing the risk of cyber-attacks and data breaches."),(0,n.kt)("h3",{id:"customizable-solutions"},"Customizable solutions"),(0,n.kt)("p",null,"The Jackal Protocol enables developers to build and deploy a wide range of decentralized applications (dApps) that can interact with user data, opening up new possibilities for services and products that prioritize user privacy and control."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5402824b.4a587681.js b/assets/js/5402824b.4a587681.js new file mode 100644 index 0000000..958dd60 --- /dev/null +++ b/assets/js/5402824b.4a587681.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[1078],{3905:(e,t,a)=>{a.d(t,{Zo:()=>f,kt:()=>b});var n=a(7294);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 o(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 c=n.createContext({}),s=function(e){var t=n.useContext(c),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},f=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,i=e.originalType,c=e.parentName,f=l(e,["components","mdxType","originalType","parentName"]),p=s(a),k=r,b=p["".concat(c,".").concat(k)]||p[k]||u[k]||i;return a?n.createElement(b,o(o({ref:t},f),{},{components:a})):n.createElement(b,o({ref:t},f))}));function b(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=a.length,o=new Array(i);o[0]=k;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[p]="string"==typeof e?e:r,o[1]=l;for(var s=2;s{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var n=a(7462),r=(a(7294),a(3905));const i={sidebar_position:2},o="Jackal Labs Links",l={unversionedId:"official-links/jackal-labs",id:"official-links/jackal-labs",title:"Jackal Labs Links",description:"Here are the official website links for Jackal Labs. Please use and bookmark these links to reduce the likelihood of",source:"@site/docs/official-links/jackal-labs.md",sourceDirName:"official-links",slug:"/official-links/jackal-labs",permalink:"/docs/official-links/jackal-labs",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/official-links/jackal-labs.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Jackal Foundation Links",permalink:"/docs/official-links/jackal-foundation"},next:{title:"Grants and Funding",permalink:"/docs/ecosystem/grants-funding"}},c={},s=[{value:"Jackal Labs",id:"jackal-labs",level:2}],f={toc:s},p="wrapper";function u(e){let{components:t,...a}=e;return(0,r.kt)(p,(0,n.Z)({},f,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"jackal-labs-links"},"Jackal Labs Links"),(0,r.kt)("p",null,"Here are the official website links for Jackal Labs. Please use and bookmark these links to reduce the likelihood of\ncyber phishing threats."),(0,r.kt)("h2",{id:"jackal-labs"},"Jackal Labs"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://twitter.com/Jackal_Labs"},"Jackal Labs Twitter")),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://www.jackallabs.io/"},"Website")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5402824b.c38ae910.js b/assets/js/5402824b.c38ae910.js deleted file mode 100644 index 2c41ed4..0000000 --- a/assets/js/5402824b.c38ae910.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[1078],{3905:(e,t,a)=>{a.d(t,{Zo:()=>f,kt:()=>b});var r=a(7294);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 i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var c=r.createContext({}),s=function(e){var t=r.useContext(c),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},f=function(e){var t=s(e.components);return r.createElement(c.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},k=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,c=e.parentName,f=l(e,["components","mdxType","originalType","parentName"]),p=s(a),k=n,b=p["".concat(c,".").concat(k)]||p[k]||u[k]||i;return a?r.createElement(b,o(o({ref:t},f),{},{components:a})):r.createElement(b,o({ref:t},f))}));function b(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,o=new Array(i);o[0]=k;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[p]="string"==typeof e?e:n,o[1]=l;for(var s=2;s{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var r=a(7462),n=(a(7294),a(3905));const i={sidebar_position:2},o="Jackal Labs Links",l={unversionedId:"official-links/jackal-labs",id:"official-links/jackal-labs",title:"Jackal Labs Links",description:"Here are the official website links for Jackal Labs. Please use and bookmark these links to reduce the likelihood of cyber phishing threats.",source:"@site/docs/official-links/jackal-labs.md",sourceDirName:"official-links",slug:"/official-links/jackal-labs",permalink:"/docs/official-links/jackal-labs",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/official-links/jackal-labs.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Jackal Foundation Links",permalink:"/docs/official-links/jackal-foundation"},next:{title:"Grants and Funding",permalink:"/docs/ecosystem/grants-funding"}},c={},s=[{value:"Jackal Labs",id:"jackal-labs",level:2}],f={toc:s},p="wrapper";function u(e){let{components:t,...a}=e;return(0,n.kt)(p,(0,r.Z)({},f,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"jackal-labs-links"},"Jackal Labs Links"),(0,n.kt)("p",null,"Here are the official website links for Jackal Labs. Please use and bookmark these links to reduce the likelihood of cyber phishing threats."),(0,n.kt)("h2",{id:"jackal-labs"},"Jackal Labs"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://twitter.com/Jackal_Labs"},"Jackal Labs Twitter")),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://www.jackallabs.io/"},"Website")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5a6f97fe.2b5dfa6c.js b/assets/js/5a6f97fe.2b5dfa6c.js deleted file mode 100644 index 7f146ac..0000000 --- a/assets/js/5a6f97fe.2b5dfa6c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[5275],{3905:(e,a,t)=>{t.d(a,{Zo:()=>d,kt:()=>m});var n=t(7294);function o(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function i(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function l(e){for(var a=1;a=0||(o[t]=e[t]);return o}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=n.createContext({}),c=function(e){var a=n.useContext(s),t=a;return e&&(t="function"==typeof e?e(a):l(l({},a),e)),t},d=function(e){var a=c(e.components);return n.createElement(s.Provider,{value:a},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},k=n.forwardRef((function(e,a){var t=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,d=r(e,["components","mdxType","originalType","parentName"]),u=c(t),k=o,m=u["".concat(s,".").concat(k)]||u[k]||p[k]||i;return t?n.createElement(m,l(l({ref:a},d),{},{components:t})):n.createElement(m,l({ref:a},d))}));function m(e,a){var t=arguments,o=a&&a.mdxType;if("string"==typeof e||o){var i=t.length,l=new Array(i);l[0]=k;var r={};for(var s in a)hasOwnProperty.call(a,s)&&(r[s]=a[s]);r.originalType=e,r[u]="string"==typeof e?e:o,l[1]=r;for(var c=2;c{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>l,default:()=>p,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var n=t(7462),o=(t(7294),t(3905));const i={sidebar_position:4},l="Jackal Dashboard Guide",r={unversionedId:"using-jackal/dashboard",id:"using-jackal/dashboard",title:"Jackal Dashboard Guide",description:"The Jackal Dashboard is your one-stop destination for interacting with the Jackal Protocol and Cosmos ecosystem. This guide will walk you through the various features and capabilities available on the Jackal Dashboard.",source:"@site/docs/using-jackal/dashboard.md",sourceDirName:"using-jackal",slug:"/using-jackal/dashboard",permalink:"/docs/using-jackal/dashboard",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/using-jackal/dashboard.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"How to Delegate JKL Tokens to a Validator",permalink:"/docs/using-jackal/delegate"},next:{title:"Join the Community!",permalink:"/docs/contributors/join"}},s={},c=[{value:"1. File Management",id:"1-file-management",level:2},{value:"Uploading Files",id:"uploading-files",level:3},{value:"Downloading Files",id:"downloading-files",level:3},{value:"Sharing Files (Coming Soon)",id:"sharing-files-coming-soon",level:3},{value:"2. Buy Tokens",id:"2-buy-tokens",level:2},{value:"3. Name Service",id:"3-name-service",level:2},{value:"Registering RNS Names",id:"registering-rns-names",level:3},{value:"Managing RNS Names",id:"managing-rns-names",level:3},{value:"4. Name Service Marketplace",id:"4-name-service-marketplace",level:2},{value:"5. Hosting Static Websites (Coming Soon)",id:"5-hosting-static-websites-coming-soon",level:2},{value:"6. Governance Participation",id:"6-governance-participation",level:2},{value:"7. Delegating Tokens to Validators",id:"7-delegating-tokens-to-validators",level:2}],d={toc:c},u="wrapper";function p(e){let{components:a,...t}=e;return(0,o.kt)(u,(0,n.Z)({},d,t,{components:a,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"jackal-dashboard-guide"},"Jackal Dashboard Guide"),(0,o.kt)("p",null,"The Jackal Dashboard is your one-stop destination for interacting with the Jackal Protocol and Cosmos ecosystem. This guide will walk you through the various features and capabilities available on the Jackal Dashboard."),(0,o.kt)("h2",{id:"1-file-management"},"1. File Management"),(0,o.kt)("p",null,"The Jackal Dashboard allows users to upload, download, delete, and share files securely and privately."),(0,o.kt)("h3",{id:"uploading-files"},"Uploading Files"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},'Navigate to the "Storage" tab on navigation bar of the Jackal Dashboard.'),(0,o.kt)("li",{parentName:"ol"},'Click "Browse Files" and select the file(s) you want to upload. Users can also drag and drop files into the dashboard directly.'),(0,o.kt)("li",{parentName:"ol"},'Click "Encrypt & Upload" on the right side of the screen. '),(0,o.kt)("li",{parentName:"ol"},"Sign the transaction prompt for your Keplr wallet. ")),(0,o.kt)("h3",{id:"downloading-files"},"Downloading Files"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},'In the "Storage" tab, locate the file you want to download.'),(0,o.kt)("li",{parentName:"ol"},'Click the "..." button relative to the file you wish to download.'),(0,o.kt)("li",{parentName:"ol"},'Click "Download". '),(0,o.kt)("li",{parentName:"ol"},"The file will be downloaded to your local device.")),(0,o.kt)("h3",{id:"sharing-files-coming-soon"},"Sharing Files (Coming Soon)"),(0,o.kt)("h2",{id:"2-buy-tokens"},"2. Buy Tokens"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},'Navigate to the "Buy Tokens" tab on the Jackal Dashboard.'),(0,o.kt)("li",{parentName:"ol"},"You will be re-directed to the Osmosis Decentralized Exchange in another tab. ")),(0,o.kt)("h2",{id:"3-name-service"},"3. Name Service"),(0,o.kt)("p",null,"The Jackal Dashboard enables users to register and manage RNS names."),(0,o.kt)("h3",{id:"registering-rns-names"},"Registering RNS Names"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},'Navigate to the "Name Service" tab on the Jackal Dashboard.'),(0,o.kt)("li",{parentName:"ol"},'Click "Register" '),(0,o.kt)("li",{parentName:"ol"},"Enter your desired name and how many years you wish to keep it for. "),(0,o.kt)("li",{parentName:"ol"},"Confirm the transaction in your connected wallet.")),(0,o.kt)("h3",{id:"managing-rns-names"},"Managing RNS Names"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},'In the "Name Service" tab, view your owned RNS addresses.'),(0,o.kt)("li",{parentName:"ol"},'Click on a "..." next to the name you wish to manage. ')),(0,o.kt)("h2",{id:"4-name-service-marketplace"},"4. Name Service Marketplace"),(0,o.kt)("p",null,"The RNS Marketplace allows users to buy and sell RNS names."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},'Navigate to the "RNS Marketplace" tab on the Jackal Dashboard.'),(0,o.kt)("li",{parentName:"ol"},"Browse available RNS names or search for a specific name."),(0,o.kt)("li",{parentName:"ol"},'Click "Buy" to purchase an RNS name or "Sell" to list one of your RNS names for sale.')),(0,o.kt)("h2",{id:"5-hosting-static-websites-coming-soon"},"5. Hosting Static Websites (Coming Soon)"),(0,o.kt)("h2",{id:"6-governance-participation"},"6. Governance Participation"),(0,o.kt)("p",null,"The Jackal Dashboard provides an interface to participate in on-chain governance."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},'Navigate to the "Governance" tab on the Jackal Dashboard.'),(0,o.kt)("li",{parentName:"ol"},"View active proposals and click on a proposal to review its details."),(0,o.kt)("li",{parentName:"ol"},'Cast your vote by clicking "Vote" and selecting your preferred option and signing the transaction.')),(0,o.kt)("h2",{id:"7-delegating-tokens-to-validators"},"7. Delegating Tokens to Validators"),(0,o.kt)("p",null,"The Jackal Dashboard enables users to delegate tokens to validators, securing the network and earning rewards."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},'Navigate to the "Validators" tab on the Jackal Dashboard.'),(0,o.kt)("li",{parentName:"ol"},"Browse the list of active validators and select one."),(0,o.kt)("li",{parentName:"ol"},'Click "Delegate" and enter the amount of tokens you want to delegate.'),(0,o.kt)("li",{parentName:"ol"},"Confirm the transaction in your connected wallet.")),(0,o.kt)("p",null,"Stay tuned for more exciting features and improvements coming to the Jackal Dashboard!"))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5a6f97fe.717599dd.js b/assets/js/5a6f97fe.717599dd.js new file mode 100644 index 0000000..91e6e2b --- /dev/null +++ b/assets/js/5a6f97fe.717599dd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[5275],{3905:(e,a,t)=>{t.d(a,{Zo:()=>d,kt:()=>k});var n=t(7294);function o(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function i(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function r(e){for(var a=1;a=0||(o[t]=e[t]);return o}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=n.createContext({}),c=function(e){var a=n.useContext(s),t=a;return e&&(t="function"==typeof e?e(a):r(r({},a),e)),t},d=function(e){var a=c(e.components);return n.createElement(s.Provider,{value:a},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},m=n.forwardRef((function(e,a){var t=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=c(t),m=o,k=u["".concat(s,".").concat(m)]||u[m]||p[m]||i;return t?n.createElement(k,r(r({ref:a},d),{},{components:t})):n.createElement(k,r({ref:a},d))}));function k(e,a){var t=arguments,o=a&&a.mdxType;if("string"==typeof e||o){var i=t.length,r=new Array(i);r[0]=m;var l={};for(var s in a)hasOwnProperty.call(a,s)&&(l[s]=a[s]);l.originalType=e,l[u]="string"==typeof e?e:o,r[1]=l;for(var c=2;c{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var n=t(7462),o=(t(7294),t(3905));const i={sidebar_position:4},r="Jackal Dashboard Guide",l={unversionedId:"using-jackal/dashboard",id:"using-jackal/dashboard",title:"Jackal Dashboard Guide",description:"The Jackal Dashboard is your one-stop destination for interacting with the Jackal Protocol and Cosmos ecosystem. This",source:"@site/docs/using-jackal/dashboard.md",sourceDirName:"using-jackal",slug:"/using-jackal/dashboard",permalink:"/docs/using-jackal/dashboard",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/using-jackal/dashboard.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"How to Delegate JKL Tokens to a Validator",permalink:"/docs/using-jackal/delegate"},next:{title:"Join the Community!",permalink:"/docs/contributors/join"}},s={},c=[{value:"1. File Management",id:"1-file-management",level:2},{value:"Uploading Files",id:"uploading-files",level:3},{value:"Downloading Files",id:"downloading-files",level:3},{value:"Sharing Files (Coming Soon)",id:"sharing-files-coming-soon",level:3},{value:"2. Buy Tokens",id:"2-buy-tokens",level:2},{value:"3. Name Service",id:"3-name-service",level:2},{value:"Registering RNS Names",id:"registering-rns-names",level:3},{value:"Managing RNS Names",id:"managing-rns-names",level:3},{value:"4. Name Service Marketplace",id:"4-name-service-marketplace",level:2},{value:"5. Hosting Static Websites (Coming Soon)",id:"5-hosting-static-websites-coming-soon",level:2},{value:"6. Governance Participation",id:"6-governance-participation",level:2},{value:"7. Delegating Tokens to Validators",id:"7-delegating-tokens-to-validators",level:2}],d={toc:c},u="wrapper";function p(e){let{components:a,...t}=e;return(0,o.kt)(u,(0,n.Z)({},d,t,{components:a,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"jackal-dashboard-guide"},"Jackal Dashboard Guide"),(0,o.kt)("p",null,"The Jackal Dashboard is your one-stop destination for interacting with the Jackal Protocol and Cosmos ecosystem. This\nguide will walk you through the various features and capabilities available on the Jackal Dashboard."),(0,o.kt)("h2",{id:"1-file-management"},"1. File Management"),(0,o.kt)("p",null,"The Jackal Dashboard allows users to upload, download, delete, and share files securely and privately."),(0,o.kt)("h3",{id:"uploading-files"},"Uploading Files"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},'Navigate to the "Storage" tab on navigation bar of the Jackal Dashboard.'),(0,o.kt)("li",{parentName:"ol"},'Click "Browse Files" and select the file(s) you want to upload. Users can also drag and drop files into the dashboard\ndirectly.'),(0,o.kt)("li",{parentName:"ol"},'Click "Encrypt & Upload" on the right side of the screen.'),(0,o.kt)("li",{parentName:"ol"},"Sign the transaction prompt for your Keplr wallet.")),(0,o.kt)("h3",{id:"downloading-files"},"Downloading Files"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},'In the "Storage" tab, locate the file you want to download.'),(0,o.kt)("li",{parentName:"ol"},'Click the "..." button relative to the file you wish to download.'),(0,o.kt)("li",{parentName:"ol"},'Click "Download".'),(0,o.kt)("li",{parentName:"ol"},"The file will be downloaded to your local device.")),(0,o.kt)("h3",{id:"sharing-files-coming-soon"},"Sharing Files (Coming Soon)"),(0,o.kt)("h2",{id:"2-buy-tokens"},"2. Buy Tokens"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},'Navigate to the "Buy Tokens" tab on the Jackal Dashboard.'),(0,o.kt)("li",{parentName:"ol"},"You will be re-directed to the Osmosis Decentralized Exchange in another tab.")),(0,o.kt)("h2",{id:"3-name-service"},"3. Name Service"),(0,o.kt)("p",null,"The Jackal Dashboard enables users to register and manage RNS names."),(0,o.kt)("h3",{id:"registering-rns-names"},"Registering RNS Names"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},'Navigate to the "Name Service" tab on the Jackal Dashboard.'),(0,o.kt)("li",{parentName:"ol"},'Click "Register"'),(0,o.kt)("li",{parentName:"ol"},"Enter your desired name and how many years you wish to keep it for."),(0,o.kt)("li",{parentName:"ol"},"Confirm the transaction in your connected wallet.")),(0,o.kt)("h3",{id:"managing-rns-names"},"Managing RNS Names"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},'In the "Name Service" tab, view your owned RNS addresses.'),(0,o.kt)("li",{parentName:"ol"},'Click on a "..." next to the name you wish to manage.')),(0,o.kt)("h2",{id:"4-name-service-marketplace"},"4. Name Service Marketplace"),(0,o.kt)("p",null,"The RNS Marketplace allows users to buy and sell RNS names."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},'Navigate to the "RNS Marketplace" tab on the Jackal Dashboard.'),(0,o.kt)("li",{parentName:"ol"},"Browse available RNS names or search for a specific name."),(0,o.kt)("li",{parentName:"ol"},'Click "Buy" to purchase an RNS name or "Sell" to list one of your RNS names for sale.')),(0,o.kt)("h2",{id:"5-hosting-static-websites-coming-soon"},"5. Hosting Static Websites (Coming Soon)"),(0,o.kt)("h2",{id:"6-governance-participation"},"6. Governance Participation"),(0,o.kt)("p",null,"The Jackal Dashboard provides an interface to participate in on-chain governance."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},'Navigate to the "Governance" tab on the Jackal Dashboard.'),(0,o.kt)("li",{parentName:"ol"},"View active proposals and click on a proposal to review its details."),(0,o.kt)("li",{parentName:"ol"},'Cast your vote by clicking "Vote" and selecting your preferred option and signing the transaction.')),(0,o.kt)("h2",{id:"7-delegating-tokens-to-validators"},"7. Delegating Tokens to Validators"),(0,o.kt)("p",null,"The Jackal Dashboard enables users to delegate tokens to validators, securing the network and earning rewards."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},'Navigate to the "Validators" tab on the Jackal Dashboard.'),(0,o.kt)("li",{parentName:"ol"},"Browse the list of active validators and select one."),(0,o.kt)("li",{parentName:"ol"},'Click "Delegate" and enter the amount of tokens you want to delegate.'),(0,o.kt)("li",{parentName:"ol"},"Confirm the transaction in your connected wallet.")),(0,o.kt)("p",null,"Stay tuned for more exciting features and improvements coming to the Jackal Dashboard!"))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/65b97a36.7909af7d.js b/assets/js/65b97a36.7909af7d.js deleted file mode 100644 index 8e7672e..0000000 --- a/assets/js/65b97a36.7909af7d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[1770],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>h});var r=a(7294);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 o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=r.createContext({}),l=function(e){var t=r.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},d=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,s=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),p=l(a),m=n,h=p["".concat(s,".").concat(m)]||p[m]||u[m]||o;return a?r.createElement(h,i(i({ref:t},d),{},{components:a})):r.createElement(h,i({ref:t},d))}));function h(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,i=new Array(o);i[0]=m;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c[p]="string"==typeof e?e:n,i[1]=c;for(var l=2;l{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var r=a(7462),n=(a(7294),a(3905));const o={sidebar_position:1},i="Discover the Jackal Protocol",c={unversionedId:"overview/jackal-tldr",id:"overview/jackal-tldr",title:"Discover the Jackal Protocol",description:"The Jackal Protocol provides a decentralized infrastructure for secure and scalable data storage, enabling individuals, developers, and enterprises to protect their data privacy and improve their cybersecurity posture. It offers a platform for building decentralized applications, managing access control and ownership, transferring encrypted data, and maintaining self-custodial control over data, all without relying on centralized storage providers or intermediaries.",source:"@site/docs/overview/jackal-tldr.md",sourceDirName:"overview",slug:"/overview/jackal-tldr",permalink:"/docs/overview/jackal-tldr",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/overview/jackal-tldr.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Welcome to Jackal Wiki",permalink:"/docs/intro"},next:{title:"What Is The JKL Token?",permalink:"/docs/overview/jkl"}},s={},l=[],d={toc:l},p="wrapper";function u(e){let{components:t,...a}=e;return(0,n.kt)(p,(0,r.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"discover-the-jackal-protocol"},"Discover the Jackal Protocol"),(0,n.kt)("p",null,"The Jackal Protocol provides a decentralized infrastructure for secure and scalable data storage, enabling individuals, developers, and enterprises to protect their data privacy and improve their cybersecurity posture. It offers a platform for building decentralized applications, managing access control and ownership, transferring encrypted data, and maintaining self-custodial control over data, all without relying on centralized storage providers or intermediaries."),(0,n.kt)("p",null,"Jackal Protocol stands apart, utilizing both validators and storage providers, enabling developers to create decentralized applications with seamless access to all ",(0,n.kt)("a",{parentName:"p",href:"/docs/protocol/modules/module-overview"},"Jackal Protocol Modules"),", including storage contracts and file structures. Customize data ownership, share data with other Jackal users or smart contracts, and transfer encrypted data of any size, all without centralized storage providers or middleware. Your data remains self-custodial, ensuring that no one\u2014not even the Jackal team\u2014can access or view it."),(0,n.kt)("p",null,"Comprising seven interoperable ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain/blob/master/x/README.md"},"modules")," \u2014 ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain/blob/master/x/jklmint/README.md"},"jklMint"),", ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain/blob/master/x/lp/README.md"},"lp"),", ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain/blob/master/x/rns/README.md"},"rns"),", ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain/blob/master/x/wasm/README.md"},"wasm"),", ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain/blob/master/x/storage/README.md"},"storage"),", ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain/blob/master/x/filetree/README.md"},"filetree"),", and ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain/blob/master/x/dsig/README.md"},"dsig")," \u2014 the Jackal Protocol allows for the development of secure, scalable, and truly decentralized applications ."),(0,n.kt)("p",null,"The Jackal Protocol is ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain"},"open source")," and community-driven, fostering a transparent and trustless ecosystem. Dive into this wiki to access comprehensive information on the protocol, usage, infrastructure, and opportunities."),(0,n.kt)("p",null,"Maintained by the dedicated ",(0,n.kt)("a",{parentName:"p",href:"/docs/official-links/jackal-labs"},"Jackal Labs")," and ",(0,n.kt)("a",{parentName:"p",href:"/docs/contributors/foundation"},"Jackal Foundation")," teams, the Jackal Wiki is constantly updated to ensure accuracy. Should you discover anything out-of-date, don't hesitate to reach out, as we strive to keep our documentation impeccable for the community."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/65b97a36.a013b9ec.js b/assets/js/65b97a36.a013b9ec.js new file mode 100644 index 0000000..c8e1d47 --- /dev/null +++ b/assets/js/65b97a36.a013b9ec.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[1770],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>h});var r=a(7294);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 o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=r.createContext({}),l=function(e){var t=r.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},p=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),d=l(a),m=n,h=d["".concat(s,".").concat(m)]||d[m]||u[m]||o;return a?r.createElement(h,i(i({ref:t},p),{},{components:a})):r.createElement(h,i({ref:t},p))}));function h(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,i=new Array(o);i[0]=m;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c[d]="string"==typeof e?e:n,i[1]=c;for(var l=2;l{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var r=a(7462),n=(a(7294),a(3905));const o={sidebar_position:1},i="Discover the Jackal Protocol",c={unversionedId:"overview/jackal-tldr",id:"overview/jackal-tldr",title:"Discover the Jackal Protocol",description:"The Jackal Protocol provides a decentralized infrastructure for secure and scalable data storage, enabling individuals,",source:"@site/docs/overview/jackal-tldr.md",sourceDirName:"overview",slug:"/overview/jackal-tldr",permalink:"/docs/overview/jackal-tldr",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/overview/jackal-tldr.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Welcome to Jackal Wiki",permalink:"/docs/intro"},next:{title:"What Is The JKL Token?",permalink:"/docs/overview/jkl"}},s={},l=[],p={toc:l},d="wrapper";function u(e){let{components:t,...a}=e;return(0,n.kt)(d,(0,r.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"discover-the-jackal-protocol"},"Discover the Jackal Protocol"),(0,n.kt)("p",null,"The Jackal Protocol provides a decentralized infrastructure for secure and scalable data storage, enabling individuals,\ndevelopers, and enterprises to protect their data privacy and improve their cybersecurity posture. It offers a platform\nfor building decentralized applications, managing access control and ownership, transferring encrypted data, and\nmaintaining self-custodial control over data, all without relying on centralized storage providers or intermediaries."),(0,n.kt)("p",null,"Jackal Protocol stands apart, utilizing both validators and storage providers, enabling developers to create\ndecentralized applications with seamless access to\nall ",(0,n.kt)("a",{parentName:"p",href:"/docs/protocol/modules/module-overview"},"Jackal Protocol Modules"),", including storage contracts and file\nstructures. Customize data ownership, share data with other Jackal users or smart contracts, and transfer encrypted data\nof any size, all without centralized storage providers or middleware. Your data remains self-custodial, ensuring that no\none\u2014not even the Jackal team\u2014can access or view it."),(0,n.kt)("p",null,"Comprising seven\ninteroperable ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain/blob/master/x/README.md"},"modules")," \u2014 ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain/blob/master/x/jklmint/README.md"},"jklMint"),", ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain/blob/master/x/lp/README.md"},"lp"),", ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain/blob/master/x/rns/README.md"},"rns"),", ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain/blob/master/x/wasm/README.md"},"wasm"),", ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain/blob/master/x/storage/README.md"},"storage"),", ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain/blob/master/x/filetree/README.md"},"filetree"),",\nand ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain/blob/master/x/dsig/README.md"},"dsig")," \u2014 the Jackal Protocol allows for the\ndevelopment of secure, scalable, and truly decentralized applications ."),(0,n.kt)("p",null,"The Jackal Protocol is ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain"},"open source")," and community-driven, fostering a\ntransparent and trustless ecosystem. Dive into this wiki to access comprehensive information on the protocol, usage,\ninfrastructure, and opportunities."),(0,n.kt)("p",null,"Maintained by the dedicated ",(0,n.kt)("a",{parentName:"p",href:"/docs/official-links/jackal-labs"},"Jackal Labs"),"\nand ",(0,n.kt)("a",{parentName:"p",href:"/docs/contributors/foundation"},"Jackal Foundation")," teams, the Jackal Wiki is constantly updated to ensure\naccuracy. Should you discover anything out-of-date, don't hesitate to reach out, as we strive to keep our documentation\nimpeccable for the community."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7b9432de.17b3daef.js b/assets/js/7b9432de.17b3daef.js deleted file mode 100644 index a776599..0000000 --- a/assets/js/7b9432de.17b3daef.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[7275],{3905:(e,t,o)=>{o.d(t,{Zo:()=>m,kt:()=>f});var r=o(7294);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 a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function c(e){for(var t=1;t=0||(n[o]=e[o]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var l=r.createContext({}),s=function(e){var t=r.useContext(l),o=t;return e&&(o="function"==typeof e?e(t):c(c({},t),e)),o},m=function(e){var t=s(e.components);return r.createElement(l.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var o=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),p=s(o),d=n,f=p["".concat(l,".").concat(d)]||p[d]||u[d]||a;return o?r.createElement(f,c(c({ref:t},m),{},{components:o})):r.createElement(f,c({ref:t},m))}));function f(e,t){var o=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=o.length,c=new Array(a);c[0]=d;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[p]="string"==typeof e?e:n,c[1]=i;for(var s=2;s{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var r=o(7462),n=(o(7294),o(3905));const a={sidebar_position:5},c="WASM Module",i={unversionedId:"protocol/modules/wasm",id:"protocol/modules/wasm",title:"WASM Module",description:"The wasm module in the Jackal Protocol incorporates the CosmWasm smart contracting platform, which is designed specifically for the Cosmos Ecosystem. This module provides a secure and efficient environment for executing WebAssembly (WASM) smart contracts on the Jackal Protocol.",source:"@site/docs/protocol/modules/wasm.md",sourceDirName:"protocol/modules",slug:"/protocol/modules/wasm",permalink:"/docs/protocol/modules/wasm",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/protocol/modules/wasm.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Name Service Module",permalink:"/docs/protocol/modules/rns"},next:{title:"Storage Module",permalink:"/docs/protocol/modules/storage"}},l={},s=[{value:"Overview",id:"overview",level:2}],m={toc:s},p="wrapper";function u(e){let{components:t,...o}=e;return(0,n.kt)(p,(0,r.Z)({},m,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"wasm-module"},"WASM Module"),(0,n.kt)("p",null,"The ",(0,n.kt)("inlineCode",{parentName:"p"},"wasm")," module in the Jackal Protocol incorporates the CosmWasm smart contracting platform, which is designed specifically for the Cosmos Ecosystem. This module provides a secure and efficient environment for executing WebAssembly (WASM) smart contracts on the Jackal Protocol."),(0,n.kt)("h2",{id:"overview"},"Overview"),(0,n.kt)("p",null,"The ",(0,n.kt)("inlineCode",{parentName:"p"},"wasm")," module manages the following aspects of the CosmWasm platform:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Smart Contract Deployment"),": Allows developers to deploy smart contracts written in Rust or other languages that compile to WASM."),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Smart Contract Execution"),": Facilitates the execution of smart contract functions on the blockchain."),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Smart Contract Interaction"),": Enables users and other smart contracts to interact with deployed smart contracts.")),(0,n.kt)("p",null,"For a more detailed guide on integrating the wasm module into your application, please refer to the ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain/blob/master/x/README.md"},"Jackal Protocol GitHub"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7b9432de.469181e7.js b/assets/js/7b9432de.469181e7.js new file mode 100644 index 0000000..4c60d9d --- /dev/null +++ b/assets/js/7b9432de.469181e7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[7275],{3905:(e,t,o)=>{o.d(t,{Zo:()=>m,kt:()=>f});var r=o(7294);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 a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function l(e){for(var t=1;t=0||(n[o]=e[o]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var c=r.createContext({}),s=function(e){var t=r.useContext(c),o=t;return e&&(o="function"==typeof e?e(t):l(l({},t),e)),o},m=function(e){var t=s(e.components);return r.createElement(c.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var o=e.components,n=e.mdxType,a=e.originalType,c=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),p=s(o),d=n,f=p["".concat(c,".").concat(d)]||p[d]||u[d]||a;return o?r.createElement(f,l(l({ref:t},m),{},{components:o})):r.createElement(f,l({ref:t},m))}));function f(e,t){var o=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=o.length,l=new Array(a);l[0]=d;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i[p]="string"==typeof e?e:n,l[1]=i;for(var s=2;s{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var r=o(7462),n=(o(7294),o(3905));const a={sidebar_position:5},l="WASM Module",i={unversionedId:"protocol/modules/wasm",id:"protocol/modules/wasm",title:"WASM Module",description:"The wasm module in the Jackal Protocol incorporates the CosmWasm smart contracting platform, which is designed",source:"@site/docs/protocol/modules/wasm.md",sourceDirName:"protocol/modules",slug:"/protocol/modules/wasm",permalink:"/docs/protocol/modules/wasm",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/protocol/modules/wasm.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Name Service Module",permalink:"/docs/protocol/modules/rns"},next:{title:"Storage Module",permalink:"/docs/protocol/modules/storage"}},c={},s=[{value:"Overview",id:"overview",level:2}],m={toc:s},p="wrapper";function u(e){let{components:t,...o}=e;return(0,n.kt)(p,(0,r.Z)({},m,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"wasm-module"},"WASM Module"),(0,n.kt)("p",null,"The ",(0,n.kt)("inlineCode",{parentName:"p"},"wasm")," module in the Jackal Protocol incorporates the CosmWasm smart contracting platform, which is designed\nspecifically for the Cosmos Ecosystem. This module provides a secure and efficient environment for executing\nWebAssembly (WASM) smart contracts on the Jackal Protocol."),(0,n.kt)("h2",{id:"overview"},"Overview"),(0,n.kt)("p",null,"The ",(0,n.kt)("inlineCode",{parentName:"p"},"wasm")," module manages the following aspects of the CosmWasm platform:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Smart Contract Deployment"),": Allows developers to deploy smart contracts written in Rust or other languages that\ncompile to WASM."),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Smart Contract Execution"),": Facilitates the execution of smart contract functions on the blockchain."),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Smart Contract Interaction"),": Enables users and other smart contracts to interact with deployed smart contracts.")),(0,n.kt)("p",null,"For a more detailed guide on integrating the wasm module into your application, please refer to\nthe ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain/blob/master/x/README.md"},"Jackal Protocol GitHub"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7d26c06c.28f5879a.js b/assets/js/7d26c06c.feb8587b.js similarity index 62% rename from assets/js/7d26c06c.28f5879a.js rename to assets/js/7d26c06c.feb8587b.js index 4f1d7ca..c51e29d 100644 --- a/assets/js/7d26c06c.28f5879a.js +++ b/assets/js/7d26c06c.feb8587b.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[1232],{3905:(e,t,o)=>{o.d(t,{Zo:()=>p,kt:()=>k});var r=o(7294);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 a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function i(e){for(var t=1;t=0||(n[o]=e[o]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var l=r.createContext({}),c=function(e){var t=r.useContext(l),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},p=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},v=r.forwardRef((function(e,t){var o=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(o),v=n,k=u["".concat(l,".").concat(v)]||u[v]||d[v]||a;return o?r.createElement(k,i(i({ref:t},p),{},{components:o})):r.createElement(k,i({ref:t},p))}));function k(e,t){var o=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=o.length,i=new Array(a);i[0]=v;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:n,i[1]=s;for(var c=2;c{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var r=o(7462),n=(o(7294),o(3905));const a={sidebar_position:1},i="JKL Token",s={unversionedId:"protocol/tokens",id:"protocol/tokens",title:"JKL Token",description:"Overview",source:"@site/docs/protocol/tokens.md",sourceDirName:"protocol",slug:"/protocol/tokens",permalink:"/docs/protocol/tokens",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/protocol/tokens.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Jackal Proof-of-Persistence Documentation",permalink:"/docs/protocol/p-o-p"},next:{title:"Encryption in Jackal Protocol",permalink:"/docs/protocol/encryption"}},l={},c=[{value:"Overview",id:"overview",level:2},{value:"Use Cases",id:"use-cases",level:2},{value:"dApps",id:"dapps",level:3},{value:"Securing the Network",id:"securing-the-network",level:3},{value:"Transaction Fees",id:"transaction-fees",level:3},{value:"Governance",id:"governance",level:3},{value:"Collateral",id:"collateral",level:3},{value:"Liquidity Provision",id:"liquidity-provision",level:3},{value:"Unique JKL Token Utility for Users and Storage Providers",id:"unique-jkl-token-utility-for-users-and-storage-providers",level:2},{value:"Users",id:"users",level:3},{value:"Storage Providers",id:"storage-providers",level:3}],p={toc:c},u="wrapper";function d(e){let{components:t,...o}=e;return(0,n.kt)(u,(0,r.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"jkl-token"},"JKL Token"),(0,n.kt)("h2",{id:"overview"},"Overview"),(0,n.kt)("p",null,"The JKL token is an inflationary token that powers the Jackal Protocol. It has numerous use cases within the ecosystem, ensuring its utility and importance. In this documentation, we will outline the main use cases of the JKL token and explain its role in the Jackal Protocol ecosystem."),(0,n.kt)("h2",{id:"use-cases"},"Use Cases"),(0,n.kt)("h3",{id:"dapps"},"dApps"),(0,n.kt)("p",null,"Applications built leveraging the Jackal Protocol, such as Jackal Storage and the RNS Marketplace, may choose to include the JKL token to expand its utility."),(0,n.kt)("h3",{id:"securing-the-network"},"Securing the Network"),(0,n.kt)("p",null,"As the Jackal Protocol is a Proof-of-Stake (PoS) Cosmos L1 blockchain, JKL can be delegated to validators to secure the network and earn JKL rewards. Otherwise known as staking or bonded tokens."),(0,n.kt)("h3",{id:"transaction-fees"},"Transaction Fees"),(0,n.kt)("p",null,"Transactions on the Jackal Protocol must be paid for using JKL. As the protocol is PoS, the cost of transactions is inexpensive."),(0,n.kt)("h3",{id:"governance"},"Governance"),(0,n.kt)("p",null,"Staked tokens grant on-chain governance participation within the Jackal Protocol to vote on text, software, spend, and other governance proposals."),(0,n.kt)("h3",{id:"collateral"},"Collateral"),(0,n.kt)("p",null,"The JKL token can act as collateral for validators, storage providers, and other smart contract use cases."),(0,n.kt)("h3",{id:"liquidity-provision"},"Liquidity Provision"),(0,n.kt)("p",null,"JKL can be allocated into a liquidity pool to earn rewards."),(0,n.kt)("h2",{id:"unique-jkl-token-utility-for-users-and-storage-providers"},"Unique JKL Token Utility for Users and Storage Providers"),(0,n.kt)("h3",{id:"users"},"Users"),(0,n.kt)("p",null,"Users seeking storage solutions can leverage JKL tokens to pay for the storage services provided by storage providers within the Jackal Protocol. By utilizing JKL tokens as a medium of exchange, users can access a decentralized, secure, and censorship-resistant storage infrastructure."),(0,n.kt)("h3",{id:"storage-providers"},"Storage Providers"),(0,n.kt)("p",null,"Storage providers are incentivized to offer storage space and maintain a high level of service by earning JKL tokens. By receiving JKL tokens as payment for their services, storage providers can cover the costs of infrastructure, hardware, and bandwidth while potentially profiting from their participation in the ecosystem."))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[1232],{3905:(e,t,o)=>{o.d(t,{Zo:()=>p,kt:()=>k});var r=o(7294);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 a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function i(e){for(var t=1;t=0||(n[o]=e[o]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var l=r.createContext({}),c=function(e){var t=r.useContext(l),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},p=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},v=r.forwardRef((function(e,t){var o=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(o),v=n,k=u["".concat(l,".").concat(v)]||u[v]||d[v]||a;return o?r.createElement(k,i(i({ref:t},p),{},{components:o})):r.createElement(k,i({ref:t},p))}));function k(e,t){var o=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=o.length,i=new Array(a);i[0]=v;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:n,i[1]=s;for(var c=2;c{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var r=o(7462),n=(o(7294),o(3905));const a={sidebar_position:1},i="JKL Token",s={unversionedId:"protocol/tokens",id:"protocol/tokens",title:"JKL Token",description:"Overview",source:"@site/docs/protocol/tokens.md",sourceDirName:"protocol",slug:"/protocol/tokens",permalink:"/docs/protocol/tokens",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/protocol/tokens.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Jackal Proof-of-Persistence Documentation",permalink:"/docs/protocol/p-o-p"},next:{title:"Encryption in Jackal Protocol",permalink:"/docs/protocol/encryption"}},l={},c=[{value:"Overview",id:"overview",level:2},{value:"Use Cases",id:"use-cases",level:2},{value:"dApps",id:"dapps",level:3},{value:"Securing the Network",id:"securing-the-network",level:3},{value:"Transaction Fees",id:"transaction-fees",level:3},{value:"Governance",id:"governance",level:3},{value:"Collateral",id:"collateral",level:3},{value:"Liquidity Provision",id:"liquidity-provision",level:3},{value:"Unique JKL Token Utility for Users and Storage Providers",id:"unique-jkl-token-utility-for-users-and-storage-providers",level:2},{value:"Users",id:"users",level:3},{value:"Storage Providers",id:"storage-providers",level:3}],p={toc:c},u="wrapper";function d(e){let{components:t,...o}=e;return(0,n.kt)(u,(0,r.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"jkl-token"},"JKL Token"),(0,n.kt)("h2",{id:"overview"},"Overview"),(0,n.kt)("p",null,"The JKL token is an inflationary token that powers the Jackal Protocol. It has numerous use cases within the ecosystem,\nensuring its utility and importance. In this documentation, we will outline the main use cases of the JKL token and\nexplain its role in the Jackal Protocol ecosystem."),(0,n.kt)("h2",{id:"use-cases"},"Use Cases"),(0,n.kt)("h3",{id:"dapps"},"dApps"),(0,n.kt)("p",null,"Applications built leveraging the Jackal Protocol, such as Jackal Storage and the RNS Marketplace, may choose to include\nthe JKL token to expand its utility."),(0,n.kt)("h3",{id:"securing-the-network"},"Securing the Network"),(0,n.kt)("p",null,"As the Jackal Protocol is a Proof-of-Stake (PoS) Cosmos L1 blockchain, JKL can be delegated to validators to secure the\nnetwork and earn JKL rewards. Otherwise known as staking or bonded tokens."),(0,n.kt)("h3",{id:"transaction-fees"},"Transaction Fees"),(0,n.kt)("p",null,"Transactions on the Jackal Protocol must be paid for using JKL. As the protocol is PoS, the cost of transactions is\ninexpensive."),(0,n.kt)("h3",{id:"governance"},"Governance"),(0,n.kt)("p",null,"Staked tokens grant on-chain governance participation within the Jackal Protocol to vote on text, software, spend, and\nother governance proposals."),(0,n.kt)("h3",{id:"collateral"},"Collateral"),(0,n.kt)("p",null,"The JKL token can act as collateral for validators, storage providers, and other smart contract use cases."),(0,n.kt)("h3",{id:"liquidity-provision"},"Liquidity Provision"),(0,n.kt)("p",null,"JKL can be allocated into a liquidity pool to earn rewards."),(0,n.kt)("h2",{id:"unique-jkl-token-utility-for-users-and-storage-providers"},"Unique JKL Token Utility for Users and Storage Providers"),(0,n.kt)("h3",{id:"users"},"Users"),(0,n.kt)("p",null,"Users seeking storage solutions can leverage JKL tokens to pay for the storage services provided by storage providers\nwithin the Jackal Protocol. By utilizing JKL tokens as a medium of exchange, users can access a decentralized, secure,\nand censorship-resistant storage infrastructure."),(0,n.kt)("h3",{id:"storage-providers"},"Storage Providers"),(0,n.kt)("p",null,"Storage providers are incentivized to offer storage space and maintain a high level of service by earning JKL tokens. By\nreceiving JKL tokens as payment for their services, storage providers can cover the costs of infrastructure, hardware,\nand bandwidth while potentially profiting from their participation in the ecosystem."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7f9142bb.452aa69b.js b/assets/js/7f9142bb.452aa69b.js deleted file mode 100644 index 2896b6d..0000000 --- a/assets/js/7f9142bb.452aa69b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[1314],{3905:(e,r,t)=>{t.d(r,{Zo:()=>p,kt:()=>m});var n=t(7294);function o(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function i(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function a(e){for(var r=1;r=0||(o[t]=e[t]);return o}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=n.createContext({}),c=function(e){var r=n.useContext(l),t=r;return e&&(t="function"==typeof e?e(r):a(a({},r),e)),t},p=function(e){var r=c(e.components);return n.createElement(l.Provider,{value:r},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},f=n.forwardRef((function(e,r){var t=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=c(t),f=o,m=d["".concat(l,".").concat(f)]||d[f]||u[f]||i;return t?n.createElement(m,a(a({ref:r},p),{},{components:t})):n.createElement(m,a({ref:r},p))}));function m(e,r){var t=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var i=t.length,a=new Array(i);a[0]=f;var s={};for(var l in r)hasOwnProperty.call(r,l)&&(s[l]=r[l]);s.originalType=e,s[d]="string"==typeof e?e:o,a[1]=s;for(var c=2;c{t.r(r),t.d(r,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var n=t(7462),o=(t(7294),t(3905));const i={sidebar_position:2},a="Enterprise Build",s={unversionedId:"nodes/providers/hardware/enterprise",id:"nodes/providers/hardware/enterprise",title:"Enterprise Build",description:"For teams looking to build a large storage system of ~2.1 Petabytes of storage, the estimated base price of the box with drives is ~$70,000 USD. This does not account for variable expenses including the regional costs of:",source:"@site/docs/nodes/providers/hardware/enterprise.md",sourceDirName:"nodes/providers/hardware",slug:"/nodes/providers/hardware/enterprise",permalink:"/docs/nodes/providers/hardware/enterprise",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/nodes/providers/hardware/enterprise.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"DIY Build",permalink:"/docs/nodes/providers/hardware/diy-serious copy"},next:{title:"Creating Provider",permalink:"/docs/nodes/providers/building"}},l={},c=[],p={toc:c},d="wrapper";function u(e){let{components:r,...t}=e;return(0,o.kt)(d,(0,n.Z)({},p,t,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"enterprise-build"},"Enterprise Build"),(0,o.kt)("p",null,"For teams looking to build a large storage system of ~2.1 Petabytes of storage, the estimated base price of the box with drives is ~$70,000 USD. This does not account for variable expenses including the regional costs of:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Power"),(0,o.kt)("li",{parentName:"ul"},"Internet"),(0,o.kt)("li",{parentName:"ul"},"HVAC"),(0,o.kt)("li",{parentName:"ul"},"Professionals ")),(0,o.kt)("p",null,"Those looking to build an enterprise storage provider, reach out to the team for recommendations and support."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7f9142bb.819d8831.js b/assets/js/7f9142bb.819d8831.js new file mode 100644 index 0000000..51ca05b --- /dev/null +++ b/assets/js/7f9142bb.819d8831.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[1314],{3905:(e,r,t)=>{t.d(r,{Zo:()=>c,kt:()=>m});var n=t(7294);function o(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function i(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function a(e){for(var r=1;r=0||(o[t]=e[t]);return o}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=n.createContext({}),p=function(e){var r=n.useContext(l),t=r;return e&&(t="function"==typeof e?e(r):a(a({},r),e)),t},c=function(e){var r=p(e.components);return n.createElement(l.Provider,{value:r},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},f=n.forwardRef((function(e,r){var t=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=p(t),f=o,m=d["".concat(l,".").concat(f)]||d[f]||u[f]||i;return t?n.createElement(m,a(a({ref:r},c),{},{components:t})):n.createElement(m,a({ref:r},c))}));function m(e,r){var t=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var i=t.length,a=new Array(i);a[0]=f;var s={};for(var l in r)hasOwnProperty.call(r,l)&&(s[l]=r[l]);s.originalType=e,s[d]="string"==typeof e?e:o,a[1]=s;for(var p=2;p{t.r(r),t.d(r,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var n=t(7462),o=(t(7294),t(3905));const i={sidebar_position:2},a="Enterprise Build",s={unversionedId:"nodes/providers/hardware/enterprise",id:"nodes/providers/hardware/enterprise",title:"Enterprise Build",description:"For teams looking to build a large storage system of ~2.1 Petabytes of storage, the estimated base price of the box with",source:"@site/docs/nodes/providers/hardware/enterprise.md",sourceDirName:"nodes/providers/hardware",slug:"/nodes/providers/hardware/enterprise",permalink:"/docs/nodes/providers/hardware/enterprise",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/nodes/providers/hardware/enterprise.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"DIY Build",permalink:"/docs/nodes/providers/hardware/diy-serious copy"},next:{title:"Creating Provider",permalink:"/docs/nodes/providers/building"}},l={},p=[],c={toc:p},d="wrapper";function u(e){let{components:r,...t}=e;return(0,o.kt)(d,(0,n.Z)({},c,t,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"enterprise-build"},"Enterprise Build"),(0,o.kt)("p",null,"For teams looking to build a large storage system of ~2.1 Petabytes of storage, the estimated base price of the box with\ndrives is ~$70,000 USD. This does not account for variable expenses including the regional costs of:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Power"),(0,o.kt)("li",{parentName:"ul"},"Internet"),(0,o.kt)("li",{parentName:"ul"},"HVAC"),(0,o.kt)("li",{parentName:"ul"},"Professionals")),(0,o.kt)("p",null,"Those looking to build an enterprise storage provider, reach out to the team for recommendations and support."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/874276e5.1a81b093.js b/assets/js/874276e5.1a81b093.js deleted file mode 100644 index c5791dd..0000000 --- a/assets/js/874276e5.1a81b093.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[5533],{3905:(e,t,o)=>{o.d(t,{Zo:()=>d,kt:()=>h});var r=o(7294);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 a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function i(e){for(var t=1;t=0||(n[o]=e[o]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var s=r.createContext({}),c=function(e){var t=r.useContext(s),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},d=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var o=e.components,n=e.mdxType,a=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=c(o),u=n,h=p["".concat(s,".").concat(u)]||p[u]||m[u]||a;return o?r.createElement(h,i(i({ref:t},d),{},{components:o})):r.createElement(h,i({ref:t},d))}));function h(e,t){var o=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=o.length,i=new Array(a);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:n,i[1]=l;for(var c=2;c{o.r(t),o.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var r=o(7462),n=(o(7294),o(3905));const a={sidebar_position:6},i="Storage Module",l={unversionedId:"protocol/modules/storage",id:"protocol/modules/storage",title:"Storage Module",description:"The Jackal Protocol incorporates two crucial algorithms for decentralized storage: Jackal Proof-of-Persistence (JPOP) and Internal Detection Of Loss (IDOL) protocols. This document provides an overview of these algorithms, their functionalities, and their interaction with users and Storage Providers.",source:"@site/docs/protocol/modules/storage.md",sourceDirName:"protocol/modules",slug:"/protocol/modules/storage",permalink:"/docs/protocol/modules/storage",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/protocol/modules/storage.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"WASM Module",permalink:"/docs/protocol/modules/wasm"},next:{title:"dsig Module",permalink:"/docs/protocol/modules/dsig"}},s={},c=[{value:"Jackal Proof-of-Persistence (JPOP)",id:"jackal-proof-of-persistence-jpop",level:2},{value:"Internal Detection Of Loss (IDOL) Protocol",id:"internal-detection-of-loss-idol-protocol",level:2},{value:"Interaction Outline",id:"interaction-outline",level:2},{value:"Client Query Commands",id:"client-query-commands",level:2},{value:"Transactions",id:"transactions",level:2}],d={toc:c},p="wrapper";function m(e){let{components:t,...o}=e;return(0,n.kt)(p,(0,r.Z)({},d,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"storage-module"},"Storage Module"),(0,n.kt)("p",null,"The Jackal Protocol incorporates two crucial algorithms for decentralized storage: Jackal Proof-of-Persistence (JPOP) and Internal Detection Of Loss (IDOL) protocols. This document provides an overview of these algorithms, their functionalities, and their interaction with users and Storage Providers."),(0,n.kt)("h2",{id:"jackal-proof-of-persistence-jpop"},"Jackal Proof-of-Persistence (JPOP)"),(0,n.kt)("p",null,"JPOP is a Proof-of-Storage algorithm that governs the relationship between the storage provider and the user. It operates through a series of contracts containing the Merkle Tree root hash of the file and information required to prove ownership. Storage Providers are responsible for posting Merkle Proofs within a challenge window determined by the blockchain."),(0,n.kt)("p",null,"The challenge windows require miners to post the raw data chunk and the required Merkle Hashes to prove the data belongs to the Merkle Root stored on the contract. The challenge indexes are chosen at random by the blockchain using a block-hash-based random number generator paired with a random data oracle."),(0,n.kt)("h2",{id:"internal-detection-of-loss-idol-protocol"},"Internal Detection Of Loss (IDOL) Protocol"),(0,n.kt)("p",null,"The IDOL protocol ensures that data remains available and accessible. When a Storage Provider successfully posts a Merkle Proof within the challenge window, and Validators verify the data, the Storage Provider is rewarded. The rewards are proportional to the file size associated with the contract relative to other active contracts on the network."),(0,n.kt)("p",null,"If a Storage Provider fails to provide a valid proof within the allotted timeframe, the contract is marked with a missed proof. After a certain number of missed proofs, the contract is burned, and the user is alerted the next time they query the contract. Storage Providers receive penalties for every contract burned due to missed proofs, which remain on their record for an adjustable period."),(0,n.kt)("p",null,"The IDOL protocol comes into play when contracts with missed proofs are moved to a new list where they can be claimed by other providers. The new provider downloads the file from one of the two online providers storing the same file, resumes the contract's proof action, and restores redundancy to 3x."),(0,n.kt)("h2",{id:"interaction-outline"},"Interaction Outline"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"A user sends a file to an available Storage Provider. A list of Storage Providers can be found on the blockchain, and miners can deny any incoming request if they do not want to store new files."),(0,n.kt)("li",{parentName:"ol"},"After receiving the entire file, the Storage Provider keeps the file in memory and posts a contract to the blockchain."),(0,n.kt)("li",{parentName:"ol"},"If the contract is not signed by the sender within a certain number of blocks (configurable by the Storage Provider), the file is removed from memory, and the contract is burned."),(0,n.kt)("li",{parentName:"ol"},"If the contract is signed by the user within the given number of blocks, the file is committed to the Storage Provider's hard storage, and the challenge windows start being created for the now active contract.")),(0,n.kt)("h2",{id:"client-query-commands"},"Client Query Commands"),(0,n.kt)("p",null,"The client query commands enable users to interact with and query the storage state. Examples of these commands include:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"list-active-deals")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"show-active-deals")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"list-miners")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"show-miners")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"list-contracts")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"show-contracts")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"find-file")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"freespace")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"get-client-free-space")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"list-pay-blocks")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"show-pay-blocks")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"list-strays")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"show-strays")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"params")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"storage-payment-info"))),(0,n.kt)("h2",{id:"transactions"},"Transactions"),(0,n.kt)("p",null,"The transaction commands allow users to interact with the storage module. Examples of these commands include:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"init-miner")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"set-miner-ip")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"set-miner-totalspace")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"sign-contract")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"post-contract")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"postproof")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"buy-storage")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"cancel-contract")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"upgrade-storage"))),(0,n.kt)("p",null,"By implementing the JPOP and IDOL protocols, the Jackal Protocol ensures secure, efficient, and reliable decentralized storage management. These protocols, along with the provided client query commands and transactions, enable users and Storage Providers to interact with the Jackal storage ecosystem seamlessly."),(0,n.kt)("p",null,"Please refer to the respective command documentation for detailed usage and parameters. The Jackal Protocol continues to evolve, and as new features are added, updates to this documentation will be provided accordingly."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/874276e5.b3e46ca7.js b/assets/js/874276e5.b3e46ca7.js new file mode 100644 index 0000000..c69d8ee --- /dev/null +++ b/assets/js/874276e5.b3e46ca7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[5533],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),c=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=c(e.components);return o.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=c(n),u=r,h=p["".concat(s,".").concat(u)]||p[u]||m[u]||a;return n?o.createElement(h,i(i({ref:t},d),{},{components:n})):o.createElement(h,i({ref:t},d))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:r,i[1]=l;for(var c=2;c{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var o=n(7462),r=(n(7294),n(3905));const a={sidebar_position:6},i="Storage Module",l={unversionedId:"protocol/modules/storage",id:"protocol/modules/storage",title:"Storage Module",description:"The Jackal Protocol incorporates two crucial algorithms for decentralized storage: Jackal Proof-of-Persistence (JPOP)",source:"@site/docs/protocol/modules/storage.md",sourceDirName:"protocol/modules",slug:"/protocol/modules/storage",permalink:"/docs/protocol/modules/storage",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/protocol/modules/storage.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"WASM Module",permalink:"/docs/protocol/modules/wasm"},next:{title:"dsig Module",permalink:"/docs/protocol/modules/dsig"}},s={},c=[{value:"Jackal Proof-of-Persistence (JPOP)",id:"jackal-proof-of-persistence-jpop",level:2},{value:"Internal Detection Of Loss (IDOL) Protocol",id:"internal-detection-of-loss-idol-protocol",level:2},{value:"Interaction Outline",id:"interaction-outline",level:2},{value:"Client Query Commands",id:"client-query-commands",level:2},{value:"Transactions",id:"transactions",level:2}],d={toc:c},p="wrapper";function m(e){let{components:t,...n}=e;return(0,r.kt)(p,(0,o.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"storage-module"},"Storage Module"),(0,r.kt)("p",null,"The Jackal Protocol incorporates two crucial algorithms for decentralized storage: Jackal Proof-of-Persistence (JPOP)\nand Internal Detection Of Loss (IDOL) protocols. This document provides an overview of these algorithms, their\nfunctionalities, and their interaction with users and Storage Providers."),(0,r.kt)("h2",{id:"jackal-proof-of-persistence-jpop"},"Jackal Proof-of-Persistence (JPOP)"),(0,r.kt)("p",null,"JPOP is a Proof-of-Storage algorithm that governs the relationship between the storage provider and the user. It\noperates through a series of contracts containing the Merkle Tree root hash of the file and information required to\nprove ownership. Storage Providers are responsible for posting Merkle Proofs within a challenge window determined by the\nblockchain."),(0,r.kt)("p",null,"The challenge windows require miners to post the raw data chunk and the required Merkle Hashes to prove the data belongs\nto the Merkle Root stored on the contract. The challenge indexes are chosen at random by the blockchain using a\nblock-hash-based random number generator paired with a random data oracle."),(0,r.kt)("h2",{id:"internal-detection-of-loss-idol-protocol"},"Internal Detection Of Loss (IDOL) Protocol"),(0,r.kt)("p",null,"The IDOL protocol ensures that data remains available and accessible. When a Storage Provider successfully posts a\nMerkle Proof within the challenge window, and Validators verify the data, the Storage Provider is rewarded. The rewards\nare proportional to the file size associated with the contract relative to other active contracts on the network."),(0,r.kt)("p",null,"If a Storage Provider fails to provide a valid proof within the allotted timeframe, the contract is marked with a missed\nproof. After a certain number of missed proofs, the contract is burned, and the user is alerted the next time they query\nthe contract. Storage Providers receive penalties for every contract burned due to missed proofs, which remain on their\nrecord for an adjustable period."),(0,r.kt)("p",null,"The IDOL protocol comes into play when contracts with missed proofs are moved to a new list where they can be claimed by\nother providers. The new provider downloads the file from one of the two online providers storing the same file, resumes\nthe contract's proof action, and restores redundancy to 3x."),(0,r.kt)("h2",{id:"interaction-outline"},"Interaction Outline"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"A user sends a file to an available Storage Provider. A list of Storage Providers can be found on the blockchain, and\nminers can deny any incoming request if they do not want to store new files."),(0,r.kt)("li",{parentName:"ol"},"After receiving the entire file, the Storage Provider keeps the file in memory and posts a contract to the\nblockchain."),(0,r.kt)("li",{parentName:"ol"},"If the contract is not signed by the sender within a certain number of blocks (configurable by the Storage Provider),\nthe file is removed from memory, and the contract is burned."),(0,r.kt)("li",{parentName:"ol"},"If the contract is signed by the user within the given number of blocks, the file is committed to the Storage\nProvider's hard storage, and the challenge windows start being created for the now active contract.")),(0,r.kt)("h2",{id:"client-query-commands"},"Client Query Commands"),(0,r.kt)("p",null,"The client query commands enable users to interact with and query the storage state. Examples of these commands include:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"list-active-deals")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"show-active-deals")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"list-miners")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"show-miners")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"list-contracts")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"show-contracts")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"find-file")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"freespace")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"get-client-free-space")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"list-pay-blocks")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"show-pay-blocks")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"list-strays")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"show-strays")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"params")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"storage-payment-info"))),(0,r.kt)("h2",{id:"transactions"},"Transactions"),(0,r.kt)("p",null,"The transaction commands allow users to interact with the storage module. Examples of these commands include:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"init-miner")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"set-miner-ip")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"set-miner-totalspace")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"sign-contract")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"post-contract")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"postproof")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"buy-storage")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"cancel-contract")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"upgrade-storage"))),(0,r.kt)("p",null,"By implementing the JPOP and IDOL protocols, the Jackal Protocol ensures secure, efficient, and reliable decentralized\nstorage management. These protocols, along with the provided client query commands and transactions, enable users and\nStorage Providers to interact with the Jackal storage ecosystem seamlessly."),(0,r.kt)("p",null,"Please refer to the respective command documentation for detailed usage and parameters. The Jackal Protocol continues to\nevolve, and as new features are added, updates to this documentation will be provided accordingly."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8a56e0ba.64aa9613.js b/assets/js/8a56e0ba.64aa9613.js new file mode 100644 index 0000000..1f88158 --- /dev/null +++ b/assets/js/8a56e0ba.64aa9613.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[8957],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>h});var o=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function s(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=o.createContext({}),c=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},d=function(e){var t=c(e.components);return o.createElement(l.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},f=o.forwardRef((function(e,t){var r=e.components,i=e.mdxType,n=e.originalType,l=e.parentName,d=a(e,["components","mdxType","originalType","parentName"]),u=c(r),f=i,h=u["".concat(l,".").concat(f)]||u[f]||p[f]||n;return r?o.createElement(h,s(s({ref:t},d),{},{components:r})):o.createElement(h,s({ref:t},d))}));function h(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var n=r.length,s=new Array(n);s[0]=f;var a={};for(var l in t)hasOwnProperty.call(t,l)&&(a[l]=t[l]);a.originalType=e,a[u]="string"==typeof e?e:i,s[1]=a;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>n,metadata:()=>a,toc:()=>c});var o=r(7462),i=(r(7294),r(3905));const n={sidebar_position:8},s="Filetree Module",a={unversionedId:"protocol/modules/filetree",id:"protocol/modules/filetree",title:"Filetree Module",description:"Overview",source:"@site/docs/protocol/modules/filetree.md",sourceDirName:"protocol/modules",slug:"/protocol/modules/filetree",permalink:"/docs/protocol/modules/filetree",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/protocol/modules/filetree.md",tags:[],version:"current",sidebarPosition:8,frontMatter:{sidebar_position:8},sidebar:"tutorialSidebar",previous:{title:"dsig Module",permalink:"/docs/protocol/modules/dsig"},next:{title:"Jackal Proof-of-Persistence Documentation",permalink:"/docs/protocol/p-o-p"}},l={},c=[{value:"Overview",id:"overview",level:2},{value:"Folder Abstraction",id:"folder-abstraction",level:2},{value:"File Entry Structure",id:"file-entry-structure",level:2},{value:"Encrypted Viewing Access",id:"encrypted-viewing-access",level:2}],d={toc:c},u="wrapper";function p(e){let{components:t,...n}=e;return(0,i.kt)(u,(0,o.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"filetree-module"},"Filetree Module"),(0,i.kt)("h2",{id:"overview"},"Overview"),(0,i.kt)("p",null,"The Jackal Filetree module is responsible for organizing and managing user files in a secure and user-friendly way. When\na user uploads a file using the Storage module, the file is only accessible from the File ID (FID), which can be\nchallenging to remember for every file uploaded to Jackal. Additionally, every single upload would be required to be\npublic, or the user would need to keep track of every symmetric key used to encrypt the files and manually map them to\nthe FIDs. To address this issue, the File Tree module implements a tree structure to store each file as an entry in the\ntree. Organizing this structure is also trivial as we can assign children to pseudo files that we call folders. Finally,\nto keep track of encryption keys, the protocol maps every file to its respective key, emphasizing the security and\nprivacy posture that the File Tree module enables."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Protocol Overview",src:r(96).Z,width:"542",height:"842"})),(0,i.kt)("h2",{id:"folder-abstraction"},"Folder Abstraction"),(0,i.kt)("p",null,"These, of course, are all abstractions of what's actually under the hood. The File Tree module doesn't actually handle\nany of the folder logic; the system believes it is storing files that act as metadata stores, which then update to\nreflect changes in folders. This gives the user experience the feeling that folders and files are separate entities in\nthe tree, but in reality, they are identical."),(0,i.kt)("h2",{id:"file-entry-structure"},"File Entry Structure"),(0,i.kt)("p",null,"Storing file entries on-chain is a challenge since the chain itself is public. This requires the use of client-side\nencryption before uploading data to the chain itself. The main component of a file is location (Address), allowing users\nto query the rest of the data from the file. You can think of the location as a key in a traditional key-value store or\na path in bucket-based storage. The address is hashed using SHA256 to ensure it is impossible to retrieve the plain-text\nrepresentation of the file name while still being able to query the file using its given name."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Protocol Overview",src:r(4965).Z,width:"271",height:"220"})),(0,i.kt)("p",null,"The second most important data point in a file is the content of the file. This field is extremely versatile as it can\nstore any string. Traditionally this is used to store a JSON list of FIDs to point to a file on the Storage Module;\nhowever, the protocol can also theoretically use it to store short bits of text like encrypted passwords for a private\npassword manager. The owner tag is a hashed version of the owner, hiding what address owns each file. This field can be\nchanged to reflect the transferral of ownership. When making changes to the file such as deletion, movement, or\nadding/removing viewers/editors, the owner field is consulted to determine permissions. The same applies to edit access;\neditors can update the contents but nothing else."),(0,i.kt)("h2",{id:"encrypted-viewing-access"},"Encrypted Viewing Access"),(0,i.kt)("p",null,"For users to view files, they need access to the symmetric keys used to encrypt the files. To do this, the protocol has\na map of hashed addresses with each user's respective version of the symmetric key encrypted with that address's\ncorresponding public key. The protocol can then store that map in the file entry to act as an encryption key discovery\nlayer. The addresses in this viewing list are only able to access files and decrypt the data in their client; they have\nno privileges over the modification of the file entry in any way. This approach ensures that the File Tree module\nmaintains a strong security and privacy posture for user data."))}p.isMDXComponent=!0},96:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/filetree1-e947ab740b90156234b2fadb69a00533.png"},4965:(e,t,r)=>{r.d(t,{Z:()=>o});const o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQ8AAADcCAYAAABu8iQLAAAenUlEQVR4Xu2dCbAcVRWGQVBxVzQaFwRBEERLUYFIkF0IiwbZFDcWSYDSgCABFQslyqaArHHDrVzADRcEERQsFClQBKOguCEoS9CgICK4tfVd607d15nbc1+/mfzv9fu/qqm86Znp02den7/vvf1y/pUqY4xpwUr1DcYYU4LFwxjTCouHMaYVFg9jTCssHsaYVlg8jDGtsHgYY1ph8TDGtMLiYYxphcXDGNMKi4cxphUWD2NMKywexphWWDyMMa2weBhjWmHxMMa0wuJhjGmFxcMY0wqLhzGmFRYPY0wrLB7GmFZYPIwxrbB4GGNaYfEwxrTC4mGMaYXFwxjTCouHMaYVFg9jTCssHsaYVsjEY6uttqpWWmklP/zwYwIP6kiFTDxI3BgzMZR1JIusTNqYrqCsI1lkZdLGdAVlHckiK5M2piso60gWWZm0MV1BWUeyyMqkjekKyjqSRVYmbUxXUNaRLLIyaWO6grKOZJGVSZuqmj17dvWQhzykWmWVVcY87rzzzuoDH/hA9aY3vSm873GPe1z1hz/8ofZpM1lQ1pEssjJp83/x+MxnPlPfHPj73/9e3XPPPeFni8fkRllHssjKpE2zeORGHt/85jer5z//+dVznvOcascdd6xuv/329GNGgLKOZJGVSZvxi8cdd9xRPf7xj69+9rOfhe0nn3xy9apXvSr9mBGgrCNZZGXS5v/igTA85SlP6T3WXnvt8Fo/8fj0pz9dzZkzp/f5v/3tb9Wqq65a/fvf/+5tMyseZR3JIiuTNv8Xj7POOiuMKOJj6dKl4bV+4sG2Rz3qUdWaa67ZezAS4XNGh7KOZJGVSZvxT1t479y5c2vvNGqUdSSLrEzajF88uIU7Y8aM6le/+lXYfs0111QLFixIP2YEKOtIFlmZtBm/eEC827LOOutUL3zhC6vvf//76ceMAGUdySIrkzamKyjrSBZZmbQxXUFZR7LIyqSN6QrKOpJFViZtTFdQ1pEssjJpY7qCso5kkZVJG9MVlHUki6xM2piuoKwjWWRl0sZ0BWUdySKvtdZaIXE//PCj/YM6UiETDxI3xkwMZR3JIiuTNqYrKOtIFlmZtDFdQVlHssjKpI3pCso6kkVWJm1MV1DWkSyyMmljuoKyjmSRlUkb0xWUdSSLrEzamK6grCNZ5GElvWzZstAeb968efWXxvDBD36w1x2rzmQ1Nrr00kuzx5V2+zLTl2HVURtkkUuS/spXvlLftBxnnnlmtWjRomAb8I9//KP+co/xisdksBR45StfWV111VX1zeHYUlc3M30pqaNRIYtckjS9Mgex8cYbV7/97W+r+fPnV+edd15vO0Ky9957V8985jNDv06a9UbxuPjii6tnP/vZwfkM4cFCAPG49tprqxe84AXV6173umqrrbYK7825pN18883Vy172srCfZz3rWdXxxx/fuP0Xv/hF8ILtB6MI3o8AbrbZZiGfE088sXr4wx8etiGip5xySrXvvvuG43vnO985ZuTB8X/4wx+uXv7yl4fv7Ljjjuvt+4QTTqjWWGON6sUvfnH1kY98JFgmmO5QUkejQha5JOlB4nHDDTcEYYArrrii2mmnnXqvLV68uNp8882rf/3rX9Vf//rXaoMNNgjFxlX7aU97WhCQ+D4MnxGPJUuWBG+SKEJNLmlvfvObq/e+973hZ/a/++67h39z2zFJ+vrXvx62p/zpT3+qnvCEJ1T33ntveP7JT36yOvvss8PPG264YW/kccYZZ4TpGcICqXg88YlPDIICf/zjH6uHPexhYWRy4403VquvvnrI48EHHwzfz6Dv1EwtSupoVMgi55L+xCc+EaYRPCjq+PNHP/rR+lurhQsXVh/60IfCz//973/D1RuLAHj1q19dnXrqqb33vv3tbw/FxgiA/UUYoXAsiAci8YhHPKL6z3/+E15rckl73/veV2255ZbV1Vdf3Xs/5LbnuP/++4NAkcef//znMa+l4sH0bIcddui9VhePn/zkJ73XEKPf/e53YTSSWkKee+65Fo+OkaujFYEscknSTSd6HEE89rGP7QkMw3yG98AQnqt45P3vf38otiuvvHK5ofsjH/nInniwz0iTSxojGqYETGmwaoxCldveBIW/5557hn1vt912ofChLh6vfe1re5+pi8evf/3r3mvxOdOXdJ2H3Ju+UzP1KKmjUSGLXJJ004l+0UUXjbkSA0XImgDstddeYZE08ra3vS0UEkP5dOTBaCIdeTz96U/vvVbqkoYREp9jzaRke45//vOf1dFHH1294hWvCM/r4sFaTKREPLCT3GOPPXrbmY41fadm6lFSR6NCFrkk6aYTHXGIU5YURgc//elPg3CwcElBsq7AlIZi4zlrB9/61rfC+ylCFjL7iUeTS9prXvOa3j6Y+rCm8qMf/Si7PbfmgTgwtYh3ipgq7bzzzuFnjJXivtqIB8fL8TMdIm9GNU3fqZl6lNTRqJBFnkjSf/nLX8LaRLzzkXLooYeGUcZ9991X7bbbbtXMmTOrTTbZJKx57LPPPuE9X/va10ITFYSGxU2mKtwlqYsH5FzSKEzuYLAf7oi8+93vbtyeu9vCushhhx0W7gpxd4a7LSwEw7HHHhumZSyWthEP4Lsgv1mzZoWFWETUdIeJ1NFEkUVWJj2dSBdtL7/88nBr23QHZR3JIiuTni7cdddd1WMe85jq5z//eXi+3377VYccckjtXWYqo6wjWWRl0tMJ/jCMKRR/KMbib/12sJnaKOtIFlmZtDFdQVlHssjKpI3pCso6kkVWJm1MV1DWkSyyMmljuoKyjmSRlUkb0xWUdSSLrEzamK6grCNZZGXSxnQFZR3JIiuTNqYrKOtIFlmZtDFdQVlHssjKpI3pCso6kkVWJm1MV1DWkSyyMmljuoKyjmSRlUkb0xWUdSSLrEzamK6grCNZ5GElfeGFF1abbrpptdpqqwWbAVr6pV212tDk1FZK2nx5mDTtl2bNEz1uM7UYVh21QRa5JOlBjnEXXHBBaHZzzjnnhD4V9Bw98sgjqyc/+cnV3XffXX97MTmntlKwgaBz+rDJ7Td2C1u6dGmR3YPpDiV1NCpkkUuSHtSsl07pGDHVQUyif8sXv/jF0IV8vfXWq7bYYovQSxROO+20av/99w92Boxc6Dv6+9//fjmnNsCLBce49ddfP5g6YaAEOae2XXfdtVp55ZVD3FtvvbWvIxzgLRMNolLY/+tf//rwfvqscoz4u9T3i3DiSMdx0LM1jjyuv/768N3QiZ2c11133Z7JFY2W2R/73WabbUKP1djb1Uw9SupoVMgilyTdJB64sLEPCj7HLbfcEgorTmPoqkUzZKChMI2C8WCBAw88sOe6lloe0Cz5uc99boiHVwwFfPrpp4fXck5tdGtHgKDJEY6u6jfddFP4OeVLX/pS6HTOSIORBE2Mf/CDH4zZLzBNO+KII8L7IIoHjZxpthw7r2P2hGgBHefpKo+/zG233RYaL+c8fM3kp6SORoUsci7pUsc4hIF9NJlbMwKJNgYQ3eEQAsSD6UkEQXjjG98Yfk7Fg76fjEYidFOPPrY5p7a0yJsc4XLQoZ0u7sRK86uLB/HT6VUqHnRdj2BFgUgA1hBR/ADRtHhMXXJ1tCKQRS5JumnkwTCdfTQtjjKkj4IQwR2Oz9StDNLnqXggPhRpdIx7xjOeEaY4kLM8qBd5zhGuCUYfiBTCOW/evOVGNEC86CkDqXikFhLpc6ZYmFlF6q5yZmpRUkejQha5JOkm8YCXvOQlPV+UlGOOOSZ0DGfkgbN9hAIkLlOIUvGgsFLnuZRS8YjUHeFKwKNm++23Dzaa9f3W45eIBw5yOMlFDjroIIvHFKakjkaFLHJJ0oPE45JLLgnmTwzDudPA46ijjgrdwhEICokrdywwzJOY70OTeKRObbi8MdKIaxasm8TbpfXijc+ZFrHmwOioyREut+ZBPogiaxk8WNhl0TXdL9Tjl4gHnr2MflhLYZ0GQyiLx9SlpI5GhSzysJLmbzI233zzUDgUEwLAQmCE4T8jCe44bLvttr07HU3ikTq1AUN77tbg6IY/btx/vXjT50wP4ppEzhEud7eFEcYuu+wSPoMQMuXBrhLifq+++url4peIBwK00047BSsGRmU46R1wwAG995qpxbDqqA2yyMqkpzvp34Iwwlm4cGHyqplKKOtIFlmZ9HSGaRijMNZ/GM3gw3v++efX32amCMo6kkVWJj2d4W9VDj744HDXiLtH6d+JmKmHso5kkZVJG9MVlHUki6xM2piuoKwjWWRl0sZ0BWUdySIrkzamKyjrSBZZmbQxXUFZR7LIyqSN6QrKOpJFViZtTFdQ1pEssjJpY7qCso5kkZVJG9MVlHUki6xM2piuoKwjWWRl0sZ0BWUdySIrkzamKyjrSBZZmbQxXUFZR7LIyqSN6QrKOpJFHlbS3/jGN6pZs2YFxzi6l9Ml67rrrqu/Tc6yZcuqGTNmhGbGTdAvNdcWkJaKdoQzKcOqozbIIpckPcgxjhaDFBQ9RbE1oLBo64cZ0o033lh/+8igR8YgaHO4aNGiYOTUZBcxXvEoiW26S0kdjQpZ5JKkBzVAxoUNP5Q68+fPD/1B6e9J05sIncJnz57de04XcwQq5/wGeKfQbQvHOHp+3n777WE73cz33Xff4MyG8RNOdDQnzrHxxhuH/qkc23nnndfbjpDsvffeoV8px7ZgwYKeeODyRo7ERng4TsTj2muvDXHpuRo9ZHLHefPNN4emz+yHHqrYUTRtN1OLkjoaFbLIJUk3iQedv9lHPyOlyy67LEwRgEa/WDMCVg08HnjggdA9i/cwnaCRcD/nN9zkKFgaCAPWlnRCB5oj8/nYUJmWfrT46wcNj6NoXXHFFWFqFVm8eHFo4IyDG82JN9hggyAejCjobB5tInkfJliIx5IlS0Kz4yhCTceJPWZsssz+d9999/BvbruZWpTU0aiQRc4lXeoYhy/LqquuOmZbJB0FYPr0hS98IYgEV1rWHLBupKBT86Z+zm/YJMyZM6e3HYEgJoXNNIRO6iXQYDiOkBAtrvbRS5cR0qmnntp7L93MEQ9yIO9IdLuL3dGxnIiNjJuOE5/dLbfcMnRbTxsf57abqUWujlYEssglSTeNPO66666wj1iEKYw8ops86yFvfetbg+csRYw4nXTSScF/5cgjjwzvqVsYxOd4pXCFj25xPLjCc6VHPDCMHkQcQWDlEIUQ4yamPcBUKfrAAL4qiMeVV14Z4qXgdhfFg31Gmo6TEc0JJ5wQpjR8J1GoctvN1KKkjkaFLHJJ0k3iAc973vP6urnR4BeXecAIe9NNNw1m0QgIV3Q8at/whjdU3/72t8N7cuKBLePcuXN721Pqvi85LrroouVGKIxyWLOAvfbaa0wOHCfiwYJvOvJgNJGOPFJflqbjTMGaks+xZlKy3Ux+SupoVMgilyQ9SDxYJOTOCqMJbBkZhTCqwD3+N7/5Te9966+/fvWiF70omCkxbeA5zvesa0BOPNgf6xrRD/aaa64JC5pQF4/cmgfi0G9Rl9EBBtQIB9MprCg5PqY0iAfPiR2d6xhdMBXrJx5Nx4mxddwHUx/WVHCqy203U4uSOhoVssjDSpoCYDHy0Y9+dBiqM6pgPSQFu0Yc3yIsWDLfj+TEA+JdDIQMG0oc7KEuHv3utiBorE3EOx8phx56aBhlYB252267VTNnzqw22WSTsOaxzz77hPcwUsIxDqFhcZOpCndJ6uIBueNESFjbYT/cJo7evrntZmoxrDpqgyyyMmljuoKyjmSRlUkb0xWUdSSLrEzamK6grCNZZGXSxnQFZR3JIiuTNqYrKOtIFlmZtDFdQVlHssjKpI3pCso6kkVWJm1MV1DWkSyyMmljuoKyjmSRlUkb0xWUdSSLrEzamK6grCNZZGXSxnQFZR3JIiuTNqYrKOtIFlmZtDFdQVlHssjKpI3pCso6kkVWJm1MV1DWkSyyMmljuoKyjmSRJ5o0Vgm0+Ktz0003hUbB9957b2gKXDdJasOw9kPnMDqzRyuI6crHPvax0PUt9nHNcemll2a/95133jn0bm0D3fRpuxg7v0224xkPE62jiSCLXJJ0k2Mc/Tpp8XfPPfeM2f6ud72r1/x46dKlQ7EVGMZ+6KJOK0Q6lk93gyWKNbZabIKWkldddVV9c/hd0OKxyXlvEPScTcVjMh3PeCipo1Ehi1yS9KAGyJtttln18Y9/fMw2+nF+5zvfCT+nIwZ8SnBTo/kxhkcPPvhgOGnSPqS8Fs2fOCEYJWAqFfdz2mmnhX6oWC7QkZ0eoHRnB3qLvvSlLw3HjJMco6LUUoEeo3jIYCq14YYb9rYDPVfx26UvKc2Q8Yxp2s7oih6s5MMxYNMAORe43PZ+fVcju+66a/We97wnXFHpc3rssccGWwgc6oh7/fXXh/fx/dATlu+d951++um9fdBX9sQTT6y23nrr8Jlo71AvVpo7c2zsg98pRlp8DosKtnERwd3vHe94R+jjSkf69Eqfc/yjmPld0QN2m222CX1aY9wm8VAfz3goqaNRIYtckvQg8cAIihMzgpkTto1xlBCLnkbCdEvHEY0RAIXBSc5JwckA+MDQgDjaN9LZnEbC6X5oekxzZPxQ4MADD+yJDeZNNC8GxIsTLR3G7rHHHmHYC5w4NCAGurnTuPj8888Pz+n+jlVDbjtstNFGPRMs9sMJjBjmXOBy23Md34H3IAocB2KFiVQUQ4SE3OHwww8PggqIFIbjt912W3iOdQQjQaAJNN/jLbfcMqZY6RiPSDPNBGKcffbZ4WdENl7paRKNs979998fnqfFmnP8o2s9oolHDcfEuRGtPHPiMRmOZzyU1NGokEXOJV3qGAdMWdLRBSd0PFkhvrbffvuFK0eEUUAUCX6BTEso0qOPPjrMe7E94IRhjSLdD+LB0DWCADGaALqfIzgRrrTxZLr77rvDFT+KGjm+5S1vCT8zckn9WYjNiZTbTvFxPOk0CgvN733ve1kXuNz2JhCPs846K/yM4PL74nuCz372s73vgUKIBQRMzeJIiONPnfgoNszJ02Lls1ypKay6dWharBwPU75IvVj7Of5hL5GOhDg/+hXrZDue8ZCroxWBLHJJ0oNGHsAwEGHgylu3UIhFzy+W16KbGubX0WqSk4aRCa5yF154YRADigzzaYaj6X7qdgvp84c+9KFjFtMYssaTCSFiJBKFEPe4Jz3pSUEQGDkgYHVy2/FW4SSLufBgXxRlzgUut70JiiOddvH74gSHc889N3yn8OMf/ziMUDDyZirHOlS0fSBXRiMR3sdFoD5NoND23HPPULTbbbddb3pWL9b0AlIv1n7WGenvAJg+9CvWyXY846GkjkaFLHJJ0iXicckll4TRwgUXXBCubCmx6PkF9XOWg0996lPVUUcdFU5+RghccSguYsdiKREPCjj1i2H9JJ4oTIfqC21cub/61a+GEQZrA3FEgAiyFpHbznGkI5IcORe43PY6peLBSOOcc87pvY/vLRUPxCXCmhDrBfVijSCmjP5YT4B6sfK5SEmxMlWMoyc46KCD+hbrZDue8VBSR6NCFrkk6RLxoLjWWGONsI6QnsQQi555PSONOI/FpzYWBtMAhCPepmPqwSJZKkQl4sFVlbUAYATDFZiTCdvIpz71qWHtIIWpC072bOekjMfDomxc8+i3HXC/+/znPx9+Zq2GURInX84FLrd90JpHiXhQGFEgyJdRVYyFeGBuBawvcQudtY+0WClGvod4pwLT7rhv1pzivtoUKwu8jBw4R1h7YG2oX7FOtuMZDyV1NCpkkYeZNFeH+LcdKel6CENErpKsPVCEcVEPEKn58+eHn/nFYmF5zDHH9F4vEQ9c3JgWrLvuuuGKwtWKtQFGNXFxMYWFOQSGefWSJUvC6IQpRXpXJbedBUzWbDhu4kU7y5wLXG57092WUvFgSsY0EKFjxMbvgpENoox4UDB4CiPwceExLVa+78MOOyxM0fjdINw33HBDeA0xRozOOOOMVsXKojCiTuwdd9wxLGgfcMAB4T058ZgMxzMehllH40UWWZn0qEgXI1mgZAQynUE8uMLWyU0TRkH6O0E0Fy5cGH7OiceoKTme8aCsI1lkZdKjgDszLN4y3fjlL38ZCife0p2u8B2ki8iRFVWsTMkYmXGblOJMb30rxKP0eMaDso5kkZVJjwKc6pnPMoTnD4w+97nP1d8y7WgSj5I/B58o3GI++OCDw++Eu1JHHHFEEPf6n4NPtuMZD8o6kkVWJm1MV1DWkSyyMmljuoKyjmSRlUkb0xWUdSSLrEzamK6grCNZZGXSxnQFZR3JIiuTNqYrKOtIFlmZtDFdQVlHssjKpI3pCso6kkVWJm1MV1DWkSyyMmljuoKyjmSRlUkb0xWUdSSLrEzamK6grCNZZGXSxnQFZR3JIiuTNqYrKOtIFnkYSc+ePTt0WOe/MqeP2A6wTvwv4rTgiy0OaQ5Mx6869Nsc9X/RngqU/nf1tOtYnbSj23ip/3f1YRxP2vVrvNSPR80w6qgtssglSTc5xgHiMZ6TIIoHgkEbQKBTduwNGqGR8fbbb1/NnTu3+uEPfzjmtelGSaMcelLQKrEfdM6aqOPeeBv3DDoelbvbKCipo1Ehi1yS9KAGyIPE4+KLLw6NefBQWbRoUbhipSMPep7ST5Iu5dtuu23vczRpoUExTYbpR5ry5S9/OeyPPp3YWj7wwAON2/GIoWMUr9G3kgbAgCVBPxe33PamfqPkRVducqDJDF3ZaayLFQKNnGPv0djLlD6mmGBddtllYTsNjHlOs2K+U/qRXn755eG1tFjp4E5ufJ44dE7D5wQTrZVXXjl8Dh/euptaHHngMseIgT6nW2yxReiqxe8ISt3UhnE8ceQxjONRU1JHo0IWuSTpiYgHXZs4WeLJsHjx4jDFqU9b8DtJRx58jpMRQynaxdEINwoBTZNnzJgRCpz37bLLLsEPJbedNoQUNs2R4eSTTw6duSHn4pbbzgmb63ROg10c5YDO8Li2xQa8OOrRsBjouk43cEAYETS47rrrQrFhYwH42FBIkBYr3xXd0riycwWn9SIufYzi8KWJ1N3UonjwPVB0sQM5x0WDYSh1UxvG8UTxGMbxqCmpo1Ehi5xLejyOcYgHZkucKOmDNv9cqVN/E64kxBwkHjQtxjoyggkUowrA4yV1jENcEJbcdgp1zpw5ve2cdNg2IjA5F7fc9iYQj+gZg9Ulc/II3bmjyRPFQ2xgBMR3B4hH+l1RMIgJRZgWK34sjKwYTaXD/nqx1t3UUvGg+3gEm4tobFXqpjaM40nFY6LHoyZXRysCWeSSpCcy8sDykCFnCvYMg8QDpzBO9iha/BxNf7ARiPaSKbntGCbzeY4jPhiJMCLJubjltjeBeDDqAaYb0Q0POOk5DuDKyhU4mnTHAkA8+n1XGETV1xj4vrB94LuZN29eEMp+xZqKfSoeFHskfV7qpjaM40nFY6LHo6akjkaFLHJJ0hMRD8yW0qspv/BBIw8W0ph+MJeOUMwUMeZKjDBYt4jgMMecOredY2PRdRA5F7fc9jol4oEFAtMZvhfge0jFA6+aaEzFqInvatmyZcsVa4TvikXlU045pW+x8rlIiXiUuqkN43hKxKP0eNSU1NGokEUuSXoi4oFVIEIQ57MUEL/wungwv581a1YoHNZF0ilLhFEFQ1gKEEHCBIjhPycYo4TcdjqqcwyIALBguWDBgvBzzsUtt33Qmscg8aAwsMREGDhG/EKYmjCVQTz4bhBS4DtlsRHSYuU7YOGQ74rH/vvvH/bNmgyfv++++8L76sVaIh6lbmrDOJ4S8Sg9HjUldTQqZJGHkXTu7zy4AgHCgEsaQ3IWITkBKLJUPJhCMM/lpGE4HxcXU7h7EQuS+/wsJs6cOXPMXZXc9ni3hXjYFUYf15yLW257092WEvEARJDvYqONNqq++93vhgVBFggRD4798MMPD656LKSy8AhpsXJFZzGY74vjY4pHIQHDfI6DtZp6sZaIR6mb2jCOp0Q8So9HzTDqqC2yyMqkzVgQD24N9yM3TRgFJW5qk+141CjrSBZZmbQZC+KRmyKuqGItdVObbMejRllHssjKpM1YBolHyZ+DT5RSN7XJdjxqlHUki6xM2piuoKwjWWRl0sZ0BWUdySIrkzamKyjrSBZZmbQxXUFZR7LIyqSN6QrKOpJF5v8jkLgffvjR/kEdqZCJhzFmamPxMMa0wuJhjGmFxcMY0wqLhzGmFRYPY0wrLB7GmFZYPIwxrbB4GGNaYfEwxrTC4mGMaYXFwxjTCouHMaYVFg9jTCssHsaYVlg8jDGtsHgYY1ph8TDGtMLiYYxphcXDGNMKi4cxphUWD2NMKywexphWWDyMMa2weBhjWmHxMMa0wuJhjGmFxcMY0wqLhzGmFRYPY0wrLB7GmFZYPIwxrbB4GGNa8T+Jg9FLWZvRrAAAAABJRU5ErkJggg=="}}]); \ No newline at end of file diff --git a/assets/js/8a56e0ba.9518a51b.js b/assets/js/8a56e0ba.9518a51b.js deleted file mode 100644 index 7162ec6..0000000 --- a/assets/js/8a56e0ba.9518a51b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[8957],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>h});var o=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function n(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=o.createContext({}),c=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):n(n({},t),e)),r},d=function(e){var t=c(e.components);return o.createElement(l.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},f=o.forwardRef((function(e,t){var r=e.components,i=e.mdxType,s=e.originalType,l=e.parentName,d=a(e,["components","mdxType","originalType","parentName"]),u=c(r),f=i,h=u["".concat(l,".").concat(f)]||u[f]||p[f]||s;return r?o.createElement(h,n(n({ref:t},d),{},{components:r})):o.createElement(h,n({ref:t},d))}));function h(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var s=r.length,n=new Array(s);n[0]=f;var a={};for(var l in t)hasOwnProperty.call(t,l)&&(a[l]=t[l]);a.originalType=e,a[u]="string"==typeof e?e:i,n[1]=a;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>n,default:()=>p,frontMatter:()=>s,metadata:()=>a,toc:()=>c});var o=r(7462),i=(r(7294),r(3905));const s={sidebar_position:8},n="Filetree Module",a={unversionedId:"protocol/modules/filetree",id:"protocol/modules/filetree",title:"Filetree Module",description:"Overview",source:"@site/docs/protocol/modules/filetree.md",sourceDirName:"protocol/modules",slug:"/protocol/modules/filetree",permalink:"/docs/protocol/modules/filetree",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/protocol/modules/filetree.md",tags:[],version:"current",sidebarPosition:8,frontMatter:{sidebar_position:8},sidebar:"tutorialSidebar",previous:{title:"dsig Module",permalink:"/docs/protocol/modules/dsig"},next:{title:"Jackal Proof-of-Persistence Documentation",permalink:"/docs/protocol/p-o-p"}},l={},c=[{value:"Overview",id:"overview",level:2},{value:"Folder Abstraction",id:"folder-abstraction",level:2},{value:"File Entry Structure",id:"file-entry-structure",level:2},{value:"Encrypted Viewing Access",id:"encrypted-viewing-access",level:2}],d={toc:c},u="wrapper";function p(e){let{components:t,...s}=e;return(0,i.kt)(u,(0,o.Z)({},d,s,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"filetree-module"},"Filetree Module"),(0,i.kt)("h2",{id:"overview"},"Overview"),(0,i.kt)("p",null,"The Jackal Filetree module is responsible for organizing and managing user files in a secure and user-friendly way. When a user uploads a file using the Storage module, the file is only accessible from the File ID (FID), which can be challenging to remember for every file uploaded to Jackal. Additionally, every single upload would be required to be public, or the user would need to keep track of every symmetric key used to encrypt the files and manually map them to the FIDs. To address this issue, the File Tree module implements a tree structure to store each file as an entry in the tree. Organizing this structure is also trivial as we can assign children to pseudo files that we call folders. Finally, to keep track of encryption keys, the protocol maps every file to its respective key, emphasizing the security and privacy posture that the File Tree module enables."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Protocol Overview",src:r(96).Z,width:"542",height:"842"})),(0,i.kt)("h2",{id:"folder-abstraction"},"Folder Abstraction"),(0,i.kt)("p",null,"These, of course, are all abstractions of what's actually under the hood. The File Tree module doesn't actually handle any of the folder logic; the system believes it is storing files that act as metadata stores, which then update to reflect changes in folders. This gives the user experience the feeling that folders and files are separate entities in the tree, but in reality, they are identical."),(0,i.kt)("h2",{id:"file-entry-structure"},"File Entry Structure"),(0,i.kt)("p",null,"Storing file entries on-chain is a challenge since the chain itself is public. This requires the use of client-side encryption before uploading data to the chain itself. The main component of a file is location (Address), allowing users to query the rest of the data from the file. You can think of the location as a key in a traditional key-value store or a path in bucket-based storage. The address is hashed using SHA256 to ensure it is impossible to retrieve the plain-text representation of the file name while still being able to query the file using its given name."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Protocol Overview",src:r(4965).Z,width:"271",height:"220"})),(0,i.kt)("p",null,"The second most important data point in a file is the content of the file. This field is extremely versatile as it can store any string. Traditionally this is used to store a JSON list of FIDs to point to a file on the Storage Module; however, the protocol can also theoretically use it to store short bits of text like encrypted passwords for a private password manager. The owner tag is a hashed version of the owner, hiding what address owns each file. This field can be changed to reflect the transferral of ownership. When making changes to the file such as deletion, movement, or adding/removing viewers/editors, the owner field is consulted to determine permissions. The same applies to edit access; editors can update the contents but nothing else."),(0,i.kt)("h2",{id:"encrypted-viewing-access"},"Encrypted Viewing Access"),(0,i.kt)("p",null,"For users to view files, they need access to the symmetric keys used to encrypt the files. To do this, the protocol has a map of hashed addresses with each user's respective version of the symmetric key encrypted with that address's corresponding public key. The protocol can then store that map in the file entry to act as an encryption key discovery layer. The addresses in this viewing list are only able to access files and decrypt the data in their client; they have no privileges over the modification of the file entry in any way. This approach ensures that the File Tree module maintains a strong security and privacy posture for user data."))}p.isMDXComponent=!0},96:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/filetree1-e947ab740b90156234b2fadb69a00533.png"},4965:(e,t,r)=>{r.d(t,{Z:()=>o});const o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQ8AAADcCAYAAABu8iQLAAAenUlEQVR4Xu2dCbAcVRWGQVBxVzQaFwRBEERLUYFIkF0IiwbZFDcWSYDSgCABFQslyqaArHHDrVzADRcEERQsFClQBKOguCEoS9CgICK4tfVd607d15nbc1+/mfzv9fu/qqm86Znp02den7/vvf1y/pUqY4xpwUr1DcYYU4LFwxjTCouHMaYVFg9jTCssHsaYVlg8jDGtsHgYY1ph8TDGtMLiYYxphcXDGNMKi4cxphUWD2NMKywexphWWDyMMa2weBhjWmHxMMa0wuJhjGmFxcMY0wqLhzGmFRYPY0wrLB7GmFZYPIwxrbB4GGNaYfEwxrTC4mGMaYXFwxjTCouHMaYVFg9jTCssHsaYVsjEY6uttqpWWmklP/zwYwIP6kiFTDxI3BgzMZR1JIusTNqYrqCsI1lkZdLGdAVlHckiK5M2piso60gWWZm0MV1BWUeyyMqkjekKyjqSRVYmbUxXUNaRLLIyaWO6grKOZJGVSZuqmj17dvWQhzykWmWVVcY87rzzzuoDH/hA9aY3vSm873GPe1z1hz/8ofZpM1lQ1pEssjJp83/x+MxnPlPfHPj73/9e3XPPPeFni8fkRllHssjKpE2zeORGHt/85jer5z//+dVznvOcascdd6xuv/329GNGgLKOZJGVSZvxi8cdd9xRPf7xj69+9rOfhe0nn3xy9apXvSr9mBGgrCNZZGXS5v/igTA85SlP6T3WXnvt8Fo/8fj0pz9dzZkzp/f5v/3tb9Wqq65a/fvf/+5tMyseZR3JIiuTNv8Xj7POOiuMKOJj6dKl4bV+4sG2Rz3qUdWaa67ZezAS4XNGh7KOZJGVSZvxT1t479y5c2vvNGqUdSSLrEzajF88uIU7Y8aM6le/+lXYfs0111QLFixIP2YEKOtIFlmZtBm/eEC827LOOutUL3zhC6vvf//76ceMAGUdySIrkzamKyjrSBZZmbQxXUFZR7LIyqSN6QrKOpJFViZtTFdQ1pEssjJpY7qCso5kkZVJG9MVlHUki6xM2piuoKwjWWRl0sZ0BWUdySKvtdZaIXE//PCj/YM6UiETDxI3xkwMZR3JIiuTNqYrKOtIFlmZtDFdQVlHssjKpI3pCso6kkVWJm1MV1DWkSyyMmljuoKyjmSRlUkb0xWUdSSLrEzamK6grCNZ5GElvWzZstAeb968efWXxvDBD36w1x2rzmQ1Nrr00kuzx5V2+zLTl2HVURtkkUuS/spXvlLftBxnnnlmtWjRomAb8I9//KP+co/xisdksBR45StfWV111VX1zeHYUlc3M30pqaNRIYtckjS9Mgex8cYbV7/97W+r+fPnV+edd15vO0Ky9957V8985jNDv06a9UbxuPjii6tnP/vZwfkM4cFCAPG49tprqxe84AXV6173umqrrbYK7825pN18883Vy172srCfZz3rWdXxxx/fuP0Xv/hF8ILtB6MI3o8AbrbZZiGfE088sXr4wx8etiGip5xySrXvvvuG43vnO985ZuTB8X/4wx+uXv7yl4fv7Ljjjuvt+4QTTqjWWGON6sUvfnH1kY98JFgmmO5QUkejQha5JOlB4nHDDTcEYYArrrii2mmnnXqvLV68uNp8882rf/3rX9Vf//rXaoMNNgjFxlX7aU97WhCQ+D4MnxGPJUuWBG+SKEJNLmlvfvObq/e+973hZ/a/++67h39z2zFJ+vrXvx62p/zpT3+qnvCEJ1T33ntveP7JT36yOvvss8PPG264YW/kccYZZ4TpGcICqXg88YlPDIICf/zjH6uHPexhYWRy4403VquvvnrI48EHHwzfz6Dv1EwtSupoVMgi55L+xCc+EaYRPCjq+PNHP/rR+lurhQsXVh/60IfCz//973/D1RuLAHj1q19dnXrqqb33vv3tbw/FxgiA/UUYoXAsiAci8YhHPKL6z3/+E15rckl73/veV2255ZbV1Vdf3Xs/5LbnuP/++4NAkcef//znMa+l4sH0bIcddui9VhePn/zkJ73XEKPf/e53YTSSWkKee+65Fo+OkaujFYEscknSTSd6HEE89rGP7QkMw3yG98AQnqt45P3vf38otiuvvHK5ofsjH/nInniwz0iTSxojGqYETGmwaoxCldveBIW/5557hn1vt912ofChLh6vfe1re5+pi8evf/3r3mvxOdOXdJ2H3Ju+UzP1KKmjUSGLXJJ004l+0UUXjbkSA0XImgDstddeYZE08ra3vS0UEkP5dOTBaCIdeTz96U/vvVbqkoYREp9jzaRke45//vOf1dFHH1294hWvCM/r4sFaTKREPLCT3GOPPXrbmY41fadm6lFSR6NCFrkk6aYTHXGIU5YURgc//elPg3CwcElBsq7AlIZi4zlrB9/61rfC+ylCFjL7iUeTS9prXvOa3j6Y+rCm8qMf/Si7PbfmgTgwtYh3ipgq7bzzzuFnjJXivtqIB8fL8TMdIm9GNU3fqZl6lNTRqJBFnkjSf/nLX8LaRLzzkXLooYeGUcZ9991X7bbbbtXMmTOrTTbZJKx57LPPPuE9X/va10ITFYSGxU2mKtwlqYsH5FzSKEzuYLAf7oi8+93vbtyeu9vCushhhx0W7gpxd4a7LSwEw7HHHhumZSyWthEP4Lsgv1mzZoWFWETUdIeJ1NFEkUVWJj2dSBdtL7/88nBr23QHZR3JIiuTni7cdddd1WMe85jq5z//eXi+3377VYccckjtXWYqo6wjWWRl0tMJ/jCMKRR/KMbib/12sJnaKOtIFlmZtDFdQVlHssjKpI3pCso6kkVWJm1MV1DWkSyyMmljuoKyjmSRlUkb0xWUdSSLrEzamK6grCNZZGXSxnQFZR3JIiuTNqYrKOtIFlmZtDFdQVlHssjKpI3pCso6kkVWJm1MV1DWkSyyMmljuoKyjmSRlUkb0xWUdSSLrEzamK6grCNZ5GElfeGFF1abbrpptdpqqwWbAVr6pV212tDk1FZK2nx5mDTtl2bNEz1uM7UYVh21QRa5JOlBjnEXXHBBaHZzzjnnhD4V9Bw98sgjqyc/+cnV3XffXX97MTmntlKwgaBz+rDJ7Td2C1u6dGmR3YPpDiV1NCpkkUuSHtSsl07pGDHVQUyif8sXv/jF0IV8vfXWq7bYYovQSxROO+20av/99w92Boxc6Dv6+9//fjmnNsCLBce49ddfP5g6YaAEOae2XXfdtVp55ZVD3FtvvbWvIxzgLRMNolLY/+tf//rwfvqscoz4u9T3i3DiSMdx0LM1jjyuv/768N3QiZ2c11133Z7JFY2W2R/73WabbUKP1djb1Uw9SupoVMgilyTdJB64sLEPCj7HLbfcEgorTmPoqkUzZKChMI2C8WCBAw88sOe6lloe0Cz5uc99boiHVwwFfPrpp4fXck5tdGtHgKDJEY6u6jfddFP4OeVLX/pS6HTOSIORBE2Mf/CDH4zZLzBNO+KII8L7IIoHjZxpthw7r2P2hGgBHefpKo+/zG233RYaL+c8fM3kp6SORoUsci7pUsc4hIF9NJlbMwKJNgYQ3eEQAsSD6UkEQXjjG98Yfk7Fg76fjEYidFOPPrY5p7a0yJsc4XLQoZ0u7sRK86uLB/HT6VUqHnRdj2BFgUgA1hBR/ADRtHhMXXJ1tCKQRS5JumnkwTCdfTQtjjKkj4IQwR2Oz9StDNLnqXggPhRpdIx7xjOeEaY4kLM8qBd5zhGuCUYfiBTCOW/evOVGNEC86CkDqXikFhLpc6ZYmFlF6q5yZmpRUkejQha5JOkm8YCXvOQlPV+UlGOOOSZ0DGfkgbN9hAIkLlOIUvGgsFLnuZRS8YjUHeFKwKNm++23Dzaa9f3W45eIBw5yOMlFDjroIIvHFKakjkaFLHJJ0oPE45JLLgnmTwzDudPA46ijjgrdwhEICokrdywwzJOY70OTeKRObbi8MdKIaxasm8TbpfXijc+ZFrHmwOioyREut+ZBPogiaxk8WNhl0TXdL9Tjl4gHnr2MflhLYZ0GQyiLx9SlpI5GhSzysJLmbzI233zzUDgUEwLAQmCE4T8jCe44bLvttr07HU3ikTq1AUN77tbg6IY/btx/vXjT50wP4ppEzhEud7eFEcYuu+wSPoMQMuXBrhLifq+++url4peIBwK00047BSsGRmU46R1wwAG995qpxbDqqA2yyMqkpzvp34Iwwlm4cGHyqplKKOtIFlmZ9HSGaRijMNZ/GM3gw3v++efX32amCMo6kkVWJj2d4W9VDj744HDXiLtH6d+JmKmHso5kkZVJG9MVlHUki6xM2piuoKwjWWRl0sZ0BWUdySIrkzamKyjrSBZZmbQxXUFZR7LIyqSN6QrKOpJFViZtTFdQ1pEssjJpY7qCso5kkZVJG9MVlHUki6xM2piuoKwjWWRl0sZ0BWUdySIrkzamKyjrSBZZmbQxXUFZR7LIyqSN6QrKOpJFHlbS3/jGN6pZs2YFxzi6l9Ml67rrrqu/Tc6yZcuqGTNmhGbGTdAvNdcWkJaKdoQzKcOqozbIIpckPcgxjhaDFBQ9RbE1oLBo64cZ0o033lh/+8igR8YgaHO4aNGiYOTUZBcxXvEoiW26S0kdjQpZ5JKkBzVAxoUNP5Q68+fPD/1B6e9J05sIncJnz57de04XcwQq5/wGeKfQbQvHOHp+3n777WE73cz33Xff4MyG8RNOdDQnzrHxxhuH/qkc23nnndfbjpDsvffeoV8px7ZgwYKeeODyRo7ERng4TsTj2muvDXHpuRo9ZHLHefPNN4emz+yHHqrYUTRtN1OLkjoaFbLIJUk3iQedv9lHPyOlyy67LEwRgEa/WDMCVg08HnjggdA9i/cwnaCRcD/nN9zkKFgaCAPWlnRCB5oj8/nYUJmWfrT46wcNj6NoXXHFFWFqFVm8eHFo4IyDG82JN9hggyAejCjobB5tInkfJliIx5IlS0Kz4yhCTceJPWZsssz+d9999/BvbruZWpTU0aiQRc4lXeoYhy/LqquuOmZbJB0FYPr0hS98IYgEV1rWHLBupKBT86Z+zm/YJMyZM6e3HYEgJoXNNIRO6iXQYDiOkBAtrvbRS5cR0qmnntp7L93MEQ9yIO9IdLuL3dGxnIiNjJuOE5/dLbfcMnRbTxsf57abqUWujlYEssglSTeNPO66666wj1iEKYw8ops86yFvfetbg+csRYw4nXTSScF/5cgjjwzvqVsYxOd4pXCFj25xPLjCc6VHPDCMHkQcQWDlEIUQ4yamPcBUKfrAAL4qiMeVV14Z4qXgdhfFg31Gmo6TEc0JJ5wQpjR8J1GoctvN1KKkjkaFLHJJ0k3iAc973vP6urnR4BeXecAIe9NNNw1m0QgIV3Q8at/whjdU3/72t8N7cuKBLePcuXN721Pqvi85LrroouVGKIxyWLOAvfbaa0wOHCfiwYJvOvJgNJGOPFJflqbjTMGaks+xZlKy3Ux+SupoVMgilyQ9SDxYJOTOCqMJbBkZhTCqwD3+N7/5Te9966+/fvWiF70omCkxbeA5zvesa0BOPNgf6xrRD/aaa64JC5pQF4/cmgfi0G9Rl9EBBtQIB9MprCg5PqY0iAfPiR2d6xhdMBXrJx5Nx4mxddwHUx/WVHCqy203U4uSOhoVssjDSpoCYDHy0Y9+dBiqM6pgPSQFu0Yc3yIsWDLfj+TEA+JdDIQMG0oc7KEuHv3utiBorE3EOx8phx56aBhlYB252267VTNnzqw22WSTsOaxzz77hPcwUsIxDqFhcZOpCndJ6uIBueNESFjbYT/cJo7evrntZmoxrDpqgyyyMmljuoKyjmSRlUkb0xWUdSSLrEzamK6grCNZZGXSxnQFZR3JIiuTNqYrKOtIFlmZtDFdQVlHssjKpI3pCso6kkVWJm1MV1DWkSyyMmljuoKyjmSRlUkb0xWUdSSLrEzamK6grCNZZGXSxnQFZR3JIiuTNqYrKOtIFlmZtDFdQVlHssjKpI3pCso6kkVWJm1MV1DWkSyyMmljuoKyjmSRJ5o0Vgm0+Ktz0003hUbB9957b2gKXDdJasOw9kPnMDqzRyuI6crHPvax0PUt9nHNcemll2a/95133jn0bm0D3fRpuxg7v0224xkPE62jiSCLXJJ0k2Mc/Tpp8XfPPfeM2f6ud72r1/x46dKlQ7EVGMZ+6KJOK0Q6lk93gyWKNbZabIKWkldddVV9c/hd0OKxyXlvEPScTcVjMh3PeCipo1Ehi1yS9KAGyJtttln18Y9/fMw2+nF+5zvfCT+nIwZ8SnBTo/kxhkcPPvhgOGnSPqS8Fs2fOCEYJWAqFfdz2mmnhX6oWC7QkZ0eoHRnB3qLvvSlLw3HjJMco6LUUoEeo3jIYCq14YYb9rYDPVfx26UvKc2Q8Yxp2s7oih6s5MMxYNMAORe43PZ+fVcju+66a/We97wnXFHpc3rssccGWwgc6oh7/fXXh/fx/dATlu+d951++um9fdBX9sQTT6y23nrr8Jlo71AvVpo7c2zsg98pRlp8DosKtnERwd3vHe94R+jjSkf69Eqfc/yjmPld0QN2m222CX1aY9wm8VAfz3goqaNRIYtckvQg8cAIihMzgpkTto1xlBCLnkbCdEvHEY0RAIXBSc5JwckA+MDQgDjaN9LZnEbC6X5oekxzZPxQ4MADD+yJDeZNNC8GxIsTLR3G7rHHHmHYC5w4NCAGurnTuPj8888Pz+n+jlVDbjtstNFGPRMs9sMJjBjmXOBy23Md34H3IAocB2KFiVQUQ4SE3OHwww8PggqIFIbjt912W3iOdQQjQaAJNN/jLbfcMqZY6RiPSDPNBGKcffbZ4WdENl7paRKNs979998fnqfFmnP8o2s9oolHDcfEuRGtPHPiMRmOZzyU1NGokEXOJV3qGAdMWdLRBSd0PFkhvrbffvuFK0eEUUAUCX6BTEso0qOPPjrMe7E94IRhjSLdD+LB0DWCADGaALqfIzgRrrTxZLr77rvDFT+KGjm+5S1vCT8zckn9WYjNiZTbTvFxPOk0CgvN733ve1kXuNz2JhCPs846K/yM4PL74nuCz372s73vgUKIBQRMzeJIiONPnfgoNszJ02Lls1ypKay6dWharBwPU75IvVj7Of5hL5GOhDg/+hXrZDue8ZCroxWBLHJJ0oNGHsAwEGHgylu3UIhFzy+W16KbGubX0WqSk4aRCa5yF154YRADigzzaYaj6X7qdgvp84c+9KFjFtMYssaTCSFiJBKFEPe4Jz3pSUEQGDkgYHVy2/FW4SSLufBgXxRlzgUut70JiiOddvH74gSHc889N3yn8OMf/ziMUDDyZirHOlS0fSBXRiMR3sdFoD5NoND23HPPULTbbbddb3pWL9b0AlIv1n7WGenvAJg+9CvWyXY846GkjkaFLHJJ0iXicckll4TRwgUXXBCubCmx6PkF9XOWg0996lPVUUcdFU5+RghccSguYsdiKREPCjj1i2H9JJ4oTIfqC21cub/61a+GEQZrA3FEgAiyFpHbznGkI5IcORe43PY6peLBSOOcc87pvY/vLRUPxCXCmhDrBfVijSCmjP5YT4B6sfK5SEmxMlWMoyc46KCD+hbrZDue8VBSR6NCFrkk6RLxoLjWWGONsI6QnsQQi555PSONOI/FpzYWBtMAhCPepmPqwSJZKkQl4sFVlbUAYATDFZiTCdvIpz71qWHtIIWpC072bOekjMfDomxc8+i3HXC/+/znPx9+Zq2GURInX84FLrd90JpHiXhQGFEgyJdRVYyFeGBuBawvcQudtY+0WClGvod4pwLT7rhv1pzivtoUKwu8jBw4R1h7YG2oX7FOtuMZDyV1NCpkkYeZNFeH+LcdKel6CENErpKsPVCEcVEPEKn58+eHn/nFYmF5zDHH9F4vEQ9c3JgWrLvuuuGKwtWKtQFGNXFxMYWFOQSGefWSJUvC6IQpRXpXJbedBUzWbDhu4kU7y5wLXG57092WUvFgSsY0EKFjxMbvgpENoox4UDB4CiPwceExLVa+78MOOyxM0fjdINw33HBDeA0xRozOOOOMVsXKojCiTuwdd9wxLGgfcMAB4T058ZgMxzMehllH40UWWZn0qEgXI1mgZAQynUE8uMLWyU0TRkH6O0E0Fy5cGH7OiceoKTme8aCsI1lkZdKjgDszLN4y3fjlL38ZCife0p2u8B2ki8iRFVWsTMkYmXGblOJMb30rxKP0eMaDso5kkZVJjwKc6pnPMoTnD4w+97nP1d8y7WgSj5I/B58o3GI++OCDw++Eu1JHHHFEEPf6n4NPtuMZD8o6kkVWJm1MV1DWkSyyMmljuoKyjmSRlUkb0xWUdSSLrEzamK6grCNZZGXSxnQFZR3JIiuTNqYrKOtIFlmZtDFdQVlHssjKpI3pCso6kkVWJm1MV1DWkSyyMmljuoKyjmSRlUkb0xWUdSSLrEzamK6grCNZZGXSxnQFZR3JIiuTNqYrKOtIFnkYSc+ePTt0WOe/MqeP2A6wTvwv4rTgiy0OaQ5Mx6869Nsc9X/RngqU/nf1tOtYnbSj23ip/3f1YRxP2vVrvNSPR80w6qgtssglSTc5xgHiMZ6TIIoHgkEbQKBTduwNGqGR8fbbb1/NnTu3+uEPfzjmtelGSaMcelLQKrEfdM6aqOPeeBv3DDoelbvbKCipo1Ehi1yS9KAGyIPE4+KLLw6NefBQWbRoUbhipSMPep7ST5Iu5dtuu23vczRpoUExTYbpR5ry5S9/OeyPPp3YWj7wwAON2/GIoWMUr9G3kgbAgCVBPxe33PamfqPkRVducqDJDF3ZaayLFQKNnGPv0djLlD6mmGBddtllYTsNjHlOs2K+U/qRXn755eG1tFjp4E5ufJ44dE7D5wQTrZVXXjl8Dh/euptaHHngMseIgT6nW2yxReiqxe8ISt3UhnE8ceQxjONRU1JHo0IWuSTpiYgHXZs4WeLJsHjx4jDFqU9b8DtJRx58jpMRQynaxdEINwoBTZNnzJgRCpz37bLLLsEPJbedNoQUNs2R4eSTTw6duSHn4pbbzgmb63ROg10c5YDO8Li2xQa8OOrRsBjouk43cEAYETS47rrrQrFhYwH42FBIkBYr3xXd0riycwWn9SIufYzi8KWJ1N3UonjwPVB0sQM5x0WDYSh1UxvG8UTxGMbxqCmpo1Ehi5xLejyOcYgHZkucKOmDNv9cqVN/E64kxBwkHjQtxjoyggkUowrA4yV1jENcEJbcdgp1zpw5ve2cdNg2IjA5F7fc9iYQj+gZg9Ulc/II3bmjyRPFQ2xgBMR3B4hH+l1RMIgJRZgWK34sjKwYTaXD/nqx1t3UUvGg+3gEm4tobFXqpjaM40nFY6LHoyZXRysCWeSSpCcy8sDykCFnCvYMg8QDpzBO9iha/BxNf7ARiPaSKbntGCbzeY4jPhiJMCLJubjltjeBeDDqAaYb0Q0POOk5DuDKyhU4mnTHAkA8+n1XGETV1xj4vrB94LuZN29eEMp+xZqKfSoeFHskfV7qpjaM40nFY6LHo6akjkaFLHJJ0hMRD8yW0qspv/BBIw8W0ph+MJeOUMwUMeZKjDBYt4jgMMecOredY2PRdRA5F7fc9jol4oEFAtMZvhfge0jFA6+aaEzFqInvatmyZcsVa4TvikXlU045pW+x8rlIiXiUuqkN43hKxKP0eNSU1NGokEUuSXoi4oFVIEIQ57MUEL/wungwv581a1YoHNZF0ilLhFEFQ1gKEEHCBIjhPycYo4TcdjqqcwyIALBguWDBgvBzzsUtt33Qmscg8aAwsMREGDhG/EKYmjCVQTz4bhBS4DtlsRHSYuU7YOGQ74rH/vvvH/bNmgyfv++++8L76sVaIh6lbmrDOJ4S8Sg9HjUldTQqZJGHkXTu7zy4AgHCgEsaQ3IWITkBKLJUPJhCMM/lpGE4HxcXU7h7EQuS+/wsJs6cOXPMXZXc9ni3hXjYFUYf15yLW257092WEvEARJDvYqONNqq++93vhgVBFggRD4798MMPD656LKSy8AhpsXJFZzGY74vjY4pHIQHDfI6DtZp6sZaIR6mb2jCOp0Q8So9HzTDqqC2yyMqkzVgQD24N9yM3TRgFJW5qk+141CjrSBZZmbQZC+KRmyKuqGItdVObbMejRllHssjKpM1YBolHyZ+DT5RSN7XJdjxqlHUki6xM2piuoKwjWWRl0sZ0BWUdySIrkzamKyjrSBZZmbQxXUFZR7LIyqSN6QrKOpJF5v8jkLgffvjR/kEdqZCJhzFmamPxMMa0wuJhjGmFxcMY0wqLhzGmFRYPY0wrLB7GmFZYPIwxrbB4GGNaYfEwxrTC4mGMaYXFwxjTCouHMaYVFg9jTCssHsaYVlg8jDGtsHgYY1ph8TDGtMLiYYxphcXDGNMKi4cxphUWD2NMKywexphWWDyMMa2weBhjWmHxMMa0wuJhjGmFxcMY0wqLhzGmFRYPY0wrLB7GmFZYPIwxrbB4GGNa8T+Jg9FLWZvRrAAAAABJRU5ErkJggg=="}}]); \ No newline at end of file diff --git a/assets/js/8b564e48.05d51292.js b/assets/js/8b564e48.edcb4052.js similarity index 55% rename from assets/js/8b564e48.05d51292.js rename to assets/js/8b564e48.edcb4052.js index 0ac0c5f..df0d08c 100644 --- a/assets/js/8b564e48.05d51292.js +++ b/assets/js/8b564e48.edcb4052.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[5689],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=o.createContext({}),c=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=c(e.components);return o.createElement(l.Provider,{value:t},e.children)},d="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=c(r),u=n,f=d["".concat(l,".").concat(u)]||d[u]||h[u]||a;return r?o.createElement(f,i(i({ref:t},p),{},{components:r})):o.createElement(f,i({ref:t},p))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[d]="string"==typeof e?e:n,i[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var o=r(7462),n=(r(7294),r(3905));const a={sidebar_position:1},i="Jackal Proof-of-Persistence Documentation",s={unversionedId:"protocol/p-o-p",id:"protocol/p-o-p",title:"Jackal Proof-of-Persistence Documentation",description:"Overview",source:"@site/docs/protocol/p-o-p.md",sourceDirName:"protocol",slug:"/protocol/p-o-p",permalink:"/docs/protocol/p-o-p",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/protocol/p-o-p.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Filetree Module",permalink:"/docs/protocol/modules/filetree"},next:{title:"JKL Token",permalink:"/docs/protocol/tokens"}},l={},c=[{value:"Overview",id:"overview",level:2},{value:"Building the Trees",id:"building-the-trees",level:2},{value:"Proving Data Availability",id:"proving-data-availability",level:2}],p={toc:c},d="wrapper";function h(e){let{components:t,...a}=e;return(0,n.kt)(d,(0,o.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"jackal-proof-of-persistence-documentation"},"Jackal Proof-of-Persistence Documentation"),(0,n.kt)("h2",{id:"overview"},"Overview"),(0,n.kt)("p",null,"Jackal Storage is powered by a Proof-of-Storage algorithm called Proof-of-Persistence (JPOP). JPOP is designed to ensure the secure and persistent storage of user data through a series of contracts formed between the storage provider and the user. These contracts contain the Merkle Tree root hash of the file and the information required to prove ownership of the file. In this documentation, we'll explain the core components and processes involved in the Jackal Proof-of-Persistence."),(0,n.kt)("h2",{id:"building-the-trees"},"Building the Trees"),(0,n.kt)("p",null,"Merkle Trees are a core component of the JPOP mechanism, thus, it is important to outline how these trees are used to create efficient and trustworthy proofs. When saving a file for the first time, providers split each file into many 1kb chunks. Providers must also hash the entire file to create a folder to house every chunk, this is displayed by the following diagram."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"File Tree",src:r(4671).Z,width:"601",height:"382"})),(0,n.kt)("p",null,"These chunks are used as leaves on the Merkle Tree defining each storage contract. Immediately after saving a file to disk, the storage provider builds a tree using each chunk. To create this tree, each chunk is hashed into a respective Hashed Chunk. These chunks are then recursively paired together and hashed until a single root node is created. This is called the Merkle Root, the only piece of data relative to a file that is saved directly on the blockchain itself."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Merkle Roots",src:r(9302).Z,width:"601",height:"512"})),(0,n.kt)("p",null,"In the diagram above, displays how each file is hashed together to create a single root node."),(0,n.kt)("h2",{id:"proving-data-availability"},"Proving Data Availability"),(0,n.kt)("p",null,"These nodes are essential as they only require the nodes below them to prove they are part of the tree. This means that we can create a proof claiming a single chunk belongs to the file using the Merkle Root saved on the chain. In the following diagram, we can see that only the blue nodes are required to build a successful proof. The green nodes represent information that we can generate given the blue nodes. Finally, we can compare the root generated from the proof to the root saved on the chain and determine if the chunk does belong to the contract we are proving. This results in small message sizes due to not needing to send the entire file every proof."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Merkle Roots Graphed",src:r(9614).Z,width:"601",height:"512"})))}h.isMDXComponent=!0},4671:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/tree1-9d95b0b5007debff9495443e8075c918.png"},9302:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/tree2-6ed53d85e2efa8a87bfd1bc6b88757e5.png"},9614:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/tree3-4f9ab62526b9143823b59eebc0f2b724.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[5689],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=o.createContext({}),c=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=c(e.components);return o.createElement(l.Provider,{value:t},e.children)},d="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=c(r),u=n,f=d["".concat(l,".").concat(u)]||d[u]||h[u]||a;return r?o.createElement(f,i(i({ref:t},p),{},{components:r})):o.createElement(f,i({ref:t},p))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[d]="string"==typeof e?e:n,i[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var o=r(7462),n=(r(7294),r(3905));const a={sidebar_position:1},i="Jackal Proof-of-Persistence Documentation",s={unversionedId:"protocol/p-o-p",id:"protocol/p-o-p",title:"Jackal Proof-of-Persistence Documentation",description:"Overview",source:"@site/docs/protocol/p-o-p.md",sourceDirName:"protocol",slug:"/protocol/p-o-p",permalink:"/docs/protocol/p-o-p",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/protocol/p-o-p.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Filetree Module",permalink:"/docs/protocol/modules/filetree"},next:{title:"JKL Token",permalink:"/docs/protocol/tokens"}},l={},c=[{value:"Overview",id:"overview",level:2},{value:"Building the Trees",id:"building-the-trees",level:2},{value:"Proving Data Availability",id:"proving-data-availability",level:2}],p={toc:c},d="wrapper";function h(e){let{components:t,...a}=e;return(0,n.kt)(d,(0,o.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"jackal-proof-of-persistence-documentation"},"Jackal Proof-of-Persistence Documentation"),(0,n.kt)("h2",{id:"overview"},"Overview"),(0,n.kt)("p",null,"Jackal Storage is powered by a Proof-of-Storage algorithm called Proof-of-Persistence (JPOP). JPOP is designed to ensure\nthe secure and persistent storage of user data through a series of contracts formed between the storage provider and the\nuser. These contracts contain the Merkle Tree root hash of the file and the information required to prove ownership of\nthe file. In this documentation, we'll explain the core components and processes involved in the Jackal\nProof-of-Persistence."),(0,n.kt)("h2",{id:"building-the-trees"},"Building the Trees"),(0,n.kt)("p",null,"Merkle Trees are a core component of the JPOP mechanism, thus, it is important to outline how these trees are used to\ncreate efficient and trustworthy proofs. When saving a file for the first time, providers split each file into many 1kb\nchunks. Providers must also hash the entire file to create a folder to house every chunk, this is displayed by the\nfollowing diagram."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"File Tree",src:r(4671).Z,width:"601",height:"382"})),(0,n.kt)("p",null,"These chunks are used as leaves on the Merkle Tree defining each storage contract. Immediately after saving a file to\ndisk, the storage provider builds a tree using each chunk. To create this tree, each chunk is hashed into a respective\nHashed Chunk. These chunks are then recursively paired together and hashed until a single root node is created. This is\ncalled the Merkle Root, the only piece of data relative to a file that is saved directly on the blockchain itself."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Merkle Roots",src:r(9302).Z,width:"601",height:"512"})),(0,n.kt)("p",null,"In the diagram above, displays how each file is hashed together to create a single root node."),(0,n.kt)("h2",{id:"proving-data-availability"},"Proving Data Availability"),(0,n.kt)("p",null,"These nodes are essential as they only require the nodes below them to prove they are part of the tree. This means that\nwe can create a proof claiming a single chunk belongs to the file using the Merkle Root saved on the chain. In the\nfollowing diagram, we can see that only the blue nodes are required to build a successful proof. The green nodes\nrepresent information that we can generate given the blue nodes. Finally, we can compare the root generated from the\nproof to the root saved on the chain and determine if the chunk does belong to the contract we are proving. This results\nin small message sizes due to not needing to send the entire file every proof."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Merkle Roots Graphed",src:r(9614).Z,width:"601",height:"512"})))}h.isMDXComponent=!0},4671:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/tree1-9d95b0b5007debff9495443e8075c918.png"},9302:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/tree2-6ed53d85e2efa8a87bfd1bc6b88757e5.png"},9614:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/tree3-4f9ab62526b9143823b59eebc0f2b724.png"}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.304461de.js b/assets/js/935f2afb.304461de.js new file mode 100644 index 0000000..25da92c --- /dev/null +++ b/assets/js/935f2afb.304461de.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Welcome to Jackal Wiki","href":"/docs/intro","docId":"intro"},{"type":"category","label":"Overview","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Discover the Jackal Protocol","href":"/docs/overview/jackal-tldr","docId":"overview/jackal-tldr"},{"type":"link","label":"What Is The JKL Token?","href":"/docs/overview/jkl","docId":"overview/jkl"},{"type":"link","label":"Why Choose Jackal Protocol","href":"/docs/overview/why-jackal","docId":"overview/why-jackal"}]},{"type":"category","label":"Using Jackal","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Wallets","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Keplr Wallet","href":"/docs/using-jackal/wallet/keplr","docId":"using-jackal/wallet/keplr"}]},{"type":"link","label":"Accessing JKL Tokens on Osmosis and Withdrawing to Jackal Protocol","href":"/docs/using-jackal/fund","docId":"using-jackal/fund"},{"type":"link","label":"How to Delegate JKL Tokens to a Validator","href":"/docs/using-jackal/delegate","docId":"using-jackal/delegate"},{"type":"link","label":"Jackal Dashboard Guide","href":"/docs/using-jackal/dashboard","docId":"using-jackal/dashboard"}]},{"type":"category","label":"Community and Contributors","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Join the Community!","href":"/docs/contributors/join","docId":"contributors/join"},{"type":"link","label":"Jackal Foundation","href":"/docs/contributors/foundation","docId":"contributors/foundation"},{"type":"link","label":"Jackal Labs","href":"/docs/contributors/labs","docId":"contributors/labs"}]},{"type":"category","label":"The Protocol","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Blockchain Modules","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Module Overview","href":"/docs/protocol/modules/module-overview","docId":"protocol/modules/module-overview"},{"type":"link","label":"JKLmint Module","href":"/docs/protocol/modules/jklmint","docId":"protocol/modules/jklmint"},{"type":"link","label":"LP Module (Coming Soon)","href":"/docs/protocol/modules/lp","docId":"protocol/modules/lp"},{"type":"link","label":"Name Service Module","href":"/docs/protocol/modules/rns","docId":"protocol/modules/rns"},{"type":"link","label":"WASM Module","href":"/docs/protocol/modules/wasm","docId":"protocol/modules/wasm"},{"type":"link","label":"Storage Module","href":"/docs/protocol/modules/storage","docId":"protocol/modules/storage"},{"type":"link","label":"dsig Module","href":"/docs/protocol/modules/dsig","docId":"protocol/modules/dsig"},{"type":"link","label":"Filetree Module","href":"/docs/protocol/modules/filetree","docId":"protocol/modules/filetree"}]},{"type":"link","label":"Jackal Proof-of-Persistence Documentation","href":"/docs/protocol/p-o-p","docId":"protocol/p-o-p"},{"type":"link","label":"JKL Token","href":"/docs/protocol/tokens","docId":"protocol/tokens"},{"type":"link","label":"Encryption in Jackal Protocol","href":"/docs/protocol/encryption","docId":"protocol/encryption"},{"type":"link","label":"Validators","href":"/docs/protocol/validators","docId":"protocol/validators"}]},{"type":"category","label":"Official Links","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Jackal Protocol Links","href":"/docs/official-links/jackal-protocol","docId":"official-links/jackal-protocol"},{"type":"link","label":"Jackal Foundation Links","href":"/docs/official-links/jackal-foundation","docId":"official-links/jackal-foundation"},{"type":"link","label":"Jackal Labs Links","href":"/docs/official-links/jackal-labs","docId":"official-links/jackal-labs"}]},{"type":"category","label":"Ecosystem","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Grants and Funding","href":"/docs/ecosystem/grants-funding","docId":"ecosystem/grants-funding"},{"type":"link","label":"Partnerships","href":"/docs/ecosystem/partnerships","docId":"ecosystem/partnerships"}]},{"type":"category","label":"Nodes & Providers","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Setting Up","href":"/docs/nodes/install","docId":"nodes/install"},{"type":"category","label":"Full Nodes","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Hardware","href":"/docs/nodes/nodes/hardware","docId":"nodes/nodes/hardware"},{"type":"link","label":"Installing Canined","href":"/docs/nodes/nodes/installation","docId":"nodes/nodes/installation"},{"type":"link","label":"Joining Testnet","href":"/docs/nodes/nodes/testnet","docId":"nodes/nodes/testnet"},{"type":"link","label":"Joining Mainnet","href":"/docs/nodes/nodes/mainnet","docId":"nodes/nodes/mainnet"}]},{"type":"category","label":"Validators","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Creating Validator","href":"/docs/nodes/validators/joining","docId":"nodes/validators/joining"}]},{"type":"category","label":"Storage Providers","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Hardware","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"DIY Build","href":"/docs/nodes/providers/hardware/diy-serious copy","docId":"nodes/providers/hardware/diy-serious copy"},{"type":"link","label":"Enterprise Build","href":"/docs/nodes/providers/hardware/enterprise","docId":"nodes/providers/hardware/enterprise"}]},{"type":"link","label":"Creating Provider","href":"/docs/nodes/providers/building","docId":"nodes/providers/building"},{"type":"link","label":"Setting Up JProvd","href":"/docs/nodes/providers/setting_up","docId":"nodes/providers/setting_up"}]}]},{"type":"category","label":"Developers","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"dApp Libraries","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"About These Libraries","href":"/docs/developers/dAppLibraries/intro","docId":"developers/dAppLibraries/intro"},{"type":"link","label":"Jackal.js-protos / Jackal.nodejs-protos","href":"/docs/developers/dAppLibraries/jackal_protos","docId":"developers/dAppLibraries/jackal_protos"},{"type":"link","label":"Jackal.js","href":"/docs/developers/dAppLibraries/jackal_js","docId":"developers/dAppLibraries/jackal_js"},{"type":"link","label":"Jackal.nodejs","href":"/docs/developers/dAppLibraries/jackal_nodejs","docId":"developers/dAppLibraries/jackal_nodejs"},{"type":"link","label":"Jackal.go","href":"/docs/developers/dAppLibraries/jackal_go","docId":"developers/dAppLibraries/jackal_go"}]},{"type":"category","label":"APIs","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"About Jackal APIs","href":"/docs/developers/apis/intro","docId":"developers/apis/intro"},{"type":"link","label":"APIs","href":"/docs/developers/apis/apis","docId":"developers/apis/apis"}]},{"type":"link","label":"Getting Started","href":"/docs/developers/intro","docId":"developers/intro"}]}]},"docs":{"contributors/foundation":{"id":"contributors/foundation","title":"Jackal Foundation","description":"What is the Jackal Foundation?","sidebar":"tutorialSidebar"},"contributors/join":{"id":"contributors/join","title":"Join the Community!","description":"The Jackal Community is open to all.","sidebar":"tutorialSidebar"},"contributors/labs":{"id":"contributors/labs","title":"Jackal Labs","description":"Who is Jackal Labs?","sidebar":"tutorialSidebar"},"developers/apis/apis":{"id":"developers/apis/apis","title":"APIs","description":"Self Custodial","sidebar":"tutorialSidebar"},"developers/apis/intro":{"id":"developers/apis/intro","title":"About Jackal APIs","description":"Coming Soon","sidebar":"tutorialSidebar"},"developers/dAppLibraries/intro":{"id":"developers/dAppLibraries/intro","title":"About These Libraries","description":"The following sections outline the basics of how to use the available libraries to interact with the Jackal chain. These","sidebar":"tutorialSidebar"},"developers/dAppLibraries/jackal_go":{"id":"developers/dAppLibraries/jackal_go","title":"Jackal.go","description":"Quickstart","sidebar":"tutorialSidebar"},"developers/dAppLibraries/jackal_js":{"id":"developers/dAppLibraries/jackal_js","title":"Jackal.js","description":"Implements Jacakl.js-protos","sidebar":"tutorialSidebar"},"developers/dAppLibraries/jackal_nodejs":{"id":"developers/dAppLibraries/jackal_nodejs","title":"Jackal.nodejs","description":"Quickstart","sidebar":"tutorialSidebar"},"developers/dAppLibraries/jackal_protos":{"id":"developers/dAppLibraries/jackal_protos","title":"Jackal.js-protos / Jackal.nodejs-protos","description":"About","sidebar":"tutorialSidebar"},"developers/intro":{"id":"developers/intro","title":"Getting Started","description":"Web-Apps","sidebar":"tutorialSidebar"},"ecosystem/grants-funding":{"id":"ecosystem/grants-funding","title":"Grants and Funding","description":"The Jackal Foundation facilitates non-equity grants, seed funding, and beyond through our various funding programs.","sidebar":"tutorialSidebar"},"ecosystem/partnerships":{"id":"ecosystem/partnerships","title":"Partnerships","description":"Blockchain and web3 native software engineering teams often wish to become core contributors through a partnership with","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Welcome to Jackal Wiki","description":"Welcome, explorer, to the Jackal Wiki, where you\'ll embark on a journey to discover a more secure, simple, and","sidebar":"tutorialSidebar"},"nodes/install":{"id":"nodes/install","title":"Setting Up","description":"Pre-Requisites","sidebar":"tutorialSidebar"},"nodes/nodes/hardware":{"id":"nodes/nodes/hardware","title":"Hardware","description":"We recommend a minimum hardware requirement of:","sidebar":"tutorialSidebar"},"nodes/nodes/installation":{"id":"nodes/nodes/installation","title":"Installing Canined","description":"Pre-Requisites","sidebar":"tutorialSidebar"},"nodes/nodes/mainnet":{"id":"nodes/nodes/mainnet","title":"Joining Mainnet","description":"Perform the following as the jackal user.","sidebar":"tutorialSidebar"},"nodes/nodes/testnet":{"id":"nodes/nodes/testnet","title":"Joining Testnet","description":"After installing canined. You can join the testnet by following these steps:","sidebar":"tutorialSidebar"},"nodes/providers/building":{"id":"nodes/providers/building","title":"Creating Provider","description":"Disclaimer","sidebar":"tutorialSidebar"},"nodes/providers/hardware/diy-serious copy":{"id":"nodes/providers/hardware/diy-serious copy","title":"DIY Build","description":"For DIY individuals looking to power web3 infrastructure and increase your ROI- here is the recommended system for","sidebar":"tutorialSidebar"},"nodes/providers/hardware/enterprise":{"id":"nodes/providers/hardware/enterprise","title":"Enterprise Build","description":"For teams looking to build a large storage system of ~2.1 Petabytes of storage, the estimated base price of the box with","sidebar":"tutorialSidebar"},"nodes/providers/setting_up":{"id":"nodes/providers/setting_up","title":"Setting Up JProvd","description":"Pre-Requisites","sidebar":"tutorialSidebar"},"nodes/validators/joining":{"id":"nodes/validators/joining","title":"Creating Validator","description":"This guide assumes you are using the same machine as the full node.","sidebar":"tutorialSidebar"},"official-links/jackal-foundation":{"id":"official-links/jackal-foundation","title":"Jackal Foundation Links","description":"Here are the official website links for Jackal Foundation. Please use and bookmark these links to reduce the likelihood","sidebar":"tutorialSidebar"},"official-links/jackal-labs":{"id":"official-links/jackal-labs","title":"Jackal Labs Links","description":"Here are the official website links for Jackal Labs. Please use and bookmark these links to reduce the likelihood of","sidebar":"tutorialSidebar"},"official-links/jackal-protocol":{"id":"official-links/jackal-protocol","title":"Jackal Protocol Links","description":"Here are the official website links of the Jackal Protocol. Please use and bookmark these links to reduce the likelihood","sidebar":"tutorialSidebar"},"overview/jackal-tldr":{"id":"overview/jackal-tldr","title":"Discover the Jackal Protocol","description":"The Jackal Protocol provides a decentralized infrastructure for secure and scalable data storage, enabling individuals,","sidebar":"tutorialSidebar"},"overview/jkl":{"id":"overview/jkl","title":"What Is The JKL Token?","description":"The JKL Token is the driving force behind the revolutionary Jackal Protocol. This versatile native token seamlessly","sidebar":"tutorialSidebar"},"overview/why-jackal":{"id":"overview/why-jackal","title":"Why Choose Jackal Protocol","description":"The Jackal Protocol offers various advantages for individuals, small businesses, and large enterprises seeking secure,","sidebar":"tutorialSidebar"},"protocol/encryption":{"id":"protocol/encryption","title":"Encryption in Jackal Protocol","description":"The Jackal Protocol utilizes encryption techniques to ensure the privacy and security of user data. The two primary","sidebar":"tutorialSidebar"},"protocol/modules/dsig":{"id":"protocol/modules/dsig","title":"dsig Module","description":"Coming Soon","sidebar":"tutorialSidebar"},"protocol/modules/filetree":{"id":"protocol/modules/filetree","title":"Filetree Module","description":"Overview","sidebar":"tutorialSidebar"},"protocol/modules/jklmint":{"id":"protocol/modules/jklmint","title":"JKLmint Module","description":"The jklmint module is responsible for the management of the native JKL token within the Jackal Protocol. This module","sidebar":"tutorialSidebar"},"protocol/modules/lp":{"id":"protocol/modules/lp","title":"LP Module (Coming Soon)","description":"The lp (Liquidity Provision) module is a vital part of the Jackal Protocol, enabling the creation and management of","sidebar":"tutorialSidebar"},"protocol/modules/module-overview":{"id":"protocol/modules/module-overview","title":"Module Overview","description":"Protocol Overview","sidebar":"tutorialSidebar"},"protocol/modules/rns":{"id":"protocol/modules/rns","title":"Name Service Module","description":"The rns (Reverse Name Service) module is an essential component of the Jackal Protocol, providing a user-friendly","sidebar":"tutorialSidebar"},"protocol/modules/storage":{"id":"protocol/modules/storage","title":"Storage Module","description":"The Jackal Protocol incorporates two crucial algorithms for decentralized storage: Jackal Proof-of-Persistence (JPOP)","sidebar":"tutorialSidebar"},"protocol/modules/wasm":{"id":"protocol/modules/wasm","title":"WASM Module","description":"The wasm module in the Jackal Protocol incorporates the CosmWasm smart contracting platform, which is designed","sidebar":"tutorialSidebar"},"protocol/p-o-p":{"id":"protocol/p-o-p","title":"Jackal Proof-of-Persistence Documentation","description":"Overview","sidebar":"tutorialSidebar"},"protocol/tokens":{"id":"protocol/tokens","title":"JKL Token","description":"Overview","sidebar":"tutorialSidebar"},"protocol/validators":{"id":"protocol/validators","title":"Validators","description":"The Jackal Validators are secure web servers, dedicated machines that participate in the consensus protocol by","sidebar":"tutorialSidebar"},"using-jackal/dashboard":{"id":"using-jackal/dashboard","title":"Jackal Dashboard Guide","description":"The Jackal Dashboard is your one-stop destination for interacting with the Jackal Protocol and Cosmos ecosystem. This","sidebar":"tutorialSidebar"},"using-jackal/delegate":{"id":"using-jackal/delegate","title":"How to Delegate JKL Tokens to a Validator","description":"This guide will help you delegate your JKL tokens to a validator on the Jackal Protocol, which helps secure the network","sidebar":"tutorialSidebar"},"using-jackal/fund":{"id":"using-jackal/fund","title":"Accessing JKL Tokens on Osmosis and Withdrawing to Jackal Protocol","description":"This guide will help you access JKL tokens on the Osmosis Decentralized Exchange (DEX) and withdraw them to the Jackal","sidebar":"tutorialSidebar"},"using-jackal/wallet/keplr":{"id":"using-jackal/wallet/keplr","title":"Keplr Wallet","description":"The Keplr browser extension is a wallet for accessing some Jackal applications in","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.47dbf325.js b/assets/js/935f2afb.47dbf325.js deleted file mode 100644 index 8bd3056..0000000 --- a/assets/js/935f2afb.47dbf325.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Welcome to Jackal Wiki","href":"/docs/intro","docId":"intro"},{"type":"category","label":"Overview","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Discover the Jackal Protocol","href":"/docs/overview/jackal-tldr","docId":"overview/jackal-tldr"},{"type":"link","label":"What Is The JKL Token?","href":"/docs/overview/jkl","docId":"overview/jkl"},{"type":"link","label":"Why Choose Jackal Protocol","href":"/docs/overview/why-jackal","docId":"overview/why-jackal"}]},{"type":"category","label":"Using Jackal","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Wallets","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Keplr Wallet","href":"/docs/using-jackal/wallet/keplr","docId":"using-jackal/wallet/keplr"}]},{"type":"link","label":"Accessing JKL Tokens on Osmosis and Withdrawing to Jackal Protocol","href":"/docs/using-jackal/fund","docId":"using-jackal/fund"},{"type":"link","label":"How to Delegate JKL Tokens to a Validator","href":"/docs/using-jackal/delegate","docId":"using-jackal/delegate"},{"type":"link","label":"Jackal Dashboard Guide","href":"/docs/using-jackal/dashboard","docId":"using-jackal/dashboard"}]},{"type":"category","label":"Community and Contributors","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Join the Community!","href":"/docs/contributors/join","docId":"contributors/join"},{"type":"link","label":"Jackal Foundation","href":"/docs/contributors/foundation","docId":"contributors/foundation"},{"type":"link","label":"Jackal Labs","href":"/docs/contributors/labs","docId":"contributors/labs"}]},{"type":"category","label":"The Protocol","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Blockchain Modules","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Module Overview","href":"/docs/protocol/modules/module-overview","docId":"protocol/modules/module-overview"},{"type":"link","label":"JKLmint Module","href":"/docs/protocol/modules/jklmint","docId":"protocol/modules/jklmint"},{"type":"link","label":"LP Module (Coming Soon)","href":"/docs/protocol/modules/lp","docId":"protocol/modules/lp"},{"type":"link","label":"Name Service Module","href":"/docs/protocol/modules/rns","docId":"protocol/modules/rns"},{"type":"link","label":"WASM Module","href":"/docs/protocol/modules/wasm","docId":"protocol/modules/wasm"},{"type":"link","label":"Storage Module","href":"/docs/protocol/modules/storage","docId":"protocol/modules/storage"},{"type":"link","label":"dsig Module","href":"/docs/protocol/modules/dsig","docId":"protocol/modules/dsig"},{"type":"link","label":"Filetree Module","href":"/docs/protocol/modules/filetree","docId":"protocol/modules/filetree"}]},{"type":"link","label":"Jackal Proof-of-Persistence Documentation","href":"/docs/protocol/p-o-p","docId":"protocol/p-o-p"},{"type":"link","label":"JKL Token","href":"/docs/protocol/tokens","docId":"protocol/tokens"},{"type":"link","label":"Encryption in Jackal Protocol","href":"/docs/protocol/encryption","docId":"protocol/encryption"},{"type":"link","label":"Validators","href":"/docs/protocol/validators","docId":"protocol/validators"}]},{"type":"category","label":"Official Links","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Jackal Protocol Links","href":"/docs/official-links/jackal-protocol","docId":"official-links/jackal-protocol"},{"type":"link","label":"Jackal Foundation Links","href":"/docs/official-links/jackal-foundation","docId":"official-links/jackal-foundation"},{"type":"link","label":"Jackal Labs Links","href":"/docs/official-links/jackal-labs","docId":"official-links/jackal-labs"}]},{"type":"category","label":"Ecosystem","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Grants and Funding","href":"/docs/ecosystem/grants-funding","docId":"ecosystem/grants-funding"},{"type":"link","label":"Partnerships","href":"/docs/ecosystem/partnerships","docId":"ecosystem/partnerships"}]},{"type":"category","label":"Nodes & Providers","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Setting Up","href":"/docs/nodes/install","docId":"nodes/install"},{"type":"category","label":"Full Nodes","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Hardware","href":"/docs/nodes/nodes/hardware","docId":"nodes/nodes/hardware"},{"type":"link","label":"Installing Canined","href":"/docs/nodes/nodes/installation","docId":"nodes/nodes/installation"},{"type":"link","label":"Joining Testnet","href":"/docs/nodes/nodes/testnet","docId":"nodes/nodes/testnet"},{"type":"link","label":"Joining Mainnet","href":"/docs/nodes/nodes/mainnet","docId":"nodes/nodes/mainnet"}]},{"type":"category","label":"Validators","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Creating Validator","href":"/docs/nodes/validators/joining","docId":"nodes/validators/joining"}]},{"type":"category","label":"Storage Providers","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Hardware","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"DIY Build","href":"/docs/nodes/providers/hardware/diy-serious copy","docId":"nodes/providers/hardware/diy-serious copy"},{"type":"link","label":"Enterprise Build","href":"/docs/nodes/providers/hardware/enterprise","docId":"nodes/providers/hardware/enterprise"}]},{"type":"link","label":"Creating Provider","href":"/docs/nodes/providers/building","docId":"nodes/providers/building"},{"type":"link","label":"Setting Up JProvd","href":"/docs/nodes/providers/setting_up","docId":"nodes/providers/setting_up"}]}]},{"type":"category","label":"Developers","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Web Apps","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Jackal.js","href":"/docs/developers/jackaljs/intro","docId":"developers/jackaljs/intro"}]},{"type":"link","label":"Getting Started","href":"/docs/developers/intro","docId":"developers/intro"}]}]},"docs":{"contributors/foundation":{"id":"contributors/foundation","title":"Jackal Foundation","description":"What is the Jackal Foundation?","sidebar":"tutorialSidebar"},"contributors/join":{"id":"contributors/join","title":"Join the Community!","description":"The Jackal Community is open to all.","sidebar":"tutorialSidebar"},"contributors/labs":{"id":"contributors/labs","title":"Jackal Labs","description":"Who is Jackal Labs?","sidebar":"tutorialSidebar"},"developers/intro":{"id":"developers/intro","title":"Getting Started","description":"Web-Apps","sidebar":"tutorialSidebar"},"developers/jackaljs/intro":{"id":"developers/jackaljs/intro","title":"Jackal.js","description":"Quickstart","sidebar":"tutorialSidebar"},"ecosystem/grants-funding":{"id":"ecosystem/grants-funding","title":"Grants and Funding","description":"The Jackal Foundation facilitates non-equity grants, seed funding, and beyond through our various funding programs. Ecosystem funding aims to focus on the following categories;","sidebar":"tutorialSidebar"},"ecosystem/partnerships":{"id":"ecosystem/partnerships","title":"Partnerships","description":"Blockchain and web3 native software engineering teams often wish to become core contributors through a partnership with the Jackal Foundation. In a partnership role, the team would be assigned direct tasks and held to a high standard of execution, professionalism, and accountability. If your team desires to partner with the Jackal Foundation, please reach out directly, we look forward to working with you.","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Welcome to Jackal Wiki","description":"Welcome, explorer, to the Jackal Wiki, where you\'ll embark on a journey to discover a more secure, simple, and self-custodial digital world.","sidebar":"tutorialSidebar"},"nodes/install":{"id":"nodes/install","title":"Setting Up","description":"Pre-Requisites","sidebar":"tutorialSidebar"},"nodes/nodes/hardware":{"id":"nodes/nodes/hardware","title":"Hardware","description":"We recommend a minimum hardware requirement of:","sidebar":"tutorialSidebar"},"nodes/nodes/installation":{"id":"nodes/nodes/installation","title":"Installing Canined","description":"Pre-Requisites","sidebar":"tutorialSidebar"},"nodes/nodes/mainnet":{"id":"nodes/nodes/mainnet","title":"Joining Mainnet","description":"Perform the following as the jackal user.","sidebar":"tutorialSidebar"},"nodes/nodes/testnet":{"id":"nodes/nodes/testnet","title":"Joining Testnet","description":"After installing canined. You can join the testnet by following these steps:","sidebar":"tutorialSidebar"},"nodes/providers/building":{"id":"nodes/providers/building","title":"Creating Provider","description":"Disclaimer","sidebar":"tutorialSidebar"},"nodes/providers/hardware/diy-serious copy":{"id":"nodes/providers/hardware/diy-serious copy","title":"DIY Build","description":"For DIY individuals looking to power web3 infrastructure and increase your ROI- here is the recommended system for serious individual storage providers.","sidebar":"tutorialSidebar"},"nodes/providers/hardware/enterprise":{"id":"nodes/providers/hardware/enterprise","title":"Enterprise Build","description":"For teams looking to build a large storage system of ~2.1 Petabytes of storage, the estimated base price of the box with drives is ~$70,000 USD. This does not account for variable expenses including the regional costs of:","sidebar":"tutorialSidebar"},"nodes/providers/setting_up":{"id":"nodes/providers/setting_up","title":"Setting Up JProvd","description":"Pre-Requisites","sidebar":"tutorialSidebar"},"nodes/validators/joining":{"id":"nodes/validators/joining","title":"Creating Validator","description":"This guide assumes you are using the same machine as the full node.","sidebar":"tutorialSidebar"},"official-links/jackal-foundation":{"id":"official-links/jackal-foundation","title":"Jackal Foundation Links","description":"Here are the official website links for Jackal Foundation. Please use and bookmark these links to reduce the likelihood of cyber phishing threats.","sidebar":"tutorialSidebar"},"official-links/jackal-labs":{"id":"official-links/jackal-labs","title":"Jackal Labs Links","description":"Here are the official website links for Jackal Labs. Please use and bookmark these links to reduce the likelihood of cyber phishing threats.","sidebar":"tutorialSidebar"},"official-links/jackal-protocol":{"id":"official-links/jackal-protocol","title":"Jackal Protocol Links","description":"Here are the official website links of the Jackal Protocol. Please use and bookmark these links to reduce the likelihood of cyber phishing threats.","sidebar":"tutorialSidebar"},"overview/jackal-tldr":{"id":"overview/jackal-tldr","title":"Discover the Jackal Protocol","description":"The Jackal Protocol provides a decentralized infrastructure for secure and scalable data storage, enabling individuals, developers, and enterprises to protect their data privacy and improve their cybersecurity posture. It offers a platform for building decentralized applications, managing access control and ownership, transferring encrypted data, and maintaining self-custodial control over data, all without relying on centralized storage providers or intermediaries.","sidebar":"tutorialSidebar"},"overview/jkl":{"id":"overview/jkl","title":"What Is The JKL Token?","description":"The JKL Token is the driving force behind the revolutionary Jackal Protocol. This versatile native token seamlessly integrates with the ecosystem, unlocking endless possibilities for users, developers, and enterprises alike.","sidebar":"tutorialSidebar"},"overview/why-jackal":{"id":"overview/why-jackal","title":"Why Choose Jackal Protocol","description":"The Jackal Protocol offers various advantages for individuals, small businesses, and large enterprises seeking secure, decentralized data storage and management solutions.","sidebar":"tutorialSidebar"},"protocol/encryption":{"id":"protocol/encryption","title":"Encryption in Jackal Protocol","description":"The Jackal Protocol utilizes encryption techniques to ensure the privacy and security of user data. The two primary encryption models within the protocol are file encryption and file-entry encryption. File encryption secures the files themselves, while file-entry encryption focuses on securing the file entries on the blockchain.","sidebar":"tutorialSidebar"},"protocol/modules/dsig":{"id":"protocol/modules/dsig","title":"dsig Module","description":"Coming Soon","sidebar":"tutorialSidebar"},"protocol/modules/filetree":{"id":"protocol/modules/filetree","title":"Filetree Module","description":"Overview","sidebar":"tutorialSidebar"},"protocol/modules/jklmint":{"id":"protocol/modules/jklmint","title":"JKLmint Module","description":"The jklmint module is responsible for the management of the native JKL token within the Jackal Protocol. This module handles the issuance, distribution, and inflation of JKL tokens, ensuring a stable and secure token economy.","sidebar":"tutorialSidebar"},"protocol/modules/lp":{"id":"protocol/modules/lp","title":"LP Module (Coming Soon)","description":"The lp (Liquidity Provision) module is a vital part of the Jackal Protocol, enabling the creation and management of liquidity pools for trading and swapping tokens. This module provides a decentralized solution for users to contribute liquidity to the ecosystem and earn rewards in return.","sidebar":"tutorialSidebar"},"protocol/modules/module-overview":{"id":"protocol/modules/module-overview","title":"Module Overview","description":"Protocol Overview","sidebar":"tutorialSidebar"},"protocol/modules/rns":{"id":"protocol/modules/rns","title":"Name Service Module","description":"The rns (Reverse Name Service) module is an essential component of the Jackal Protocol, providing a user-friendly naming system for blockchain addresses. The RNS module simplifies the process of interacting with complex addresses by mapping them to human-readable names. This module allows users to transfer tokens and permissions to files/folders stored on the Jackal Protocol using human readable names.","sidebar":"tutorialSidebar"},"protocol/modules/storage":{"id":"protocol/modules/storage","title":"Storage Module","description":"The Jackal Protocol incorporates two crucial algorithms for decentralized storage: Jackal Proof-of-Persistence (JPOP) and Internal Detection Of Loss (IDOL) protocols. This document provides an overview of these algorithms, their functionalities, and their interaction with users and Storage Providers.","sidebar":"tutorialSidebar"},"protocol/modules/wasm":{"id":"protocol/modules/wasm","title":"WASM Module","description":"The wasm module in the Jackal Protocol incorporates the CosmWasm smart contracting platform, which is designed specifically for the Cosmos Ecosystem. This module provides a secure and efficient environment for executing WebAssembly (WASM) smart contracts on the Jackal Protocol.","sidebar":"tutorialSidebar"},"protocol/p-o-p":{"id":"protocol/p-o-p","title":"Jackal Proof-of-Persistence Documentation","description":"Overview","sidebar":"tutorialSidebar"},"protocol/tokens":{"id":"protocol/tokens","title":"JKL Token","description":"Overview","sidebar":"tutorialSidebar"},"protocol/validators":{"id":"protocol/validators","title":"Validators","description":"The Jackal Validators are secure web servers, dedicated machines that participate in the consensus protocol by broadcasting cryptographic signatures, or votes, to agree upon the next block. Voting power is determined by the amount of staking tokens delegated by non-validators and bonded as collateral to earn a reward. These non-validators, or delegators, incur the risk of getting punished (slashed) if the delegate validator gets hacked or violates the protocol.","sidebar":"tutorialSidebar"},"using-jackal/dashboard":{"id":"using-jackal/dashboard","title":"Jackal Dashboard Guide","description":"The Jackal Dashboard is your one-stop destination for interacting with the Jackal Protocol and Cosmos ecosystem. This guide will walk you through the various features and capabilities available on the Jackal Dashboard.","sidebar":"tutorialSidebar"},"using-jackal/delegate":{"id":"using-jackal/delegate","title":"How to Delegate JKL Tokens to a Validator","description":"This guide will help you delegate your JKL tokens to a validator on the Jackal Protocol, which helps secure the network and earns you staking rewards.","sidebar":"tutorialSidebar"},"using-jackal/fund":{"id":"using-jackal/fund","title":"Accessing JKL Tokens on Osmosis and Withdrawing to Jackal Protocol","description":"This guide will help you access JKL tokens on the Osmosis Decentralized Exchange (DEX) and withdraw them to the Jackal Protocol using Inter-Blockchain Communication (IBC).","sidebar":"tutorialSidebar"},"using-jackal/wallet/keplr":{"id":"using-jackal/wallet/keplr","title":"Keplr Wallet","description":"The Keplr browser extension is a wallet for accessing some Jackal applications in the Cosmos ecosystem. Keplr can be used to exchange/manage JKL and other Cosmos-based tokens, participate in governance from the Jackal Dashboard, and use Jackal Storage.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/9c403616.2692038c.js b/assets/js/9c403616.2692038c.js deleted file mode 100644 index e7f7c3c..0000000 --- a/assets/js/9c403616.2692038c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[1817],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),m=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=m(e.components);return o.createElement(s.Provider,{value:t},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=m(n),d=r,f=p["".concat(s,".").concat(d)]||p[d]||c[d]||a;return n?o.createElement(f,i(i({ref:t},u),{},{components:n})):o.createElement(f,i({ref:t},u))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:r,i[1]=l;for(var m=2;m{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>l,toc:()=>m});var o=n(7462),r=(n(7294),n(3905));const a={sidebar_position:2},i="JKLmint Module",l={unversionedId:"protocol/modules/jklmint",id:"protocol/modules/jklmint",title:"JKLmint Module",description:"The jklmint module is responsible for the management of the native JKL token within the Jackal Protocol. This module handles the issuance, distribution, and inflation of JKL tokens, ensuring a stable and secure token economy.",source:"@site/docs/protocol/modules/jklmint.md",sourceDirName:"protocol/modules",slug:"/protocol/modules/jklmint",permalink:"/docs/protocol/modules/jklmint",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/protocol/modules/jklmint.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Module Overview",permalink:"/docs/protocol/modules/module-overview"},next:{title:"LP Module (Coming Soon)",permalink:"/docs/protocol/modules/lp"}},s={},m=[{value:"Overview",id:"overview",level:2},{value:"Parameters",id:"parameters",level:3}],u={toc:m},p="wrapper";function c(e){let{components:t,...n}=e;return(0,r.kt)(p,(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"jklmint-module"},"JKLmint Module"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"jklmint")," module is responsible for the management of the native JKL token within the Jackal Protocol. This module handles the issuance, distribution, and inflation of JKL tokens, ensuring a stable and secure token economy."),(0,r.kt)("h2",{id:"overview"},"Overview"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"jklmint")," module manages the following aspects of the JKL token:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Token Issuance"),": Determines the initial token supply and distribution."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Inflation"),": Manages the annual inflation rate, maintaining a consistent token supply growth."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Rewards Distribution"),": Handles the allocation of newly minted tokens as rewards for validators and delegators.")),(0,r.kt)("h3",{id:"parameters"},"Parameters"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"jklmint")," module uses the following parameters to manage the JKL token economy:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"inflation_rate"),": The annual percentage rate at which the token supply will grow."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"inflation_min"),": The minimum annual inflation rate allowed."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"inflation_max"),": The maximum annual inflation rate allowed."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"goal_bonded"),": The desired percentage of the total token supply that should be staked by validators and delegators."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"blocks_per_year"),": The estimated number of blocks produced in a year.")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9c403616.c3fc53ce.js b/assets/js/9c403616.c3fc53ce.js new file mode 100644 index 0000000..3a10507 --- /dev/null +++ b/assets/js/9c403616.c3fc53ce.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[1817],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),m=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},p=function(e){var t=m(e.components);return o.createElement(s.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),u=m(n),d=r,f=u["".concat(s,".").concat(d)]||u[d]||c[d]||a;return n?o.createElement(f,l(l({ref:t},p),{},{components:n})):o.createElement(f,l({ref:t},p))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,l=new Array(a);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[u]="string"==typeof e?e:r,l[1]=i;for(var m=2;m{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>m});var o=n(7462),r=(n(7294),n(3905));const a={sidebar_position:2},l="JKLmint Module",i={unversionedId:"protocol/modules/jklmint",id:"protocol/modules/jklmint",title:"JKLmint Module",description:"The jklmint module is responsible for the management of the native JKL token within the Jackal Protocol. This module",source:"@site/docs/protocol/modules/jklmint.md",sourceDirName:"protocol/modules",slug:"/protocol/modules/jklmint",permalink:"/docs/protocol/modules/jklmint",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/protocol/modules/jklmint.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Module Overview",permalink:"/docs/protocol/modules/module-overview"},next:{title:"LP Module (Coming Soon)",permalink:"/docs/protocol/modules/lp"}},s={},m=[{value:"Overview",id:"overview",level:2},{value:"Parameters",id:"parameters",level:3}],p={toc:m},u="wrapper";function c(e){let{components:t,...n}=e;return(0,r.kt)(u,(0,o.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"jklmint-module"},"JKLmint Module"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"jklmint")," module is responsible for the management of the native JKL token within the Jackal Protocol. This module\nhandles the issuance, distribution, and inflation of JKL tokens, ensuring a stable and secure token economy."),(0,r.kt)("h2",{id:"overview"},"Overview"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"jklmint")," module manages the following aspects of the JKL token:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Token Issuance"),": Determines the initial token supply and distribution."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Inflation"),": Manages the annual inflation rate, maintaining a consistent token supply growth."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Rewards Distribution"),": Handles the allocation of newly minted tokens as rewards for validators and delegators.")),(0,r.kt)("h3",{id:"parameters"},"Parameters"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"jklmint")," module uses the following parameters to manage the JKL token economy:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"inflation_rate"),": The annual percentage rate at which the token supply will grow."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"inflation_min"),": The minimum annual inflation rate allowed."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"inflation_max"),": The maximum annual inflation rate allowed."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"goal_bonded"),": The desired percentage of the total token supply that should be staked by validators and delegators."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"blocks_per_year"),": The estimated number of blocks produced in a year.")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a4043c8d.46fc645d.js b/assets/js/a4043c8d.140b28e4.js similarity index 54% rename from assets/js/a4043c8d.46fc645d.js rename to assets/js/a4043c8d.140b28e4.js index d378d93..640f1c8 100644 --- a/assets/js/a4043c8d.46fc645d.js +++ b/assets/js/a4043c8d.140b28e4.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[6683],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(7294);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var i=r.createContext({}),u=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=u(e.components);return r.createElement(i.Provider,{value:t},e.children)},d="mdxType",c={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,l=e.mdxType,a=e.originalType,i=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=u(n),g=l,f=d["".concat(i,".").concat(g)]||d[g]||c[g]||a;return n?r.createElement(f,o(o({ref:t},p),{},{components:n})):r.createElement(f,o({ref:t},p))}));function f(e,t){var n=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var a=n.length,o=new Array(a);o[0]=g;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[d]="string"==typeof e?e:l,o[1]=s;for(var u=2;u{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>c,frontMatter:()=>a,metadata:()=>s,toc:()=>u});var r=n(7462),l=(n(7294),n(3905));const a={sidebar_position:0},o="Setting Up",s={unversionedId:"nodes/install",id:"nodes/install",title:"Setting Up",description:"Pre-Requisites",source:"@site/docs/nodes/1_install.md",sourceDirName:"nodes",slug:"/nodes/install",permalink:"/docs/nodes/install",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/nodes/1_install.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0},sidebar:"tutorialSidebar",previous:{title:"Partnerships",permalink:"/docs/ecosystem/partnerships"},next:{title:"Hardware",permalink:"/docs/nodes/nodes/hardware"}},i={},u=[{value:"Pre-Requisites",id:"pre-requisites",level:2},{value:"Enable Firewall Rules",id:"enable-firewall-rules",level:3},{value:"Create Jackal user",id:"create-jackal-user",level:3},{value:"Installing required tools",id:"installing-required-tools",level:3},{value:"Installing Go",id:"installing-go",level:3}],p={toc:u},d="wrapper";function c(e){let{components:t,...n}=e;return(0,l.kt)(d,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"setting-up"},"Setting Up"),(0,l.kt)("h2",{id:"pre-requisites"},"Pre-Requisites"),(0,l.kt)("p",null,"There are a few things needed before installing. "),(0,l.kt)("p",null,"While logged in as the 'root' or 'admin' user, we add a 'jackal' user and give them root privileges."),(0,l.kt)("h3",{id:"enable-firewall-rules"},"Enable Firewall Rules"),(0,l.kt)("p",null,"Enabling the firewall is important to ensure your hardware remains secure. The following commands will add rules required for access on both validators and providers:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"sudo ufw allow 22\nsudo ufw allow 80\nsudo ufw allow 443\n")),(0,l.kt)("p",null,"Additional ports are required if you are running a validator:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"sudo ufw allow 26657\nsudo ufw allow 26658\n")),(0,l.kt)("p",null,"The only additional port required for a provider is 3333:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"sudo ufw allow 3333\n")),(0,l.kt)("p",null,"If you are running a combined validator/provider, you need to allow all of the above ports. After adding ports to the rules list, you will need to start the firewall:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"sudo ufw enable\n")),(0,l.kt)("p",null,"After starting the firewall, verify all of the required rules are in place by running:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"sudo ufw status verbose\n")),(0,l.kt)("p",null,"Your output should be similar to the following:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"Status: active\n\nTo Action From\n-- ------ ----\n22 ALLOW Anywhere\n80 ALLOW Anywhere\n443 ALLOW Anywhere\n1317 ALLOW Anywhere\n3333 ALLOW Anywhere\n26657 ALLOW Anywhere\n26658 ALLOW Anywhere\n")),(0,l.kt)("h3",{id:"create-jackal-user"},"Create Jackal user"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},'sudo adduser --gecos "" jackal\nsudo usermod -aG sudo jackal\n')),(0,l.kt)("p",null,"Log in as the jackal user to complete the below steps:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"sudo su - jackal\n")),(0,l.kt)("h3",{id:"installing-required-tools"},"Installing required tools"),(0,l.kt)("p",null,"This will install the necessary tools to build the jackal chain source, along with lz4 compression tool and jquery tool."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"sudo apt update\nsudo apt install build-essential lz4 jq\n")),(0,l.kt)("h3",{id:"installing-go"},"Installing Go"),(0,l.kt)("p",null,"Follow more in-depth instructions to install Go v1.19 or higher ",(0,l.kt)("a",{parentName:"p",href:"https://golang.org/doc/install"},"here"),"."),(0,l.kt)("p",null,"On Ububtu you can install it with:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"GOVER=$(curl https://go.dev/VERSION?m=text)\nwget https://golang.org/dl/${GOVER}.linux-amd64.tar.gz\nsudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf ${GOVER}.linux-amd64.tar.gz\n")),(0,l.kt)("p",null,"Add the following golang path info to the current users ",(0,l.kt)("inlineCode",{parentName:"p"},"~/.profile"),"."),(0,l.kt)("p",null,"Also add it to the skeleton profile so all new users have it. ",(0,l.kt)("inlineCode",{parentName:"p"},"/etc/skel/.profile")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},'# add environmental variables for Go\nif [ -f "/usr/local/go/bin/go" ] ; then\n export GOROOT=/usr/local/go\n export GOPATH=${HOME}/go\n export GOBIN=$GOPATH/bin\n export PATH=${PATH}:${GOROOT}/bin:${GOBIN}\n export GO111MODULE=on\nfi\n')),(0,l.kt)("p",null,"Restarting the shell with youre profile settings or just rebasing them like so is required."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"source ~/.profile\n")))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[6683],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(7294);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var i=r.createContext({}),u=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=u(e.components);return r.createElement(i.Provider,{value:t},e.children)},d="mdxType",c={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,l=e.mdxType,a=e.originalType,i=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=u(n),g=l,f=d["".concat(i,".").concat(g)]||d[g]||c[g]||a;return n?r.createElement(f,o(o({ref:t},p),{},{components:n})):r.createElement(f,o({ref:t},p))}));function f(e,t){var n=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var a=n.length,o=new Array(a);o[0]=g;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[d]="string"==typeof e?e:l,o[1]=s;for(var u=2;u{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>c,frontMatter:()=>a,metadata:()=>s,toc:()=>u});var r=n(7462),l=(n(7294),n(3905));const a={sidebar_position:0},o="Setting Up",s={unversionedId:"nodes/install",id:"nodes/install",title:"Setting Up",description:"Pre-Requisites",source:"@site/docs/nodes/1_install.md",sourceDirName:"nodes",slug:"/nodes/install",permalink:"/docs/nodes/install",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/nodes/1_install.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0},sidebar:"tutorialSidebar",previous:{title:"Partnerships",permalink:"/docs/ecosystem/partnerships"},next:{title:"Hardware",permalink:"/docs/nodes/nodes/hardware"}},i={},u=[{value:"Pre-Requisites",id:"pre-requisites",level:2},{value:"Enable Firewall Rules",id:"enable-firewall-rules",level:3},{value:"Create Jackal user",id:"create-jackal-user",level:3},{value:"Installing required tools",id:"installing-required-tools",level:3},{value:"Installing Go",id:"installing-go",level:3}],p={toc:u},d="wrapper";function c(e){let{components:t,...n}=e;return(0,l.kt)(d,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"setting-up"},"Setting Up"),(0,l.kt)("h2",{id:"pre-requisites"},"Pre-Requisites"),(0,l.kt)("p",null,"There are a few things needed before installing."),(0,l.kt)("p",null,"While logged in as the 'root' or 'admin' user, we add a 'jackal' user and give them root privileges."),(0,l.kt)("h3",{id:"enable-firewall-rules"},"Enable Firewall Rules"),(0,l.kt)("p",null,"Enabling the firewall is important to ensure your hardware remains secure. The following commands will add rules\nrequired for access on both validators and providers:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"sudo ufw allow 22\nsudo ufw allow 80\nsudo ufw allow 443\n")),(0,l.kt)("p",null,"Additional ports are required if you are running a validator:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"sudo ufw allow 26657\nsudo ufw allow 26658\n")),(0,l.kt)("p",null,"The only additional port required for a provider is 3333:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"sudo ufw allow 3333\n")),(0,l.kt)("p",null,"If you are running a combined validator/provider, you need to allow all of the above ports. After adding ports to the\nrules list, you will need to start the firewall:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"sudo ufw enable\n")),(0,l.kt)("p",null,"After starting the firewall, verify all of the required rules are in place by running:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"sudo ufw status verbose\n")),(0,l.kt)("p",null,"Your output should be similar to the following:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"Status: active\n\nTo Action From\n-- ------ ----\n22 ALLOW Anywhere\n80 ALLOW Anywhere\n443 ALLOW Anywhere\n1317 ALLOW Anywhere\n3333 ALLOW Anywhere\n26657 ALLOW Anywhere\n26658 ALLOW Anywhere\n")),(0,l.kt)("h3",{id:"create-jackal-user"},"Create Jackal user"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},'sudo adduser --gecos "" jackal\nsudo usermod -aG sudo jackal\n')),(0,l.kt)("p",null,"Log in as the jackal user to complete the below steps:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"sudo su - jackal\n")),(0,l.kt)("h3",{id:"installing-required-tools"},"Installing required tools"),(0,l.kt)("p",null,"This will install the necessary tools to build the jackal chain source, along with lz4 compression tool and jquery tool."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"sudo apt update\nsudo apt install build-essential lz4 jq\n")),(0,l.kt)("h3",{id:"installing-go"},"Installing Go"),(0,l.kt)("p",null,"Follow more in-depth instructions to install Go v1.19 or higher ",(0,l.kt)("a",{parentName:"p",href:"https://golang.org/doc/install"},"here"),"."),(0,l.kt)("p",null,"On Ububtu you can install it with:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"GOVER=$(curl https://go.dev/VERSION?m=text)\nwget https://golang.org/dl/${GOVER}.linux-amd64.tar.gz\nsudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf ${GOVER}.linux-amd64.tar.gz\n")),(0,l.kt)("p",null,"Add the following golang path info to the current users ",(0,l.kt)("inlineCode",{parentName:"p"},"~/.profile"),"."),(0,l.kt)("p",null,"Also add it to the skeleton profile so all new users have it. ",(0,l.kt)("inlineCode",{parentName:"p"},"/etc/skel/.profile")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},'# add environmental variables for Go\nif [ -f "/usr/local/go/bin/go" ] ; then\n export GOROOT=/usr/local/go\n export GOPATH=${HOME}/go\n export GOBIN=$GOPATH/bin\n export PATH=${PATH}:${GOROOT}/bin:${GOBIN}\n export GO111MODULE=on\nfi\n')),(0,l.kt)("p",null,"Restarting the shell with youre profile settings or just rebasing them like so is required."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"source ~/.profile\n")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ab3acb2a.8c5a5100.js b/assets/js/ab3acb2a.76abcdc6.js similarity index 83% rename from assets/js/ab3acb2a.8c5a5100.js rename to assets/js/ab3acb2a.76abcdc6.js index 18638b4..93b0147 100644 --- a/assets/js/ab3acb2a.8c5a5100.js +++ b/assets/js/ab3acb2a.76abcdc6.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[604],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var o=r(7294);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 n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function c(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var i=o.createContext({}),s=function(e){var t=o.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},p=function(e){var t=s(e.components);return o.createElement(i.Provider,{value:t},e.children)},u="mdxType",b={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var r=e.components,a=e.mdxType,n=e.originalType,i=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(r),d=a,f=u["".concat(i,".").concat(d)]||u[d]||b[d]||n;return r?o.createElement(f,c(c({ref:t},p),{},{components:r})):o.createElement(f,c({ref:t},p))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=r.length,c=new Array(n);c[0]=d;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l[u]="string"==typeof e?e:a,c[1]=l;for(var s=2;s{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>c,default:()=>b,frontMatter:()=>n,metadata:()=>l,toc:()=>s});var o=r(7462),a=(r(7294),r(3905));const n={sidebar_position:3},c="Jackal Labs",l={unversionedId:"contributors/labs",id:"contributors/labs",title:"Jackal Labs",description:"Who is Jackal Labs?",source:"@site/docs/contributors/labs.md",sourceDirName:"contributors",slug:"/contributors/labs",permalink:"/docs/contributors/labs",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/contributors/labs.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Jackal Foundation",permalink:"/docs/contributors/foundation"},next:{title:"Module Overview",permalink:"/docs/protocol/modules/module-overview"}},i={},s=[{value:"Who is Jackal Labs?",id:"who-is-jackal-labs",level:2},{value:"What is the scope of Jackal Labs?",id:"what-is-the-scope-of-jackal-labs",level:3}],p={toc:s},u="wrapper";function b(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"jackal-labs"},"Jackal Labs"),(0,a.kt)("h2",{id:"who-is-jackal-labs"},"Who is Jackal Labs?"),(0,a.kt)("p",null,"Jackal Labs, a Canadian software development company, played a pivotal role in the early development of the Jackal Protocol. As a decentralized and autonomous entity, the Jackal Protocol is not owned or operated by Jackal Labs. Instead, Jackal Labs contributes to the protocol's evolution by proposing changes through on-chain governance."),(0,a.kt)("h3",{id:"what-is-the-scope-of-jackal-labs"},"What is the scope of Jackal Labs?"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Spearhead the initial development of the Jackal Protocol."),(0,a.kt)("li",{parentName:"ul"},"Engage in ongoing research and development for the Protocol."),(0,a.kt)("li",{parentName:"ul"},"Suggest improvements to the protocol via the governance process.")))}b.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[604],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var o=r(7294);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 n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function c(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var i=o.createContext({}),s=function(e){var t=o.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},p=function(e){var t=s(e.components);return o.createElement(i.Provider,{value:t},e.children)},u="mdxType",b={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var r=e.components,a=e.mdxType,n=e.originalType,i=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(r),d=a,f=u["".concat(i,".").concat(d)]||u[d]||b[d]||n;return r?o.createElement(f,c(c({ref:t},p),{},{components:r})):o.createElement(f,c({ref:t},p))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=r.length,c=new Array(n);c[0]=d;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l[u]="string"==typeof e?e:a,c[1]=l;for(var s=2;s{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>c,default:()=>b,frontMatter:()=>n,metadata:()=>l,toc:()=>s});var o=r(7462),a=(r(7294),r(3905));const n={sidebar_position:3},c="Jackal Labs",l={unversionedId:"contributors/labs",id:"contributors/labs",title:"Jackal Labs",description:"Who is Jackal Labs?",source:"@site/docs/contributors/labs.md",sourceDirName:"contributors",slug:"/contributors/labs",permalink:"/docs/contributors/labs",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/contributors/labs.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Jackal Foundation",permalink:"/docs/contributors/foundation"},next:{title:"Module Overview",permalink:"/docs/protocol/modules/module-overview"}},i={},s=[{value:"Who is Jackal Labs?",id:"who-is-jackal-labs",level:2},{value:"What is the scope of Jackal Labs?",id:"what-is-the-scope-of-jackal-labs",level:3}],p={toc:s},u="wrapper";function b(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"jackal-labs"},"Jackal Labs"),(0,a.kt)("h2",{id:"who-is-jackal-labs"},"Who is Jackal Labs?"),(0,a.kt)("p",null,"Jackal Labs, a Canadian software development company, played a pivotal role in the early development of the Jackal\nProtocol. As a decentralized and autonomous entity, the Jackal Protocol is not owned or operated by Jackal Labs.\nInstead, Jackal Labs contributes to the protocol's evolution by proposing changes through on-chain governance."),(0,a.kt)("h3",{id:"what-is-the-scope-of-jackal-labs"},"What is the scope of Jackal Labs?"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Spearhead the initial development of the Jackal Protocol."),(0,a.kt)("li",{parentName:"ul"},"Engage in ongoing research and development for the Protocol."),(0,a.kt)("li",{parentName:"ul"},"Suggest improvements to the protocol via the governance process.")))}b.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b1fc7db6.29933fec.js b/assets/js/b1fc7db6.29933fec.js deleted file mode 100644 index e007db9..0000000 --- a/assets/js/b1fc7db6.29933fec.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[8425],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var o=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var i=o.createContext({}),c=function(e){var t=o.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},p=function(e){var t=c(e.components);return o.createElement(i.Provider,{value:t},e.children)},u="mdxType",k={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,i=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(n),d=a,m=u["".concat(i,".").concat(d)]||u[d]||k[d]||r;return n?o.createElement(m,l(l({ref:t},p),{},{components:n})):o.createElement(m,l({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,l=new Array(r);l[0]=d;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[u]="string"==typeof e?e:a,l[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>k,frontMatter:()=>r,metadata:()=>s,toc:()=>c});var o=n(7462),a=(n(7294),n(3905));const r={sidebar_position:2},l="Accessing JKL Tokens on Osmosis and Withdrawing to Jackal Protocol",s={unversionedId:"using-jackal/fund",id:"using-jackal/fund",title:"Accessing JKL Tokens on Osmosis and Withdrawing to Jackal Protocol",description:"This guide will help you access JKL tokens on the Osmosis Decentralized Exchange (DEX) and withdraw them to the Jackal Protocol using Inter-Blockchain Communication (IBC).",source:"@site/docs/using-jackal/fund.md",sourceDirName:"using-jackal",slug:"/using-jackal/fund",permalink:"/docs/using-jackal/fund",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/using-jackal/fund.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Keplr Wallet",permalink:"/docs/using-jackal/wallet/keplr"},next:{title:"How to Delegate JKL Tokens to a Validator",permalink:"/docs/using-jackal/delegate"}},i={},c=[{value:"Step 1: Set up a Keplr Wallet",id:"step-1-set-up-a-keplr-wallet",level:2},{value:"Step 2: Access the Osmosis DEX",id:"step-2-access-the-osmosis-dex",level:2},{value:"Step 3: Swap tokens for JKL on Osmosis",id:"step-3-swap-tokens-for-jkl-on-osmosis",level:2},{value:"Step 4: Withdraw JKL tokens to Jackal Protocol via IBC",id:"step-4-withdraw-jkl-tokens-to-jackal-protocol-via-ibc",level:2}],p={toc:c},u="wrapper";function k(e){let{components:t,...n}=e;return(0,a.kt)(u,(0,o.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"accessing-jkl-tokens-on-osmosis-and-withdrawing-to-jackal-protocol"},"Accessing JKL Tokens on Osmosis and Withdrawing to Jackal Protocol"),(0,a.kt)("p",null,"This guide will help you access JKL tokens on the Osmosis Decentralized Exchange (DEX) and withdraw them to the Jackal Protocol using Inter-Blockchain Communication (IBC)."),(0,a.kt)("h2",{id:"step-1-set-up-a-keplr-wallet"},"Step 1: Set up a Keplr Wallet"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Install the ",(0,a.kt)("a",{parentName:"li",href:"https://wallet.keplr.app/"},"Keplr Wallet")," browser extension."),(0,a.kt)("li",{parentName:"ol"},"Create a new wallet or import an existing one."),(0,a.kt)("li",{parentName:"ol"},"Make sure you have some OSMO tokens in your wallet for transaction fees.")),(0,a.kt)("h2",{id:"step-2-access-the-osmosis-dex"},"Step 2: Access the Osmosis DEX"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Visit the ",(0,a.kt)("a",{parentName:"li",href:"https://app.osmosis.zone/"},"Osmosis DEX")," website."),(0,a.kt)("li",{parentName:"ol"},'Connect your Keplr Wallet by clicking "Connect Wallet" in the top right corner.')),(0,a.kt)("h2",{id:"step-3-swap-tokens-for-jkl-on-osmosis"},"Step 3: Swap tokens for JKL on Osmosis"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},'Click "Swap" in the Osmosis navigation bar.'),(0,a.kt)("li",{parentName:"ol"},"Select the token you want to swap for JKL, such as OSMO or ATOM."),(0,a.kt)("li",{parentName:"ol"},"Enter the amount you want to swap and confirm the transaction in your Keplr Wallet."),(0,a.kt)("li",{parentName:"ol"},"Once the transaction is complete, you will see the JKL tokens in your wallet.")),(0,a.kt)("h2",{id:"step-4-withdraw-jkl-tokens-to-jackal-protocol-via-ibc"},"Step 4: Withdraw JKL tokens to Jackal Protocol via IBC"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Visit the ",(0,a.kt)("a",{parentName:"li",href:"https://app.osmosis.zone/assets"},"Assets Page"),"."),(0,a.kt)("li",{parentName:"ol"},'Find the JKL asset and click "withdraw".'),(0,a.kt)("li",{parentName:"ol"},"Once you sign the transaction with your Keplr wallet, an IBC transfer has begun and your JKL tokens will be available on the Jackal Protocol shortly. ")),(0,a.kt)("p",null,"Now you have successfully accessed JKL tokens on the Osmosis DEX and withdrawn them to the Jackal Protocol using IBC."))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b1fc7db6.7e0dda08.js b/assets/js/b1fc7db6.7e0dda08.js new file mode 100644 index 0000000..a2e8ef5 --- /dev/null +++ b/assets/js/b1fc7db6.7e0dda08.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[8425],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var o=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var i=o.createContext({}),c=function(e){var t=o.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},p=function(e){var t=c(e.components);return o.createElement(i.Provider,{value:t},e.children)},u="mdxType",k={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,i=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(n),d=a,m=u["".concat(i,".").concat(d)]||u[d]||k[d]||r;return n?o.createElement(m,l(l({ref:t},p),{},{components:n})):o.createElement(m,l({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,l=new Array(r);l[0]=d;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[u]="string"==typeof e?e:a,l[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>k,frontMatter:()=>r,metadata:()=>s,toc:()=>c});var o=n(7462),a=(n(7294),n(3905));const r={sidebar_position:2},l="Accessing JKL Tokens on Osmosis and Withdrawing to Jackal Protocol",s={unversionedId:"using-jackal/fund",id:"using-jackal/fund",title:"Accessing JKL Tokens on Osmosis and Withdrawing to Jackal Protocol",description:"This guide will help you access JKL tokens on the Osmosis Decentralized Exchange (DEX) and withdraw them to the Jackal",source:"@site/docs/using-jackal/fund.md",sourceDirName:"using-jackal",slug:"/using-jackal/fund",permalink:"/docs/using-jackal/fund",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/using-jackal/fund.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Keplr Wallet",permalink:"/docs/using-jackal/wallet/keplr"},next:{title:"How to Delegate JKL Tokens to a Validator",permalink:"/docs/using-jackal/delegate"}},i={},c=[{value:"Step 1: Set up a Keplr Wallet",id:"step-1-set-up-a-keplr-wallet",level:2},{value:"Step 2: Access the Osmosis DEX",id:"step-2-access-the-osmosis-dex",level:2},{value:"Step 3: Swap tokens for JKL on Osmosis",id:"step-3-swap-tokens-for-jkl-on-osmosis",level:2},{value:"Step 4: Withdraw JKL tokens to Jackal Protocol via IBC",id:"step-4-withdraw-jkl-tokens-to-jackal-protocol-via-ibc",level:2}],p={toc:c},u="wrapper";function k(e){let{components:t,...n}=e;return(0,a.kt)(u,(0,o.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"accessing-jkl-tokens-on-osmosis-and-withdrawing-to-jackal-protocol"},"Accessing JKL Tokens on Osmosis and Withdrawing to Jackal Protocol"),(0,a.kt)("p",null,"This guide will help you access JKL tokens on the Osmosis Decentralized Exchange (DEX) and withdraw them to the Jackal\nProtocol using Inter-Blockchain Communication (IBC)."),(0,a.kt)("h2",{id:"step-1-set-up-a-keplr-wallet"},"Step 1: Set up a Keplr Wallet"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Install the ",(0,a.kt)("a",{parentName:"li",href:"https://wallet.keplr.app/"},"Keplr Wallet")," browser extension."),(0,a.kt)("li",{parentName:"ol"},"Create a new wallet or import an existing one."),(0,a.kt)("li",{parentName:"ol"},"Make sure you have some OSMO tokens in your wallet for transaction fees.")),(0,a.kt)("h2",{id:"step-2-access-the-osmosis-dex"},"Step 2: Access the Osmosis DEX"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Visit the ",(0,a.kt)("a",{parentName:"li",href:"https://app.osmosis.zone/"},"Osmosis DEX")," website."),(0,a.kt)("li",{parentName:"ol"},'Connect your Keplr Wallet by clicking "Connect Wallet" in the top right corner.')),(0,a.kt)("h2",{id:"step-3-swap-tokens-for-jkl-on-osmosis"},"Step 3: Swap tokens for JKL on Osmosis"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},'Click "Swap" in the Osmosis navigation bar.'),(0,a.kt)("li",{parentName:"ol"},"Select the token you want to swap for JKL, such as OSMO or ATOM."),(0,a.kt)("li",{parentName:"ol"},"Enter the amount you want to swap and confirm the transaction in your Keplr Wallet."),(0,a.kt)("li",{parentName:"ol"},"Once the transaction is complete, you will see the JKL tokens in your wallet.")),(0,a.kt)("h2",{id:"step-4-withdraw-jkl-tokens-to-jackal-protocol-via-ibc"},"Step 4: Withdraw JKL tokens to Jackal Protocol via IBC"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Visit the ",(0,a.kt)("a",{parentName:"li",href:"https://app.osmosis.zone/assets"},"Assets Page"),"."),(0,a.kt)("li",{parentName:"ol"},'Find the JKL asset and click "withdraw".'),(0,a.kt)("li",{parentName:"ol"},"Once you sign the transaction with your Keplr wallet, an IBC transfer has begun and your JKL tokens will be available\non the Jackal Protocol shortly.")),(0,a.kt)("p",null,"Now you have successfully accessed JKL tokens on the Osmosis DEX and withdrawn them to the Jackal Protocol using IBC."))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b46b7d8b.1c0f04c0.js b/assets/js/b46b7d8b.1c0f04c0.js new file mode 100644 index 0000000..33215dc --- /dev/null +++ b/assets/js/b46b7d8b.1c0f04c0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[1172],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>v});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=o.createContext({}),c=function(e){var t=o.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=c(e.components);return o.createElement(s.Provider,{value:t},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=c(r),h=n,v=d["".concat(s,".").concat(h)]||d[h]||p[h]||a;return r?o.createElement(v,i(i({ref:t},u),{},{components:r})):o.createElement(v,i({ref:t},u))}));function v(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=h;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[d]="string"==typeof e?e:n,i[1]=l;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var o=r(7462),n=(r(7294),r(3905));const a={sidebar_position:2},i="What Is The JKL Token?",l={unversionedId:"overview/jkl",id:"overview/jkl",title:"What Is The JKL Token?",description:"The JKL Token is the driving force behind the revolutionary Jackal Protocol. This versatile native token seamlessly",source:"@site/docs/overview/jkl.md",sourceDirName:"overview",slug:"/overview/jkl",permalink:"/docs/overview/jkl",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/overview/jkl.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Discover the Jackal Protocol",permalink:"/docs/overview/jackal-tldr"},next:{title:"Why Choose Jackal Protocol",permalink:"/docs/overview/why-jackal"}},s={},c=[{value:"What Does The JKL Token Do?",id:"what-does-the-jkl-token-do",level:2},{value:"Fueling dApps",id:"fueling-dapps",level:3},{value:"Network Security",id:"network-security",level:3},{value:"Affordable Transactions",id:"affordable-transactions",level:3},{value:"Governance",id:"governance",level:3},{value:"Collateral",id:"collateral",level:3},{value:"Liquidity",id:"liquidity",level:3},{value:"Data Storage",id:"data-storage",level:3}],u={toc:c},d="wrapper";function p(e){let{components:t,...r}=e;return(0,n.kt)(d,(0,o.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"what-is-the-jkl-token"},"What Is The JKL Token?"),(0,n.kt)("p",null,"The JKL Token is the driving force behind the revolutionary Jackal Protocol. This versatile native token seamlessly\nintegrates with the ecosystem, unlocking endless possibilities for users, developers, and enterprises alike."),(0,n.kt)("h2",{id:"what-does-the-jkl-token-do"},"What Does The JKL Token Do?"),(0,n.kt)("h3",{id:"fueling-dapps"},"Fueling dApps"),(0,n.kt)("p",null,"JKL Token plays a pivotal role in applications built on the Jackal Protocol, such as Jackal Storage and the RNS\nMarketplace. By harnessing the power of JKL, these applications can unlock new potentials and further enhance their\nutility."),(0,n.kt)("h3",{id:"network-security"},"Network Security"),(0,n.kt)("p",null,"At its core, the Jackal Protocol is a Proof-of-Stake (PoS) Cosmos L1 blockchain, relying on JKL delegation to validators\nfor network security. Stake your JKL tokens and contribute to securing the network while earning rewards."),(0,n.kt)("h3",{id:"affordable-transactions"},"Affordable Transactions"),(0,n.kt)("p",null,"With JKL, transaction fees on the Jackal Protocol are incredibly cost-effective, ensuring that users have an affordable\nand seamless experience."),(0,n.kt)("h3",{id:"governance"},"Governance"),(0,n.kt)("p",null,"Staked JKL tokens grant you the power to participate in on-chain governance within the Jackal Protocol. Make your voice\nheard by voting on text, software, spending, and other critical governance proposals."),(0,n.kt)("h3",{id:"collateral"},"Collateral"),(0,n.kt)("p",null,"The JKL token serves as versatile collateral for validators, storage providers, and various smart contract use cases,\nunlocking new possibilities for users and developers."),(0,n.kt)("h3",{id:"liquidity"},"Liquidity"),(0,n.kt)("p",null,"Put your JKL tokens to work by allocating them into a liquidity pool and earn JKL rewards in return. Contribute to the\necosystem while reaping the benefits of your investment."),(0,n.kt)("h3",{id:"data-storage"},"Data Storage"),(0,n.kt)("p",null,"The JKL token serves as the primary medium of exchange for accessing data storage within the Jackal Protocol, ensuring a\nsmooth and efficient market for users and storage providers alike."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b46b7d8b.1f4817c2.js b/assets/js/b46b7d8b.1f4817c2.js deleted file mode 100644 index 95907e7..0000000 --- a/assets/js/b46b7d8b.1f4817c2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[1172],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>v});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=o.createContext({}),c=function(e){var t=o.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=c(e.components);return o.createElement(s.Provider,{value:t},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=c(r),h=n,v=d["".concat(s,".").concat(h)]||d[h]||p[h]||a;return r?o.createElement(v,i(i({ref:t},u),{},{components:r})):o.createElement(v,i({ref:t},u))}));function v(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=h;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[d]="string"==typeof e?e:n,i[1]=l;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var o=r(7462),n=(r(7294),r(3905));const a={sidebar_position:2},i="What Is The JKL Token?",l={unversionedId:"overview/jkl",id:"overview/jkl",title:"What Is The JKL Token?",description:"The JKL Token is the driving force behind the revolutionary Jackal Protocol. This versatile native token seamlessly integrates with the ecosystem, unlocking endless possibilities for users, developers, and enterprises alike.",source:"@site/docs/overview/jkl.md",sourceDirName:"overview",slug:"/overview/jkl",permalink:"/docs/overview/jkl",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/overview/jkl.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Discover the Jackal Protocol",permalink:"/docs/overview/jackal-tldr"},next:{title:"Why Choose Jackal Protocol",permalink:"/docs/overview/why-jackal"}},s={},c=[{value:"What Does The JKL Token Do?",id:"what-does-the-jkl-token-do",level:2},{value:"Fueling dApps",id:"fueling-dapps",level:3},{value:"Network Security",id:"network-security",level:3},{value:"Affordable Transactions",id:"affordable-transactions",level:3},{value:"Governance",id:"governance",level:3},{value:"Collateral",id:"collateral",level:3},{value:"Liquidity",id:"liquidity",level:3},{value:"Data Storage",id:"data-storage",level:3}],u={toc:c},d="wrapper";function p(e){let{components:t,...r}=e;return(0,n.kt)(d,(0,o.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"what-is-the-jkl-token"},"What Is The JKL Token?"),(0,n.kt)("p",null,"The JKL Token is the driving force behind the revolutionary Jackal Protocol. This versatile native token seamlessly integrates with the ecosystem, unlocking endless possibilities for users, developers, and enterprises alike."),(0,n.kt)("h2",{id:"what-does-the-jkl-token-do"},"What Does The JKL Token Do?"),(0,n.kt)("h3",{id:"fueling-dapps"},"Fueling dApps"),(0,n.kt)("p",null,"JKL Token plays a pivotal role in applications built on the Jackal Protocol, such as Jackal Storage and the RNS Marketplace. By harnessing the power of JKL, these applications can unlock new potentials and further enhance their utility."),(0,n.kt)("h3",{id:"network-security"},"Network Security"),(0,n.kt)("p",null,"At its core, the Jackal Protocol is a Proof-of-Stake (PoS) Cosmos L1 blockchain, relying on JKL delegation to validators for network security. Stake your JKL tokens and contribute to securing the network while earning rewards."),(0,n.kt)("h3",{id:"affordable-transactions"},"Affordable Transactions"),(0,n.kt)("p",null,"With JKL, transaction fees on the Jackal Protocol are incredibly cost-effective, ensuring that users have an affordable and seamless experience."),(0,n.kt)("h3",{id:"governance"},"Governance"),(0,n.kt)("p",null,"Staked JKL tokens grant you the power to participate in on-chain governance within the Jackal Protocol. Make your voice heard by voting on text, software, spending, and other critical governance proposals."),(0,n.kt)("h3",{id:"collateral"},"Collateral"),(0,n.kt)("p",null,"The JKL token serves as versatile collateral for validators, storage providers, and various smart contract use cases, unlocking new possibilities for users and developers."),(0,n.kt)("h3",{id:"liquidity"},"Liquidity"),(0,n.kt)("p",null,"Put your JKL tokens to work by allocating them into a liquidity pool and earn JKL rewards in return. Contribute to the ecosystem while reaping the benefits of your investment."),(0,n.kt)("h3",{id:"data-storage"},"Data Storage"),(0,n.kt)("p",null,"The JKL token serves as the primary medium of exchange for accessing data storage within the Jackal Protocol, ensuring a smooth and efficient market for users and storage providers alike."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b92c85d1.5e53ad27.js b/assets/js/b92c85d1.5e53ad27.js deleted file mode 100644 index 6e98265..0000000 --- a/assets/js/b92c85d1.5e53ad27.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[6216],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(7294);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 o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var d=n.createContext({}),p=function(e){var t=n.useContext(d),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},s=function(e){var t=p(e.components);return n.createElement(d.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,d=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=a,f=u["".concat(d,".").concat(m)]||u[m]||c[m]||o;return r?n.createElement(f,i(i({ref:t},s),{},{components:r})):n.createElement(f,i({ref:t},s))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=m;var l={};for(var d in t)hasOwnProperty.call(t,d)&&(l[d]=t[d]);l.originalType=e,l[u]="string"==typeof e?e:a,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>c,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const o={sidebar_position:1},i="DIY Build",l={unversionedId:"nodes/providers/hardware/diy-serious copy",id:"nodes/providers/hardware/diy-serious copy",title:"DIY Build",description:"For DIY individuals looking to power web3 infrastructure and increase your ROI- here is the recommended system for serious individual storage providers.",source:"@site/docs/nodes/providers/hardware/diy-serious copy.md",sourceDirName:"nodes/providers/hardware",slug:"/nodes/providers/hardware/diy-serious copy",permalink:"/docs/nodes/providers/hardware/diy-serious copy",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/nodes/providers/hardware/diy-serious copy.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Creating Validator",permalink:"/docs/nodes/validators/joining"},next:{title:"Enterprise Build",permalink:"/docs/nodes/providers/hardware/enterprise"}},d={},p=[],s={toc:p},u="wrapper";function c(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"diy-build"},"DIY Build"),(0,a.kt)("p",null,"For DIY individuals looking to power web3 infrastructure and increase your ROI- here is the recommended system for serious individual storage providers. "),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Component"),(0,a.kt)("th",{parentName:"tr",align:"left"},"Recommendation"),(0,a.kt)("th",{parentName:"tr",align:"left"},"Units"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"CPU"),(0,a.kt)("td",{parentName:"tr",align:"left"},"AMD Ryzen 7 5700G 3.8 GHz 8-Core Processor"),(0,a.kt)("td",{parentName:"tr",align:"left"},"1")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Motherboard"),(0,a.kt)("td",{parentName:"tr",align:"left"},"MSI B450 TOMAHAWK MAX II ATX AM4 Motherboard"),(0,a.kt)("td",{parentName:"tr",align:"left"},"1")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Memory"),(0,a.kt)("td",{parentName:"tr",align:"left"},"128 GB (2 x 64 GB) Memory"),(0,a.kt)("td",{parentName:"tr",align:"left"},"1")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Storage"),(0,a.kt)("td",{parentName:"tr",align:"left"},'Kingston A400 960 GB 2.5" Solid State Drive'),(0,a.kt)("td",{parentName:"tr",align:"left"},"1")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Storage"),(0,a.kt)("td",{parentName:"tr",align:"left"},'Seagate EXOS Enterprise 14 TB 3.5" 7200RPM Internal Hard Drive'),(0,a.kt)("td",{parentName:"tr",align:"left"},"5")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Case"),(0,a.kt)("td",{parentName:"tr",align:"left"},"Cooler Master N400 ATX Mid Tower Case"),(0,a.kt)("td",{parentName:"tr",align:"left"},"1")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Power Supply"),(0,a.kt)("td",{parentName:"tr",align:"left"},"Corsair HX750 Platinum 750 W 80+ Platinum Certified Fully Modular ATX Power Supply"),(0,a.kt)("td",{parentName:"tr",align:"left"},"1")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Case Fan"),(0,a.kt)("td",{parentName:"tr",align:"left"},"Noctua S12B redux-700 33.49 CFM 120 mm Fan"),(0,a.kt)("td",{parentName:"tr",align:"left"},"2")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Total Cost Estimate"),(0,a.kt)("td",{parentName:"tr",align:"left"},"$2014.08 USD"),(0,a.kt)("td",{parentName:"tr",align:"left"})))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b92c85d1.819ca774.js b/assets/js/b92c85d1.819ca774.js new file mode 100644 index 0000000..af3cd27 --- /dev/null +++ b/assets/js/b92c85d1.819ca774.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[6216],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(7294);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 o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var d=n.createContext({}),p=function(e){var t=n.useContext(d),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},s=function(e){var t=p(e.components);return n.createElement(d.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,d=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),c=p(r),m=a,f=c["".concat(d,".").concat(m)]||c[m]||u[m]||o;return r?n.createElement(f,i(i({ref:t},s),{},{components:r})):n.createElement(f,i({ref:t},s))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=m;var l={};for(var d in t)hasOwnProperty.call(t,d)&&(l[d]=t[d]);l.originalType=e,l[c]="string"==typeof e?e:a,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const o={sidebar_position:1},i="DIY Build",l={unversionedId:"nodes/providers/hardware/diy-serious copy",id:"nodes/providers/hardware/diy-serious copy",title:"DIY Build",description:"For DIY individuals looking to power web3 infrastructure and increase your ROI- here is the recommended system for",source:"@site/docs/nodes/providers/hardware/diy-serious copy.md",sourceDirName:"nodes/providers/hardware",slug:"/nodes/providers/hardware/diy-serious copy",permalink:"/docs/nodes/providers/hardware/diy-serious copy",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/nodes/providers/hardware/diy-serious copy.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Creating Validator",permalink:"/docs/nodes/validators/joining"},next:{title:"Enterprise Build",permalink:"/docs/nodes/providers/hardware/enterprise"}},d={},p=[],s={toc:p},c="wrapper";function u(e){let{components:t,...r}=e;return(0,a.kt)(c,(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"diy-build"},"DIY Build"),(0,a.kt)("p",null,"For DIY individuals looking to power web3 infrastructure and increase your ROI- here is the recommended system for\nserious individual storage providers."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Component"),(0,a.kt)("th",{parentName:"tr",align:"left"},"Recommendation"),(0,a.kt)("th",{parentName:"tr",align:"left"},"Units"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"CPU"),(0,a.kt)("td",{parentName:"tr",align:"left"},"AMD Ryzen 7 5700G 3.8 GHz 8-Core Processor"),(0,a.kt)("td",{parentName:"tr",align:"left"},"1")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Motherboard"),(0,a.kt)("td",{parentName:"tr",align:"left"},"MSI B450 TOMAHAWK MAX II ATX AM4 Motherboard"),(0,a.kt)("td",{parentName:"tr",align:"left"},"1")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Memory"),(0,a.kt)("td",{parentName:"tr",align:"left"},"128 GB (2 x 64 GB) Memory"),(0,a.kt)("td",{parentName:"tr",align:"left"},"1")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Storage"),(0,a.kt)("td",{parentName:"tr",align:"left"},'Kingston A400 960 GB 2.5" Solid State Drive'),(0,a.kt)("td",{parentName:"tr",align:"left"},"1")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Storage"),(0,a.kt)("td",{parentName:"tr",align:"left"},'Seagate EXOS Enterprise 14 TB 3.5" 7200RPM Internal Hard Drive'),(0,a.kt)("td",{parentName:"tr",align:"left"},"5")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Case"),(0,a.kt)("td",{parentName:"tr",align:"left"},"Cooler Master N400 ATX Mid Tower Case"),(0,a.kt)("td",{parentName:"tr",align:"left"},"1")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Power Supply"),(0,a.kt)("td",{parentName:"tr",align:"left"},"Corsair HX750 Platinum 750 W 80+ Platinum Certified Fully Modular ATX Power Supply"),(0,a.kt)("td",{parentName:"tr",align:"left"},"1")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Case Fan"),(0,a.kt)("td",{parentName:"tr",align:"left"},"Noctua S12B redux-700 33.49 CFM 120 mm Fan"),(0,a.kt)("td",{parentName:"tr",align:"left"},"2")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Total Cost Estimate"),(0,a.kt)("td",{parentName:"tr",align:"left"},"$2014.08 USD"),(0,a.kt)("td",{parentName:"tr",align:"left"})))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/bbf127f0.baa9f6e6.js b/assets/js/bbf127f0.baa9f6e6.js new file mode 100644 index 0000000..b7544d6 --- /dev/null +++ b/assets/js/bbf127f0.baa9f6e6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[5863],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(n),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return n?r.createElement(h,i(i({ref:t},c),{},{components:n})):r.createElement(h,i({ref:t},c))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const a={sidebar_position:2},i="Setting Up JProvd",l={unversionedId:"nodes/providers/setting_up",id:"nodes/providers/setting_up",title:"Setting Up JProvd",description:"Pre-Requisites",source:"@site/docs/nodes/providers/2_setting_up.md",sourceDirName:"nodes/providers",slug:"/nodes/providers/setting_up",permalink:"/docs/nodes/providers/setting_up",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/nodes/providers/2_setting_up.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Creating Provider",permalink:"/docs/nodes/providers/building"},next:{title:"About These Libraries",permalink:"/docs/developers/dAppLibraries/intro"}},s={},p=[{value:"Pre-Requisites",id:"pre-requisites",level:2},{value:"Installing",id:"installing",level:2},{value:"Initializing",id:"initializing",level:2}],c={toc:p},u="wrapper";function d(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"setting-up-jprovd"},"Setting Up JProvd"),(0,o.kt)("h2",{id:"pre-requisites"},"Pre-Requisites"),(0,o.kt)("p",null,"See ",(0,o.kt)("a",{parentName:"p",href:"/docs/nodes/install"},"Set-up"),"."),(0,o.kt)("h2",{id:"installing"},"Installing"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Check latest version ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-provider/releases"},"here"),".")),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"'Setting Up' instructions must be followed fully to add necessary golang path info to the current users ~/.profile. If\nthese steps are skipped, 'make install' will not build jprovd--the provider daemon. Please ensure to perform the below\nsteps as the 'jackal' user you previously made.")),(0,o.kt)("p",null,"Install make and confirm installation."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"sudo apt update\n\nsudo apt install make\n\nmake --version\n\n")),(0,o.kt)("p",null,"Build jprovd and source the .profile to ensure your shell can find jprovd. Confirm installation."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"git clone https://github.com/JackalLabs/canine-provider.git\n\ncd canine-provider \n\ngit pull\n\ngit checkout {version}\n\nmake install\n\nsource ~/.profile\n\njprovd version\n\n")),(0,o.kt)("p",null,"If you used ZFS to make a zpool. Give ownership of the zpool to the jackal user."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"\nsudo chown -R jackal:jackal /{pool-name}\n\n")),(0,o.kt)("h2",{id:"initializing"},"Initializing"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Your keybase identity can be left as ",(0,o.kt)("inlineCode",{parentName:"p"},'""')," if you don't want to link your provider to keybase.")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Export the path to your storage pool")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"export PHOME={path-to-pool-from-before}\n")),(0,o.kt)("ol",{start:2},(0,o.kt)("li",{parentName:"ol"},"Generate your provider's private key")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"jprovd client gen-key --home=$PHOME\n")),(0,o.kt)("ol",{start:3},(0,o.kt)("li",{parentName:"ol"},"Configure the chain-id")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"jprovd client config chain-id {chain-id} --home=$PHOME\n")),(0,o.kt)("ol",{start:4},(0,o.kt)("li",{parentName:"ol"},"Configure the rpc node your provider will use to connect to the chain")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"jprovd client config node {your node} --home=$PHOME\n")),(0,o.kt)("p",null,"Some users may find it easier to complete steps 3 and 4 manually. Instructions for Ubuntu are below:"),(0,o.kt)("p",null,"In your terminal, while inside of the PHOME directory, type 'nautilus'. This will open the nautilus file explorer.\nAt the top right corner, make sure 'Show Hidden Files' is checked.\nNavigate to your '.jackal-storage' folder to access the config folder.\nOpen the client.toml file to manually type in the 'chain-id' and 'node'.\nSave and close the client.toml file."),(0,o.kt)("p",null,"Testnet and Mainnet chain-ids can be found here: ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/jackal-chain-assets"},"https://github.com/JackalLabs/jackal-chain-assets"),".\nIf you are not running your own tendermint RPC node, Jackal Labs is currently hosting a testnet tendermint RPC node.\nEndpoint below:"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://testnet-rpc.jackalprotocol.com:443"},"https://testnet-rpc.jackalprotocol.com:443")),(0,o.kt)("p",null,"We will also be hosting a tendermint rpc node for mainnet, which will be made accessible to the public at launch of\nJackal Storage."),(0,o.kt)("p",null,"Before completing step 5 below, your account will need tokens.\nTestnet tokens can be obtained at ",(0,o.kt)("a",{parentName:"p",href:"https://testnet-faucet.jackalprotocol.com/"},"https://testnet-faucet.jackalprotocol.com/"),"\nMainnet tokens can be purchased on ",(0,o.kt)("a",{parentName:"p",href:"https://frontier.osmosis.zone/"},"https://frontier.osmosis.zone/")),(0,o.kt)("ol",{start:5},(0,o.kt)("li",{parentName:"ol"},"Initialize the provider")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"jprovd init {FQDN} {STORAGE_IN_BYTES} {KEYBASE_IDENTITY} --home=$PHOME\n")),(0,o.kt)("p",null,"example:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},'jprovd init "https://storagep1.chainstrategies.cloud" "9000" "" --home=$PHOME\n')),(0,o.kt)("p",null,"Please note that 'https://' is required to be included in the FQDN or init will throw an error.\nLink for TB to Bytes converter: ",(0,o.kt)("a",{parentName:"p",href:"https://www.convertunits.com/from/TB/to/byte"},"https://www.convertunits.com/from/TB/to/byte")),(0,o.kt)("ol",{start:6},(0,o.kt)("li",{parentName:"ol"},"Start the provider")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"jprovd start --home=$PHOME\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/bbf127f0.d9a70fe0.js b/assets/js/bbf127f0.d9a70fe0.js deleted file mode 100644 index f056b7a..0000000 --- a/assets/js/bbf127f0.d9a70fe0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[5863],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(n),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return n?r.createElement(h,i(i({ref:t},c),{},{components:n})):r.createElement(h,i({ref:t},c))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const a={sidebar_position:2},i="Setting Up JProvd",l={unversionedId:"nodes/providers/setting_up",id:"nodes/providers/setting_up",title:"Setting Up JProvd",description:"Pre-Requisites",source:"@site/docs/nodes/providers/2_setting_up.md",sourceDirName:"nodes/providers",slug:"/nodes/providers/setting_up",permalink:"/docs/nodes/providers/setting_up",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/nodes/providers/2_setting_up.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Creating Provider",permalink:"/docs/nodes/providers/building"},next:{title:"Jackal.js",permalink:"/docs/developers/jackaljs/intro"}},s={},p=[{value:"Pre-Requisites",id:"pre-requisites",level:2},{value:"Installing",id:"installing",level:2},{value:"Initializing",id:"initializing",level:2}],c={toc:p},u="wrapper";function d(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"setting-up-jprovd"},"Setting Up JProvd"),(0,o.kt)("h2",{id:"pre-requisites"},"Pre-Requisites"),(0,o.kt)("p",null,"See ",(0,o.kt)("a",{parentName:"p",href:"/docs/nodes/install"},"Set-up"),"."),(0,o.kt)("h2",{id:"installing"},"Installing"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Check latest version ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-provider/releases"},"here"),".")),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"'Setting Up' instructions must be followed fully to add necessary golang path info to the current users ~/.profile. If these steps are skipped, 'make install' will not build jprovd--the provider daemon. Please ensure to perform the below steps as the 'jackal' user you previously made. ")),(0,o.kt)("p",null,"Install make and confirm installation. "),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"sudo apt update\n\nsudo apt install make\n\nmake --version\n\n")),(0,o.kt)("p",null,"Build jprovd and source the .profile to ensure your shell can find jprovd. Confirm installation. "),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"git clone https://github.com/JackalLabs/canine-provider.git\n\ncd canine-provider \n\ngit pull\n\ngit checkout {version}\n\nmake install\n\nsource ~/.profile\n\njprovd version\n\n")),(0,o.kt)("p",null,"If you used ZFS to make a zpool. Give ownership of the zpool to the jackal user. "),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"\nsudo chown -R jackal:jackal /{pool-name}\n\n")),(0,o.kt)("h2",{id:"initializing"},"Initializing"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Your keybase identity can be left as ",(0,o.kt)("inlineCode",{parentName:"p"},'""')," if you don't want to link your provider to keybase.")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Export the path to your storage pool ")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"export PHOME={path-to-pool-from-before}\n")),(0,o.kt)("ol",{start:2},(0,o.kt)("li",{parentName:"ol"},"Generate your provider's private key ")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"jprovd client gen-key --home=$PHOME\n")),(0,o.kt)("ol",{start:3},(0,o.kt)("li",{parentName:"ol"},"Configure the chain-id ")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"jprovd client config chain-id {chain-id} --home=$PHOME\n")),(0,o.kt)("ol",{start:4},(0,o.kt)("li",{parentName:"ol"},"Configure the rpc node your provider will use to connect to the chain ")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"jprovd client config node {your node} --home=$PHOME\n")),(0,o.kt)("p",null,"Some users may find it easier to complete steps 3 and 4 manually. Instructions for Ubuntu are below:"),(0,o.kt)("p",null,"In your terminal, while inside of the PHOME directory, type 'nautilus'. This will open the nautilus file explorer.\nAt the top right corner, make sure 'Show Hidden Files' is checked.\nNavigate to your '.jackal-storage' folder to access the config folder.\nOpen the client.toml file to manually type in the 'chain-id' and 'node'.\nSave and close the client.toml file."),(0,o.kt)("p",null,"Testnet and Mainnet chain-ids can be found here: ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/jackal-chain-assets"},"https://github.com/JackalLabs/jackal-chain-assets"),".\nIf you are not running your own tendermint RPC node, Jackal Labs is currently hosting a testnet tendermint RPC node. Endpoint below:"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://testnet-rpc.jackalprotocol.com:443"},"https://testnet-rpc.jackalprotocol.com:443")),(0,o.kt)("p",null,"We will also be hosting a tendermint rpc node for mainnet, which will be made accessible to the public at launch of Jackal Storage. "),(0,o.kt)("p",null,"Before completing step 5 below, your account will need tokens.\nTestnet tokens can be obtained at ",(0,o.kt)("a",{parentName:"p",href:"https://testnet-faucet.jackalprotocol.com/"},"https://testnet-faucet.jackalprotocol.com/"),"\nMainnet tokens can be purchased on ",(0,o.kt)("a",{parentName:"p",href:"https://frontier.osmosis.zone/"},"https://frontier.osmosis.zone/")," "),(0,o.kt)("ol",{start:5},(0,o.kt)("li",{parentName:"ol"},"Initialize the provider ")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"jprovd init {FQDN} {STORAGE_IN_BYTES} {KEYBASE_IDENTITY} --home=$PHOME\n")),(0,o.kt)("p",null,"example:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},'jprovd init "https://storagep1.chainstrategies.cloud" "9000" "" --home=$PHOME\n')),(0,o.kt)("p",null," Please note that 'https://' is required to be included in the FQDN or init will throw an error.\nLink for TB to Bytes converter: ",(0,o.kt)("a",{parentName:"p",href:"https://www.convertunits.com/from/TB/to/byte"},"https://www.convertunits.com/from/TB/to/byte")," "),(0,o.kt)("ol",{start:6},(0,o.kt)("li",{parentName:"ol"},"Start the provider ")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"jprovd start --home=$PHOME\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c894e2df.e4f93de7.js b/assets/js/c894e2df.64f123fb.js similarity index 77% rename from assets/js/c894e2df.e4f93de7.js rename to assets/js/c894e2df.64f123fb.js index 530bb6f..d801556 100644 --- a/assets/js/c894e2df.e4f93de7.js +++ b/assets/js/c894e2df.64f123fb.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[4878],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>b});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),p=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(c.Provider,{value:t},e.children)},s="mdxType",m={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,o=e.mdxType,a=e.originalType,c=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),s=p(r),d=o,b=s["".concat(c,".").concat(d)]||s[d]||m[d]||a;return r?n.createElement(b,i(i({ref:t},u),{},{components:r})):n.createElement(b,i({ref:t},u))}));function b(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[s]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={sidebar_position:1},i="Join the Community!",l={unversionedId:"contributors/join",id:"contributors/join",title:"Join the Community!",description:"The Jackal Community is open to all.",source:"@site/docs/contributors/join.md",sourceDirName:"contributors",slug:"/contributors/join",permalink:"/docs/contributors/join",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/contributors/join.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Jackal Dashboard Guide",permalink:"/docs/using-jackal/dashboard"},next:{title:"Jackal Foundation",permalink:"/docs/contributors/foundation"}},c={},p=[{value:"The Jackal Community is open to all.",id:"the-jackal-community-is-open-to-all",level:2},{value:"To contribute; please join below.",id:"to-contribute-please-join-below",level:3}],u={toc:p},s="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(s,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"join-the-community"},"Join the Community!"),(0,o.kt)("h2",{id:"the-jackal-community-is-open-to-all"},"The Jackal Community is open to all."),(0,o.kt)("p",null,"The Jackal Protocol is a transparent, open source, and community-driven project. We welcome all who want to help build a self-custodial and secure digital future. "),(0,o.kt)("h3",{id:"to-contribute-please-join-below"},"To contribute; please join below."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("a",{parentName:"p",href:"https://twitter.com/home"},"Twitter"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("a",{parentName:"p",href:"https://discord.com/invite/5GKym3p6rj"},"Discord"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("a",{parentName:"p",href:"https://t.me/+kyaQs5qFMF8zZDcx"},"Telegram"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs"},"GitHub"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("a",{parentName:"p",href:"https://forums.jackalprotocol.com/"},"Jackal Forums"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("a",{parentName:"p",href:"https://jackalprotocol.com/"},"Jackal Website")))))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[4878],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>b});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),p=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(c.Provider,{value:t},e.children)},s="mdxType",m={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,o=e.mdxType,a=e.originalType,c=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),s=p(r),d=o,b=s["".concat(c,".").concat(d)]||s[d]||m[d]||a;return r?n.createElement(b,i(i({ref:t},u),{},{components:r})):n.createElement(b,i({ref:t},u))}));function b(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[s]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={sidebar_position:1},i="Join the Community!",l={unversionedId:"contributors/join",id:"contributors/join",title:"Join the Community!",description:"The Jackal Community is open to all.",source:"@site/docs/contributors/join.md",sourceDirName:"contributors",slug:"/contributors/join",permalink:"/docs/contributors/join",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/contributors/join.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Jackal Dashboard Guide",permalink:"/docs/using-jackal/dashboard"},next:{title:"Jackal Foundation",permalink:"/docs/contributors/foundation"}},c={},p=[{value:"The Jackal Community is open to all.",id:"the-jackal-community-is-open-to-all",level:2},{value:"To contribute; please join below.",id:"to-contribute-please-join-below",level:3}],u={toc:p},s="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(s,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"join-the-community"},"Join the Community!"),(0,o.kt)("h2",{id:"the-jackal-community-is-open-to-all"},"The Jackal Community is open to all."),(0,o.kt)("p",null,"The Jackal Protocol is a transparent, open source, and community-driven project. We welcome all who want to help build a\nself-custodial and secure digital future."),(0,o.kt)("h3",{id:"to-contribute-please-join-below"},"To contribute; please join below."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("a",{parentName:"p",href:"https://twitter.com/home"},"Twitter"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("a",{parentName:"p",href:"https://discord.com/invite/5GKym3p6rj"},"Discord"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("a",{parentName:"p",href:"https://t.me/+kyaQs5qFMF8zZDcx"},"Telegram"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs"},"GitHub"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("a",{parentName:"p",href:"https://forums.jackalprotocol.com/"},"Jackal Forums"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("a",{parentName:"p",href:"https://jackalprotocol.com/"},"Jackal Website")))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c97fbebf.482e71ef.js b/assets/js/c97fbebf.482e71ef.js new file mode 100644 index 0000000..d690cab --- /dev/null +++ b/assets/js/c97fbebf.482e71ef.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[4286],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),c=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},p=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=c(n),h=o,m=d["".concat(l,".").concat(h)]||d[h]||u[h]||r;return n?a.createElement(m,s(s({ref:t},p),{},{components:n})):a.createElement(m,s({ref:t},p))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,s=new Array(r);s[0]=h;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[d]="string"==typeof e?e:o,s[1]=i;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var a=n(7462),o=(n(7294),n(3905));const r={sidebar_position:4},s="Joining Mainnet",i={unversionedId:"nodes/nodes/mainnet",id:"nodes/nodes/mainnet",title:"Joining Mainnet",description:"Perform the following as the jackal user.",source:"@site/docs/nodes/nodes/4_mainnet.md",sourceDirName:"nodes/nodes",slug:"/nodes/nodes/mainnet",permalink:"/docs/nodes/nodes/mainnet",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/nodes/nodes/4_mainnet.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"Joining Testnet",permalink:"/docs/nodes/nodes/testnet"},next:{title:"Creating Validator",permalink:"/docs/nodes/validators/joining"}},l={},c=[{value:"Backing up key files",id:"backing-up-key-files",level:2},{value:"Syncing to Current Height",id:"syncing-to-current-height",level:2},{value:"Snapshot method",id:"snapshot-method",level:3},{value:"State Sync Method",id:"state-sync-method",level:3},{value:"State Sync Method 2",id:"state-sync-method-2",level:3},{value:"Versions for Sync",id:"versions-for-sync",level:3},{value:"Starting the daemon",id:"starting-the-daemon",level:2}],p={toc:c},d="wrapper";function u(e){let{components:t,...n}=e;return(0,o.kt)(d,(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"joining-mainnet"},"Joining Mainnet"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Perform the following as the ",(0,o.kt)("inlineCode",{parentName:"p"},"jackal")," user.")),(0,o.kt)("p",null,"After installing ",(0,o.kt)("inlineCode",{parentName:"p"},"canined"),". You can join the mainnet by following these steps:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},'canined init "NODE_NAME" --chain-id=jackal-1\n')),(0,o.kt)("p",null,"Then we want to replace our generated genesis file with the one used to start the network."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},'wget -O ~/.canine/config/genesis.json https://cdn.discordapp.com/attachments/1002389406650466405/1034968352591986859/updated_genesis2.json\n\nSEEDS=$(wget https://raw.githubusercontent.com/JackalLabs/canine-mainnet-genesis/master/genesis/seeds.txt -q -O -)\nPEERS=`curl -sL https://raw.githubusercontent.com/JackalLabs/canine-mainnet-genesis/master/genesis/peers.txt | sort -R | head -n $PEERCOUNT | awk \'{print $1}\' | paste -s -d, -`\nGAS="0.002ujkl"\n\nsed -i.bak -e "s/^seeds *=.*/seeds = \\"$SEEDS\\"/; s/^persistent_peers *=.*/persistent_peers = \\"$PEERS\\"/" $HOME/.canine/config/config.toml\n')),(0,o.kt)("h2",{id:"backing-up-key-files"},"Backing up key files"),(0,o.kt)("p",null,"The created ",(0,o.kt)("inlineCode",{parentName:"p"},"node_key.json")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"priv_validator_key.json")," cannot be recovered. These files ",(0,o.kt)("strong",{parentName:"p"},(0,o.kt)("em",{parentName:"strong"},"must"))," be backed up."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"mkdir ~/key_backup\ncp ~/.canine/config/node_key.json ~/key_backup\ncp ~/.canine/config/priv_validator_key.json ~/key_backup\n")),(0,o.kt)("p",null,"You should also keep an offline backup. Using a program like ",(0,o.kt)("inlineCode",{parentName:"p"},"WinSCP"),", you can easily copy these files to your personal\ndesktop for safe storage/backup."),(0,o.kt)("h2",{id:"syncing-to-current-height"},"Syncing to Current Height"),(0,o.kt)("h3",{id:"snapshot-method"},"Snapshot method"),(0,o.kt)("p",null,"Get a snapshot ",(0,o.kt)("a",{parentName:"p",href:"http://snapshots.autostake.net/jackal-1/"},"here"),"."),(0,o.kt)("p",null,"For the sake of this guide, the snapshot we download is named ",(0,o.kt)("inlineCode",{parentName:"p"},"jackal.tar.lz4")),(0,o.kt)("p",null,"If you plan on becoming a validator, before using the ",(0,o.kt)("inlineCode",{parentName:"p"},"unsafe-reset-all")," flag, always besure to back up\nyour ",(0,o.kt)("inlineCode",{parentName:"p"},"priv_validator_state.json")," file."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"canined unsafe-reset-all --keep-addr-book\nlz4 -c -d jackal.tar.lz4 | tar -x -C $HOME/.canine\n")),(0,o.kt)("p",null,"Then start the chain again."),(0,o.kt)("h3",{id:"state-sync-method"},"State Sync Method"),(0,o.kt)("p",null,"There are a couple of ways to go about doing state sync.\nFirst is the easier route. Visit ",(0,o.kt)("a",{parentName:"p",href:"https://ping.pub/jackal/statesync"},"Ping.pub")," for Jackals State Sync configuration\nsettings."),(0,o.kt)("p",null,"Next, copy these settings from Ping.pub to your ",(0,o.kt)("inlineCode",{parentName:"p"},"config.toml")," in the ",(0,o.kt)("inlineCode",{parentName:"p"},"[statesync]")," section."),(0,o.kt)("p",null,"It should look similar to this:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},'#######################################################\n### State Sync Configuration Options ###\n#######################################################\n[statesync]\n# State sync rapidly bootstraps a new node by discovering, fetching, and restoring a state machine\n# snapshot from peers instead of fetching and replaying historical blocks. Requires some peers in\n# the network to take and serve state machine snapshots. State sync is not attempted if the node\n# has any local state (LastBlockHeight > 0). The node will have a truncated block history,\n# starting from the height of the snapshot.\nenable = true\n\n# RPC servers (comma-separated) for light client verification of the synced state machine and\n# retrieval of state data for node bootstrapping. Also needs a trusted height and corresponding\n# header hash obtained from a trusted source, and a period during which validators can be trusted.\n#\n# For Cosmos SDK-based chains, trust_period should usually be about 2/3 of the unbonding time (~2\n# weeks) during which they can be financially punished (slashed) for misbehavior.\nrpc_servers = "https://rpc.jackalprotocol.com:443,https://rpc.jackalprotocol.com:443"\ntrust_height = 333000\ntrust_hash = "1685850c2d115a86af9059bd3f36a4fbbb0e8ba7f37863d517b6d2f54116daca"\ntrust_period = "168h" # 2/3 of unbonding time\n\n# Time to spend discovering snapshots before initiating a restore.\ndiscovery_time = "15s"\n\n# Temporary directory for state sync snapshot chunks, defaults to the OS tempdir (typically /tmp).\n# Will create a new, randomly named directory within, and remove it when done.\ntemp_dir = ""\n\n# The timeout duration before re-requesting a chunk, possibly from a different\n# peer (default: 1 minute).\nchunk_request_timeout = "10s"\n\n# The number of concurrent chunk fetchers to run (default: 1).\nchunk_fetchers = "42"\n')),(0,o.kt)("p",null,"State syncing can take up to a few minutes to complete. Watch the logs to ensure it's happening. When a snapshot is\nfound, you will see output in your log that is similar to this:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},'1PM INF Discovered new snapshot format=1 hash="S.\ufffdh\ufffdF\ufffd\ufffd\ufffd\\"\\x1d6+\\x1e\ufffd\ufffd\ufffd\u0785\ufffd\ufffd`v@\ufffd\u0446\ufffd\ufffd\ufffd\ufffd\ufffd" height=1810000 module=statesync\n')),(0,o.kt)("p",null,"It will download, verify, and apply chuncks of blockchain data. When it finishes you will see it catching up to blocks"),(0,o.kt)("h3",{id:"state-sync-method-2"},"State Sync Method 2"),(0,o.kt)("p",null,"The follow commandline code will edit your ",(0,o.kt)("inlineCode",{parentName:"p"},"config.toml")," with the proper information for state syncing to the most\nrecent snapshot 3000 blocks and beyond."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},'STATE_SYNC_RPC=https://rpc.jackalprotocol.com:443\nLATEST_HEIGHT=$(curl -s $STATE_SYNC_RPC/block | jq -r .result.block.header.height)\nSYNC_BLOCK_HEIGHT=$(($LATEST_HEIGHT - 3000))\nSYNC_BLOCK_HASH=$(curl -s "$STATE_SYNC_RPC/block?height=$SYNC_BLOCK_HEIGHT" | jq -r .result.block_id.hash)\n\nsed -i.bak -e "s|^enable *=.*|enable = true|" $HOME/.teritorid/config/config.toml\nsed -i.bak -e "s|^rpc_servers *=.*|rpc_servers = \\"$STATE_SYNC_RPC,$STATE_SYNC_RPC\\"|" \\\n $HOME/.teritorid/config/config.toml\nsed -i.bak -e "s|^trust_height *=.*|trust_height = $SYNC_BLOCK_HEIGHT|" \\\n $HOME/.teritorid/config/config.toml\nsed -i.bak -e "s|^trust_hash *=.*|trust_hash = \\"$SYNC_BLOCK_HASH\\"|" \\\n $HOME/.teritorid/config/config.toml\n')),(0,o.kt)("p",null,"When you state sync, you can start with the latest version of ",(0,o.kt)("inlineCode",{parentName:"p"},"canined"),"."),(0,o.kt)("h3",{id:"versions-for-sync"},"Versions for Sync"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"block height"),(0,o.kt)("th",{parentName:"tr",align:null},"canined version"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"45381"),(0,o.kt)("td",{parentName:"tr",align:null},"1.1.2")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"0"),(0,o.kt)("td",{parentName:"tr",align:null},"1.1.0")))),(0,o.kt)("h2",{id:"starting-the-daemon"},"Starting the daemon"),(0,o.kt)("p",null,"Start the daemon and sync to the current height."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"sudo systemctl start jackal\nsudo journalctl -u jackal -f\n")),(0,o.kt)("p",null,"Watch the logs and ensure you are either state syncing correctly, or are syncing up to the current height."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c97fbebf.b26e26ff.js b/assets/js/c97fbebf.b26e26ff.js deleted file mode 100644 index 200adb0..0000000 --- a/assets/js/c97fbebf.b26e26ff.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[4286],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),c=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},p=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=c(n),h=o,m=d["".concat(l,".").concat(h)]||d[h]||u[h]||r;return n?a.createElement(m,s(s({ref:t},p),{},{components:n})):a.createElement(m,s({ref:t},p))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,s=new Array(r);s[0]=h;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[d]="string"==typeof e?e:o,s[1]=i;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var a=n(7462),o=(n(7294),n(3905));const r={sidebar_position:4},s="Joining Mainnet",i={unversionedId:"nodes/nodes/mainnet",id:"nodes/nodes/mainnet",title:"Joining Mainnet",description:"Perform the following as the jackal user.",source:"@site/docs/nodes/nodes/4_mainnet.md",sourceDirName:"nodes/nodes",slug:"/nodes/nodes/mainnet",permalink:"/docs/nodes/nodes/mainnet",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/nodes/nodes/4_mainnet.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"Joining Testnet",permalink:"/docs/nodes/nodes/testnet"},next:{title:"Creating Validator",permalink:"/docs/nodes/validators/joining"}},l={},c=[{value:"Backing up key files",id:"backing-up-key-files",level:2},{value:"Syncing to Current Height",id:"syncing-to-current-height",level:2},{value:"Snapshot method",id:"snapshot-method",level:3},{value:"State Sync Method",id:"state-sync-method",level:3},{value:"State Sync Method 2",id:"state-sync-method-2",level:3},{value:"Versions for Sync",id:"versions-for-sync",level:3},{value:"Starting the daemon",id:"starting-the-daemon",level:2}],p={toc:c},d="wrapper";function u(e){let{components:t,...n}=e;return(0,o.kt)(d,(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"joining-mainnet"},"Joining Mainnet"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Perform the following as the ",(0,o.kt)("inlineCode",{parentName:"p"},"jackal")," user.")),(0,o.kt)("p",null,"After installing ",(0,o.kt)("inlineCode",{parentName:"p"},"canined"),". You can join the mainnet by following these steps:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},'canined init "NODE_NAME" --chain-id=jackal-1\n')),(0,o.kt)("p",null,"Then we want to replace our generated genesis file with the one used to start the network."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},'wget -O ~/.canine/config/genesis.json https://cdn.discordapp.com/attachments/1002389406650466405/1034968352591986859/updated_genesis2.json\n\nSEEDS=$(wget https://raw.githubusercontent.com/JackalLabs/canine-mainnet-genesis/master/genesis/seeds.txt -q -O -)\nPEERS=`curl -sL https://raw.githubusercontent.com/JackalLabs/canine-mainnet-genesis/master/genesis/peers.txt | sort -R | head -n $PEERCOUNT | awk \'{print $1}\' | paste -s -d, -`\nGAS="0.002ujkl"\n\nsed -i.bak -e "s/^seeds *=.*/seeds = \\"$SEEDS\\"/; s/^persistent_peers *=.*/persistent_peers = \\"$PEERS\\"/" $HOME/.canine/config/config.toml\n')),(0,o.kt)("h2",{id:"backing-up-key-files"},"Backing up key files"),(0,o.kt)("p",null,"The created ",(0,o.kt)("inlineCode",{parentName:"p"},"node_key.json")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"priv_validator_key.json")," cannot be recovered. These files ",(0,o.kt)("strong",{parentName:"p"},(0,o.kt)("em",{parentName:"strong"},"must"))," be backed up."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"mkdir ~/key_backup\ncp ~/.canine/config/node_key.json ~/key_backup\ncp ~/.canine/config/priv_validator_key.json ~/key_backup\n")),(0,o.kt)("p",null,"You should also keep an offline backup. Using a program like ",(0,o.kt)("inlineCode",{parentName:"p"},"WinSCP"),", you can easily copy these files to your personal desktop for safe storage/backup."),(0,o.kt)("h2",{id:"syncing-to-current-height"},"Syncing to Current Height"),(0,o.kt)("h3",{id:"snapshot-method"},"Snapshot method"),(0,o.kt)("p",null,"Get a snapshot ",(0,o.kt)("a",{parentName:"p",href:"http://snapshots.autostake.net/jackal-1/"},"here"),"."),(0,o.kt)("p",null,"For the sake of this guide, the snapshot we download is named ",(0,o.kt)("inlineCode",{parentName:"p"},"jackal.tar.lz4")),(0,o.kt)("p",null,"If you plan on becoming a validator, before using the ",(0,o.kt)("inlineCode",{parentName:"p"},"unsafe-reset-all")," flag, always besure to back up your ",(0,o.kt)("inlineCode",{parentName:"p"},"priv_validator_state.json")," file. "),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"canined unsafe-reset-all --keep-addr-book\nlz4 -c -d jackal.tar.lz4 | tar -x -C $HOME/.canine\n")),(0,o.kt)("p",null,"Then start the chain again."),(0,o.kt)("h3",{id:"state-sync-method"},"State Sync Method"),(0,o.kt)("p",null,"There are a couple of ways to go about doing state sync.\nFirst is the easier route. Visit ",(0,o.kt)("a",{parentName:"p",href:"https://ping.pub/jackal/statesync"},"Ping.pub")," for Jackals State Sync configuration settings."),(0,o.kt)("p",null,"Next, copy these settings from Ping.pub to your ",(0,o.kt)("inlineCode",{parentName:"p"},"config.toml")," in the ",(0,o.kt)("inlineCode",{parentName:"p"},"[statesync]")," section."),(0,o.kt)("p",null,"It should look similar to this:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},'#######################################################\n### State Sync Configuration Options ###\n#######################################################\n[statesync]\n# State sync rapidly bootstraps a new node by discovering, fetching, and restoring a state machine\n# snapshot from peers instead of fetching and replaying historical blocks. Requires some peers in\n# the network to take and serve state machine snapshots. State sync is not attempted if the node\n# has any local state (LastBlockHeight > 0). The node will have a truncated block history,\n# starting from the height of the snapshot.\nenable = true\n\n# RPC servers (comma-separated) for light client verification of the synced state machine and\n# retrieval of state data for node bootstrapping. Also needs a trusted height and corresponding\n# header hash obtained from a trusted source, and a period during which validators can be trusted.\n#\n# For Cosmos SDK-based chains, trust_period should usually be about 2/3 of the unbonding time (~2\n# weeks) during which they can be financially punished (slashed) for misbehavior.\nrpc_servers = "https://rpc.jackalprotocol.com:443,https://rpc.jackalprotocol.com:443"\ntrust_height = 333000\ntrust_hash = "1685850c2d115a86af9059bd3f36a4fbbb0e8ba7f37863d517b6d2f54116daca"\ntrust_period = "168h" # 2/3 of unbonding time\n\n# Time to spend discovering snapshots before initiating a restore.\ndiscovery_time = "15s"\n\n# Temporary directory for state sync snapshot chunks, defaults to the OS tempdir (typically /tmp).\n# Will create a new, randomly named directory within, and remove it when done.\ntemp_dir = ""\n\n# The timeout duration before re-requesting a chunk, possibly from a different\n# peer (default: 1 minute).\nchunk_request_timeout = "10s"\n\n# The number of concurrent chunk fetchers to run (default: 1).\nchunk_fetchers = "42"\n')),(0,o.kt)("p",null,"State syncing can take up to a few minutes to complete. Watch the logs to ensure it's happening. When a snapshot is found, you will see output in your log that is similar to this:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},'1PM INF Discovered new snapshot format=1 hash="S.\ufffdh\ufffdF\ufffd\ufffd\ufffd\\"\\x1d6+\\x1e\ufffd\ufffd\ufffd\u0785\ufffd\ufffd`v@\ufffd\u0446\ufffd\ufffd\ufffd\ufffd\ufffd" height=1810000 module=statesync\n')),(0,o.kt)("p",null,"It will download, verify, and apply chuncks of blockchain data. When it finishes you will see it catching up to blocks"),(0,o.kt)("h3",{id:"state-sync-method-2"},"State Sync Method 2"),(0,o.kt)("p",null,"The follow commandline code will edit your ",(0,o.kt)("inlineCode",{parentName:"p"},"config.toml")," with the proper information for state syncing to the most recent snapshot 3000 blocks and beyond."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},'STATE_SYNC_RPC=https://rpc.jackalprotocol.com:443\nLATEST_HEIGHT=$(curl -s $STATE_SYNC_RPC/block | jq -r .result.block.header.height)\nSYNC_BLOCK_HEIGHT=$(($LATEST_HEIGHT - 3000))\nSYNC_BLOCK_HASH=$(curl -s "$STATE_SYNC_RPC/block?height=$SYNC_BLOCK_HEIGHT" | jq -r .result.block_id.hash)\n\nsed -i.bak -e "s|^enable *=.*|enable = true|" $HOME/.teritorid/config/config.toml\nsed -i.bak -e "s|^rpc_servers *=.*|rpc_servers = \\"$STATE_SYNC_RPC,$STATE_SYNC_RPC\\"|" \\\n $HOME/.teritorid/config/config.toml\nsed -i.bak -e "s|^trust_height *=.*|trust_height = $SYNC_BLOCK_HEIGHT|" \\\n $HOME/.teritorid/config/config.toml\nsed -i.bak -e "s|^trust_hash *=.*|trust_hash = \\"$SYNC_BLOCK_HASH\\"|" \\\n $HOME/.teritorid/config/config.toml\n')),(0,o.kt)("p",null,"When you state sync, you can start with the latest version of ",(0,o.kt)("inlineCode",{parentName:"p"},"canined"),"."),(0,o.kt)("h3",{id:"versions-for-sync"},"Versions for Sync"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"block height"),(0,o.kt)("th",{parentName:"tr",align:null},"canined version"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"45381"),(0,o.kt)("td",{parentName:"tr",align:null},"1.1.2")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"0"),(0,o.kt)("td",{parentName:"tr",align:null},"1.1.0")))),(0,o.kt)("h2",{id:"starting-the-daemon"},"Starting the daemon"),(0,o.kt)("p",null,"Start the daemon and sync to the current height."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"sudo systemctl start jackal\nsudo journalctl -u jackal -f\n")),(0,o.kt)("p",null,"Watch the logs and ensure you are either state syncing correctly, or are syncing up to the current height."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d07072fe.2296011a.js b/assets/js/d07072fe.5fe674f0.js similarity index 56% rename from assets/js/d07072fe.2296011a.js rename to assets/js/d07072fe.5fe674f0.js index fb6db89..97515fb 100644 --- a/assets/js/d07072fe.2296011a.js +++ b/assets/js/d07072fe.5fe674f0.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[9404],{3905:(e,t,o)=>{o.d(t,{Zo:()=>s,kt:()=>d});var r=o(7294);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function n(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function l(e){for(var t=1;t=0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var i=r.createContext({}),p=function(e){var t=r.useContext(i),o=t;return e&&(o="function"==typeof e?e(t):l(l({},t),e)),o},s=function(e){var t=p(e.components);return r.createElement(i.Provider,{value:t},e.children)},f="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},k=r.forwardRef((function(e,t){var o=e.components,a=e.mdxType,n=e.originalType,i=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),f=p(o),k=a,d=f["".concat(i,".").concat(k)]||f[k]||u[k]||n;return o?r.createElement(d,l(l({ref:t},s),{},{components:o})):r.createElement(d,l({ref:t},s))}));function d(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=o.length,l=new Array(n);l[0]=k;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c[f]="string"==typeof e?e:a,l[1]=c;for(var p=2;p{o.r(t),o.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>n,metadata:()=>c,toc:()=>p});var r=o(7462),a=(o(7294),o(3905));const n={sidebar_position:1},l="Jackal Protocol Links",c={unversionedId:"official-links/jackal-protocol",id:"official-links/jackal-protocol",title:"Jackal Protocol Links",description:"Here are the official website links of the Jackal Protocol. Please use and bookmark these links to reduce the likelihood of cyber phishing threats.",source:"@site/docs/official-links/jackal-protocol.md",sourceDirName:"official-links",slug:"/official-links/jackal-protocol",permalink:"/docs/official-links/jackal-protocol",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/official-links/jackal-protocol.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Validators",permalink:"/docs/protocol/validators"},next:{title:"Jackal Foundation Links",permalink:"/docs/official-links/jackal-foundation"}},i={},p=[{value:"Protocol",id:"protocol",level:2},{value:"Social",id:"social",level:2}],s={toc:p},f="wrapper";function u(e){let{components:t,...o}=e;return(0,a.kt)(f,(0,r.Z)({},s,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"jackal-protocol-links"},"Jackal Protocol Links"),(0,a.kt)("p",null,"Here are the official website links of the Jackal Protocol. Please use and bookmark these links to reduce the likelihood of cyber phishing threats."),(0,a.kt)("h2",{id:"protocol"},"Protocol"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs"},"Github")),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://jackalprotocol.com/"},"Website")),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://app.jackalprotocol.com/"},"Jackal Dashboard")),(0,a.kt)("h2",{id:"social"},"Social"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://discord.com/invite/5GKym3p6rj"},"Discord")),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://t.me/+kyaQs5qFMF8zZDcx"},"Telegram")),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://twitter.com/Jackal_Protocol"},"Jackal Protocol Twitter")),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://zealy.io/c/jackal/questboard"},"Community Quests")),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://www.reddit.com/r/Jackal_Protocol/"},"Reddit")))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[9404],{3905:(e,t,o)=>{o.d(t,{Zo:()=>s,kt:()=>d});var r=o(7294);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function n(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function l(e){for(var t=1;t=0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var i=r.createContext({}),p=function(e){var t=r.useContext(i),o=t;return e&&(o="function"==typeof e?e(t):l(l({},t),e)),o},s=function(e){var t=p(e.components);return r.createElement(i.Provider,{value:t},e.children)},f="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},k=r.forwardRef((function(e,t){var o=e.components,a=e.mdxType,n=e.originalType,i=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),f=p(o),k=a,d=f["".concat(i,".").concat(k)]||f[k]||u[k]||n;return o?r.createElement(d,l(l({ref:t},s),{},{components:o})):r.createElement(d,l({ref:t},s))}));function d(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=o.length,l=new Array(n);l[0]=k;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c[f]="string"==typeof e?e:a,l[1]=c;for(var p=2;p{o.r(t),o.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>n,metadata:()=>c,toc:()=>p});var r=o(7462),a=(o(7294),o(3905));const n={sidebar_position:1},l="Jackal Protocol Links",c={unversionedId:"official-links/jackal-protocol",id:"official-links/jackal-protocol",title:"Jackal Protocol Links",description:"Here are the official website links of the Jackal Protocol. Please use and bookmark these links to reduce the likelihood",source:"@site/docs/official-links/jackal-protocol.md",sourceDirName:"official-links",slug:"/official-links/jackal-protocol",permalink:"/docs/official-links/jackal-protocol",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/official-links/jackal-protocol.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Validators",permalink:"/docs/protocol/validators"},next:{title:"Jackal Foundation Links",permalink:"/docs/official-links/jackal-foundation"}},i={},p=[{value:"Protocol",id:"protocol",level:2},{value:"Social",id:"social",level:2}],s={toc:p},f="wrapper";function u(e){let{components:t,...o}=e;return(0,a.kt)(f,(0,r.Z)({},s,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"jackal-protocol-links"},"Jackal Protocol Links"),(0,a.kt)("p",null,"Here are the official website links of the Jackal Protocol. Please use and bookmark these links to reduce the likelihood\nof cyber phishing threats."),(0,a.kt)("h2",{id:"protocol"},"Protocol"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs"},"Github")),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://jackalprotocol.com/"},"Website")),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://app.jackalprotocol.com/"},"Jackal Dashboard")),(0,a.kt)("h2",{id:"social"},"Social"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://discord.com/invite/5GKym3p6rj"},"Discord")),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://t.me/+kyaQs5qFMF8zZDcx"},"Telegram")),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://twitter.com/Jackal_Protocol"},"Jackal Protocol Twitter")),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://zealy.io/c/jackal/questboard"},"Community Quests")),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://www.reddit.com/r/Jackal_Protocol/"},"Reddit")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d83a8ade.f27acf7b.js b/assets/js/d83a8ade.f27acf7b.js deleted file mode 100644 index 15ce939..0000000 --- a/assets/js/d83a8ade.f27acf7b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[9014],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>f});var a=t(7294);function l(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function r(e){for(var n=1;n=0||(l[t]=e[t]);return l}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(l[t]=e[t])}return l}var s=a.createContext({}),c=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},p=function(e){var n=c(e.components);return a.createElement(s.Provider,{value:n},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},g=a.forwardRef((function(e,n){var t=e.components,l=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=c(t),g=l,f=d["".concat(s,".").concat(g)]||d[g]||u[g]||o;return t?a.createElement(f,r(r({ref:n},p),{},{components:t})):a.createElement(f,r({ref:n},p))}));function f(e,n){var t=arguments,l=n&&n.mdxType;if("string"==typeof e||l){var o=t.length,r=new Array(o);r[0]=g;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i[d]="string"==typeof e?e:l,r[1]=i;for(var c=2;c{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var a=t(7462),l=(t(7294),t(3905));const o={sidebar_position:2},r="Jackal.js",i={unversionedId:"developers/jackaljs/intro",id:"developers/jackaljs/intro",title:"Jackal.js",description:"Quickstart",source:"@site/docs/developers/jackaljs/intro.md",sourceDirName:"developers/jackaljs",slug:"/developers/jackaljs/intro",permalink:"/docs/developers/jackaljs/intro",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/developers/jackaljs/intro.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Setting Up JProvd",permalink:"/docs/nodes/providers/setting_up"},next:{title:"Getting Started",permalink:"/docs/developers/intro"}},s={},c=[{value:"Quickstart",id:"quickstart",level:2},{value:"Pre-requesites",id:"pre-requesites",level:3},{value:"Setting Up",id:"setting-up",level:3},{value:"Updating Vite Config",id:"updating-vite-config",level:4},{value:"Connecting Your Wallet",id:"connecting-your-wallet",level:3},{value:"Wallet Selection",id:"wallet-selection",level:4},{value:'Testnet Configuration',id:"testnet-configuration",level:4},{value:'Mainnet Configuration',id:"mainnet-configuration",level:4},{value:"Bringing the full config together",id:"bringing-the-full-config-together",level:4},{value:"Buying Storage Space",id:"buying-storage-space",level:3},{value:"Creating a Root Folder",id:"creating-a-root-folder",level:3},{value:"Creating a Child Folder",id:"creating-a-child-folder",level:3},{value:"Uploading a File",id:"uploading-a-file",level:3},{value:"Downloading a File",id:"downloading-a-file",level:3}],p={toc:c},d="wrapper";function u(e){let{components:n,...t}=e;return(0,l.kt)(d,(0,a.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"jackaljs"},"Jackal.js"),(0,l.kt)("h2",{id:"quickstart"},"Quickstart"),(0,l.kt)("p",null,"To get started using Jackal in the browser, you'll need a few things!"),(0,l.kt)("h3",{id:"pre-requesites"},"Pre-requesites"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://vuejs.org/guide/introduction.html"},"Vue.js")," or ",(0,l.kt)("a",{parentName:"li",href:"https://react.dev/learn"},"React")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://www.npmjs.com/package/jackal.js"},"Jackal.js")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://vitejs.dev"},"Vite")),(0,l.kt)("li",{parentName:"ul"},"Chromium-family browser (Chrome, Brave, Edge, etc)"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://www.keplr.app"},"Keplr")," or ",(0,l.kt)("a",{parentName:"li",href:"https://www.leapwallet.io/cosmos"},"Leap")," wallet extension")),(0,l.kt)("h3",{id:"setting-up"},"Setting Up"),(0,l.kt)("p",null,"To get started, make sure you ",(0,l.kt)("a",{parentName:"p",href:"https://vitejs.dev/guide"},"start your project using Vite"),". If you have an existing React app for example, re-init the project using Vite."),(0,l.kt)("p",null,"Install dependencies:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"npm install jackal.js\nnpm install -D vite-plugin-node-stdlib-browser\n")),(0,l.kt)("p",null,"Jackal.js requires Node v20+. The easiest way to manage this is with ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/nvm-sh/nvm#installing-and-updating"},"NVM"),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"nvm use 20\n")),(0,l.kt)("h4",{id:"updating-vite-config"},"Updating Vite Config"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"// In vite.config.js:\nimport { defineConfig } from 'vite'\nimport nodePolyfills from 'vite-plugin-node-stdlib-browser'\n\nexport default defineConfig({\n plugins: [\n nodePolyfills()\n ],\n})\n")),(0,l.kt)("h3",{id:"connecting-your-wallet"},"Connecting Your Wallet"),(0,l.kt)("p",null,"Custom chain configurations are required for ",(0,l.kt)("a",{parentName:"p",href:"#testnet-configuration"},"Testnet"),", and for Keplr on ",(0,l.kt)("a",{parentName:"p",href:"#mainnet-configuration"},"Mainnet"),". The following are the correct options to use.\nJackal.js additionally supports app-level overrides to the chain default settings. This requires some redundancy, but allows for greater flexibility in projects."),(0,l.kt)("h4",{id:"wallet-selection"},"Wallet Selection"),(0,l.kt)("p",null,"Currently Jackal,js supports Keplr and Leap wallets. Only a single wallet can be used at any time, but you can switch between them as desired."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const selectedWallet = 'keplr'\n// OR\nconst selectedWallet = 'leap'\n")),(0,l.kt)("h4",{id:"testnet-configuration"},(0,l.kt)("a",{name:"testnet-configuration"}),"Testnet Configuration"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const chainConfig = {\n chainId: 'lupulella-2',\n chainName: 'Jackal Testnet II',\n rpc: 'https://testnet-rpc.jackalprotocol.com',\n rest: 'https://testnet-api.jackalprotocol.com',\n bip44: {\n coinType: 118\n },\n coinType: 118,\n stakeCurrency: {\n coinDenom: 'JKL',\n coinMinimalDenom: 'ujkl',\n coinDecimals: 6\n },\n bech32Config: {\n bech32PrefixAccAddr: 'jkl',\n bech32PrefixAccPub: 'jklpub',\n bech32PrefixValAddr: 'jklvaloper',\n bech32PrefixValPub: 'jklvaloperpub',\n bech32PrefixConsAddr: 'jklvalcons',\n bech32PrefixConsPub: 'jklvalconspub'\n },\n currencies: [\n {\n coinDenom: 'JKL',\n coinMinimalDenom: 'ujkl',\n coinDecimals: 6\n }\n ],\n feeCurrencies: [\n {\n coinDenom: 'JKL',\n coinMinimalDenom: 'ujkl',\n coinDecimals: 6,\n gasPriceStep: {\n low: 0.002,\n average: 0.002,\n high: 0.02\n }\n }\n ],\n features: []\n}\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const appConfig = {\n signerChain: 'lupulella-2',\n enabledChains: ['lupulella-2'],\n queryAddr: 'https://testnet-grpc.jackalprotocol.com',\n txAddr: 'https://testnet-rpc.jackalprotocol.com'\n}\n")),(0,l.kt)("h4",{id:"mainnet-configuration"},(0,l.kt)("a",{name:"mainnet-configuration"}),"Mainnet Configuration"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const chainConfig = {\n chainId: 'jackal-1',\n chainName: 'Jackal Mainnet',\n rpc: 'https://rpc.jackalprotocol.com',\n rest: 'https://api.jackalprotocol.com',\n bip44: {\n coinType: 118\n },\n coinType: 118,\n stakeCurrency: {\n coinDenom: 'JKL',\n coinMinimalDenom: 'ujkl',\n coinDecimals: 6\n },\n bech32Config: {\n bech32PrefixAccAddr: 'jkl',\n bech32PrefixAccPub: 'jklpub',\n bech32PrefixValAddr: 'jklvaloper',\n bech32PrefixValPub: 'jklvaloperpub',\n bech32PrefixConsAddr: 'jklvalcons',\n bech32PrefixConsPub: 'jklvalconspub'\n },\n currencies: [\n {\n coinDenom: 'JKL',\n coinMinimalDenom: 'ujkl',\n coinDecimals: 6\n }\n ],\n feeCurrencies: [\n {\n coinDenom: 'JKL',\n coinMinimalDenom: 'ujkl',\n coinDecimals: 6,\n gasPriceStep: {\n low: 0.002,\n average: 0.002,\n high: 0.02\n }\n }\n ],\n features: []\n}\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const appConfig = {\n signerChain: 'jackal-1',\n enabledChains: ['jackal-1'],\n queryAddr: 'https://grpc.jackalprotocol.com',\n txAddr: 'https://rpc.jackalprotocol.com'\n}\n")),(0,l.kt)("h4",{id:"bringing-the-full-config-together"},"Bringing the full config together"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const finalWalletConfig = {\n selectedWallet,\n ...appConfig,\n chainConfig\n}\n\n// Hooking up the wallet to your app\nconst wallet = await WalletHandler.trackWallet(finalWalletConfig)\n")),(0,l.kt)("p",null,"Additionally, a query-only mode for the wallet can get accessed via the following:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const wallet = await WalletHandler.trackQueryWallet('https://grpc.jackalprotocol.com') // Use the gRPC-web address of your choice\n")),(0,l.kt)("h3",{id:"buying-storage-space"},"Buying Storage Space"),(0,l.kt)("p",null,"Every account that wishes to use the Jackal Protocol to store data needs to have a paid storage account.\nThis means giving the protocol $8 USD per month per tb. We can do this with Jackal.js!"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const storage = await StorageHandler.trackStorage(wallet)\n\n// (Wallet address, duration in months (min 1), \n// space in terabytes (min .001)\n\n// 2 TB for 1 year:\nawait storage.buyStorage(WALLET_ADDRESS, 12, 2)\n")),(0,l.kt)("h3",{id:"creating-a-root-folder"},"Creating a Root Folder"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},'const fileIo = await FileIo.trackIo(wallet)\n\nconst listOfRootFolders = ["Home", ...] \n// you can create as many root folders as you would like this way. Home is the dashboard default root directory.\n\n// The first time a user connects, they must init the system\nconst storage = await StorageHandler.trackStorage(wallet)\nconst msg = storage.makeStorageInitMsg()\nawait fileIo.generateInitialDirs(msg, listOfRootFolders)\n\n// after the first time, this code can be used instead. this will only create new root folders if they don\'t already exist\nconst newFolderCount = await fileIo.verifyFoldersExist(listOfRootFolders)\n')),(0,l.kt)("h3",{id:"creating-a-child-folder"},"Creating a Child Folder"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},'const fileIo = await FileIo.trackIo(wallet)\n\nconst parentFolderPath = PARENT_FOLDER_NAME // for example Dashboard\'s root folder path is s/Home\nconst parent = await fileIo.downloadFolder(parentFolderPath)\n\nconst listOfChildFolders = ["Movies", "Pictures", ...]\n\nawait fileIo.createFolders(parent, listOfChildFolders)\n')),(0,l.kt)("h3",{id:"uploading-a-file"},"Uploading a File"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const fileIo = await FileIo.trackIo(wallet)\n\nconst parentFolderPath = PARENT_FOLDER_NAME // for example Dashboard's root folder path is s/Home\nconst parent = await fileIo.downloadFolder(parentFolderPath)\n\nconst file = FILE_OBJECT // this MUST be an instance of File() that is in the browser memory\nconst fileName = file.name\nconst handler = await FileUploadHandler.trackFile(file, parentFolderPath)\n\nconst uploadList = {}\nuploadList[fileName] = {\n data: null,\n exists: false,\n handler: handler,\n key: fileName,\n uploadable: await handler.getForUpload()\n}\n\nawait fileIo.staggeredUploadFiles(uploadList, parent, {counter: 0, complete: 0})\n")),(0,l.kt)("h3",{id:"downloading-a-file"},"Downloading a File"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const fileIo = await FileIo.trackIo(wallet)\n\n/* optional */\nconst parentFolderPath = PARENT_FOLDER_NAME // for example Dashboard's root folder path is s/Home\nconst parent = await fileIo.downloadFolder(parentFolderPath)\nconst childrenFiles = parent.getChildFiles()\nconst pathOfFirstChild = parent.getMyChildPath(childrenFiles[0].name)\n/* end optional */\n\nconst downloadDetails = {\n rawPath: FILE_PATH, // manual complete file path OR pathOfFirstChild\n owner: OWNER_ADDRESS, // JKL address of file owner\n isFolder: false\n}\n\nconst fileHanlder = await fileIo.downloadFile(downloadDetails, { track: 0 })\n\nconst file = fileHanlder.receiveBacon()\n// do what you want with the File object returned by receiveBacon\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d866114a.d0d638cd.js b/assets/js/d866114a.d0d638cd.js new file mode 100644 index 0000000..9cafa62 --- /dev/null +++ b/assets/js/d866114a.d0d638cd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[2855],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>g});var a=t(7294);function l(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function r(e){for(var n=1;n=0||(l[t]=e[t]);return l}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(l[t]=e[t])}return l}var s=a.createContext({}),c=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},p=function(e){var n=c(e.components);return a.createElement(s.Provider,{value:n},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,l=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=c(t),m=l,g=d["".concat(s,".").concat(m)]||d[m]||u[m]||o;return t?a.createElement(g,r(r({ref:n},p),{},{components:t})):a.createElement(g,r({ref:n},p))}));function g(e,n){var t=arguments,l=n&&n.mdxType;if("string"==typeof e||l){var o=t.length,r=new Array(o);r[0]=m;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i[d]="string"==typeof e?e:l,r[1]=i;for(var c=2;c{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var a=t(7462),l=(t(7294),t(3905));const o={sidebar_position:3},r="Jackal.js",i={unversionedId:"developers/dAppLibraries/jackal_js",id:"developers/dAppLibraries/jackal_js",title:"Jackal.js",description:"Implements Jacakl.js-protos",source:"@site/docs/developers/dAppLibraries/3_jackal_js.md",sourceDirName:"developers/dAppLibraries",slug:"/developers/dAppLibraries/jackal_js",permalink:"/docs/developers/dAppLibraries/jackal_js",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/developers/dAppLibraries/3_jackal_js.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Jackal.js-protos / Jackal.nodejs-protos",permalink:"/docs/developers/dAppLibraries/jackal_protos"},next:{title:"Jackal.nodejs",permalink:"/docs/developers/dAppLibraries/jackal_nodejs"}},s={},c=[{value:"Quickstart",id:"quickstart",level:2},{value:"Pre-requesites",id:"pre-requesites",level:3},{value:"Setting Up",id:"setting-up",level:3},{value:"Updating Vite Config",id:"updating-vite-config",level:4},{value:"Connecting Your Wallet",id:"connecting-your-wallet",level:3},{value:"Wallet Selection",id:"wallet-selection",level:4},{value:'Testnet Configuration',id:"testnet-configuration",level:4},{value:'Mainnet Configuration',id:"mainnet-configuration",level:4},{value:"Bringing the full config together",id:"bringing-the-full-config-together",level:4},{value:"Buying Storage Space",id:"buying-storage-space",level:3},{value:"Creating a Root Folder",id:"creating-a-root-folder",level:3},{value:"Creating a Child Folder",id:"creating-a-child-folder",level:3},{value:"Uploading a File",id:"uploading-a-file",level:3},{value:"Downloading a File",id:"downloading-a-file",level:3}],p={toc:c},d="wrapper";function u(e){let{components:n,...t}=e;return(0,l.kt)(d,(0,a.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"jackaljs"},"Jackal.js"),(0,l.kt)("p",null,"Implements ",(0,l.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/@jackallabs/jackal.js-protos"},"Jacakl.js-protos")),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"https://jackallabs.github.io/jackal.js/"},"Full method documentation")),(0,l.kt)("h2",{id:"quickstart"},"Quickstart"),(0,l.kt)("p",null,"To get started using Jackal in the browser, you'll need a few things!"),(0,l.kt)("h3",{id:"pre-requesites"},"Pre-requesites"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Nodejs v20+"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://vuejs.org/guide/introduction.html"},"Vue.js")," or ",(0,l.kt)("a",{parentName:"li",href:"https://react.dev/learn"},"React")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://www.npmjs.com/package/@jackallabs/jackal.js"},"Jackal.js")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://vitejs.dev"},"Vite")),(0,l.kt)("li",{parentName:"ul"},"Chromium-family browser (Chrome, Brave, Edge, etc)"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://www.keplr.app"},"Keplr")," or ",(0,l.kt)("a",{parentName:"li",href:"https://www.leapwallet.io/cosmos"},"Leap")," wallet extension")),(0,l.kt)("h3",{id:"setting-up"},"Setting Up"),(0,l.kt)("p",null,"To get started, make sure you ",(0,l.kt)("a",{parentName:"p",href:"https://vitejs.dev/guide"},"start your project using Vite"),". If you have an existing React\napp for example, re-init the project using Vite."),(0,l.kt)("p",null,"Install dependencies:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"npm create vite@latest\nnpm install @jackallabs/jackal.js-protos @cosmjs/proto-signing\nnpm install -D vite-plugin-node-stdlib-browser\n")),(0,l.kt)("p",null,"Jackal.js requires Node v20+. The easiest way to manage this is\nwith ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/nvm-sh/nvm#installing-and-updating"},"NVM"),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"nvm use 20\n")),(0,l.kt)("h4",{id:"updating-vite-config"},"Updating Vite Config"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"// In vite.config.js:\nimport { defineConfig } from 'vite'\nimport nodePolyfills from 'vite-plugin-node-stdlib-browser'\n\nexport default defineConfig({\n plugins: [\n nodePolyfills()\n ],\n})\n")),(0,l.kt)("h3",{id:"connecting-your-wallet"},"Connecting Your Wallet"),(0,l.kt)("p",null,"Custom chain configurations are required for ",(0,l.kt)("a",{parentName:"p",href:"#testnet-configuration"},"Testnet"),", and for Keplr\non ",(0,l.kt)("a",{parentName:"p",href:"#mainnet-configuration"},"Mainnet"),".\nThe following are the correct options to use. Jackal.js additionally supports app-level overrides to the chain default\nsettings. This requires some redundancy, but allows for greater flexibility in projects."),(0,l.kt)("h4",{id:"wallet-selection"},"Wallet Selection"),(0,l.kt)("p",null,"Currently Jackal,js supports Keplr and Leap wallets. Only a single wallet can be used at any time, but you can switch\nbetween them as desired."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const selectedWallet = 'keplr'\n// OR\nconst selectedWallet = 'leap'\n")),(0,l.kt)("h4",{id:"testnet-configuration"},(0,l.kt)("a",{name:"testnet-configuration"}),"Testnet Configuration"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const chainConfig = {\n chainId: 'lupulella-2',\n chainName: 'Jackal Testnet II',\n rpc: 'https://testnet-rpc.jackalprotocol.com',\n rest: 'https://testnet-api.jackalprotocol.com',\n bip44: {\n coinType: 118\n },\n coinType: 118,\n stakeCurrency: {\n coinDenom: 'JKL',\n coinMinimalDenom: 'ujkl',\n coinDecimals: 6\n },\n bech32Config: {\n bech32PrefixAccAddr: 'jkl',\n bech32PrefixAccPub: 'jklpub',\n bech32PrefixValAddr: 'jklvaloper',\n bech32PrefixValPub: 'jklvaloperpub',\n bech32PrefixConsAddr: 'jklvalcons',\n bech32PrefixConsPub: 'jklvalconspub'\n },\n currencies: [\n {\n coinDenom: 'JKL',\n coinMinimalDenom: 'ujkl',\n coinDecimals: 6\n }\n ],\n feeCurrencies: [\n {\n coinDenom: 'JKL',\n coinMinimalDenom: 'ujkl',\n coinDecimals: 6,\n gasPriceStep: {\n low: 0.002,\n average: 0.002,\n high: 0.02\n }\n }\n ],\n features: []\n}\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const appConfig = {\n signerChain: 'lupulella-2',\n enabledChains: ['lupulella-2'],\n queryAddr: 'https://testnet-grpc.jackalprotocol.com',\n txAddr: 'https://testnet-rpc.jackalprotocol.com'\n}\n")),(0,l.kt)("h4",{id:"mainnet-configuration"},(0,l.kt)("a",{name:"mainnet-configuration"}),"Mainnet Configuration"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const chainConfig = {\n chainId: 'jackal-1',\n chainName: 'Jackal Mainnet',\n rpc: 'https://rpc.jackalprotocol.com',\n rest: 'https://api.jackalprotocol.com',\n bip44: {\n coinType: 118\n },\n coinType: 118,\n stakeCurrency: {\n coinDenom: 'JKL',\n coinMinimalDenom: 'ujkl',\n coinDecimals: 6\n },\n bech32Config: {\n bech32PrefixAccAddr: 'jkl',\n bech32PrefixAccPub: 'jklpub',\n bech32PrefixValAddr: 'jklvaloper',\n bech32PrefixValPub: 'jklvaloperpub',\n bech32PrefixConsAddr: 'jklvalcons',\n bech32PrefixConsPub: 'jklvalconspub'\n },\n currencies: [\n {\n coinDenom: 'JKL',\n coinMinimalDenom: 'ujkl',\n coinDecimals: 6\n }\n ],\n feeCurrencies: [\n {\n coinDenom: 'JKL',\n coinMinimalDenom: 'ujkl',\n coinDecimals: 6,\n gasPriceStep: {\n low: 0.002,\n average: 0.002,\n high: 0.02\n }\n }\n ],\n features: []\n}\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const appConfig = {\n signerChain: 'jackal-1',\n enabledChains: ['jackal-1'],\n queryAddr: 'https://grpc.jackalprotocol.com',\n txAddr: 'https://rpc.jackalprotocol.com'\n}\n")),(0,l.kt)("h4",{id:"bringing-the-full-config-together"},"Bringing the full config together"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const finalWalletConfig = {\n selectedWallet,\n ...appConfig,\n chainConfig\n}\n// Hooking up the wallet to your app\nconst wallet = await WalletHandler.trackWallet(finalWalletConfig)\n")),(0,l.kt)("p",null,"Additionally, a query-only mode for the wallet can get accessed via the following:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const wallet = await WalletHandler.trackQueryWallet('https://grpc.jackalprotocol.com') // Use the gRPC-web address of your choice\n")),(0,l.kt)("h3",{id:"buying-storage-space"},"Buying Storage Space"),(0,l.kt)("p",null,"Every account that wishes to use the Jackal Protocol to store data needs to have a paid storage account.\nThis means giving the protocol $8 USD per month per tb. We can do this with Jackal.js!"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const storage = await StorageHandler.trackStorage(wallet)\n// (Wallet address)\n// duration in months (min 1)\n// space in terabytes (min .001)\n// 2 TB for 1 year:\nawait storage.buyStorage(WALLET_ADDRESS, 12, 2)\n")),(0,l.kt)("h3",{id:"creating-a-root-folder"},"Creating a Root Folder"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const minimumProviderVersion = '1.0.9'\nconst fileIo = await FileIo.trackIo(wallet, minimumProviderVersion)\nconst listOfRootFolders = [\"Home\", ...]\n// you can create as many root folders as you would like this way. Home is the Jackal Dashboard default root directory.\n// The first time a user connects, they must init the system\nconst storage = await StorageHandler.trackStorage(wallet)\nconst msg = storage.makeStorageInitMsg()\nawait fileIo.generateInitialDirs(msg, listOfRootFolders)\n// after the first time, this code can be used instead. this will only create new root folders if they don't already exist\nconst newFolderCount = await fileIo.verifyFoldersExist(listOfRootFolders)\n")),(0,l.kt)("h3",{id:"creating-a-child-folder"},"Creating a Child Folder"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},'const fileIo = await FileIo.trackIo(wallet)\nconst parentFolderPath = PARENT_FOLDER_NAME_AND_PATH // for example Dashboard\'s root folder path is s/Home\nconst parent = await fileIo.downloadFolder(parentFolderPath)\nconst listOfChildFolders = ["Movies", "Pictures", ...]\nawait fileIo.createFolders(parent, listOfChildFolders)\n')),(0,l.kt)("h3",{id:"uploading-a-file"},"Uploading a File"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const fileIo = await FileIo.trackIo(wallet)\nconst parentFolderPath = PARENT_FOLDER_NAME_AND_PATH // for example Dashboard's root folder path is s/Home\nconst parent = await fileIo.downloadFolder(parentFolderPath)\nconst file = FILE_OBJECT // this MUST be an instance of File() that is in the browser memory\nconst fileName = file.name\nconst handler = await FileUploadHandler.trackFile(file, parentFolderPath)\nconst uploadList = {}\nuploadList[fileName] = {\n data: null,\n exists: false,\n handler: handler,\n key: fileName,\n uploadable: await handler.getForUpload()\n}\nawait fileIo.staggeredUploadFiles(uploadList, parent, {counter: 0, complete: 0})\n")),(0,l.kt)("h3",{id:"downloading-a-file"},"Downloading a File"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const fileIo = await FileIo.trackIo(wallet)\n/* optional */\nconst parentFolderPath = PARENT_FOLDER_NAME_AND_PATH // for example Dashboard's root folder path is s/Home\nconst parent = await fileIo.downloadFolder(parentFolderPath)\nconst childrenFiles = parent.getChildFiles()\nconst pathOfFirstChild = parent.getMyChildPath(childrenFiles[0].name)\n/* end optional */\nconst downloadDetails = {\n rawPath: FILE_PATH, // manual complete file path OR pathOfFirstChild\n owner: OWNER_ADDRESS, // JKL address of file owner\n isFolder: false\n}\nconst fileHanlder = await fileIo.downloadFile(downloadDetails, {track: 0})\nconst file = fileHanlder.receiveBacon()\n// do what you want with the File object returned by receiveBacon\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/dda406b3.03dc545d.js b/assets/js/dda406b3.03dc545d.js new file mode 100644 index 0000000..289588c --- /dev/null +++ b/assets/js/dda406b3.03dc545d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[316],{3905:(e,r,t)=>{t.d(r,{Zo:()=>l,kt:()=>f});var n=t(7294);function o(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function i(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function a(e){for(var r=1;r=0||(o[t]=e[t]);return o}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var c=n.createContext({}),p=function(e){var r=n.useContext(c),t=r;return e&&(t="function"==typeof e?e(r):a(a({},r),e)),t},l=function(e){var r=p(e.components);return n.createElement(c.Provider,{value:r},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},b=n.forwardRef((function(e,r){var t=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),u=p(t),b=o,f=u["".concat(c,".").concat(b)]||u[b]||d[b]||i;return t?n.createElement(f,a(a({ref:r},l),{},{components:t})):n.createElement(f,a({ref:r},l))}));function f(e,r){var t=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var i=t.length,a=new Array(i);a[0]=b;var s={};for(var c in r)hasOwnProperty.call(r,c)&&(s[c]=r[c]);s.originalType=e,s[u]="string"==typeof e?e:o,a[1]=s;for(var p=2;p{t.r(r),t.d(r,{assets:()=>c,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var n=t(7462),o=(t(7294),t(3905));const i={sidebar_position:1},a="About These Libraries",s={unversionedId:"developers/dAppLibraries/intro",id:"developers/dAppLibraries/intro",title:"About These Libraries",description:"The following sections outline the basics of how to use the available libraries to interact with the Jackal chain. These",source:"@site/docs/developers/dAppLibraries/1_intro.md",sourceDirName:"developers/dAppLibraries",slug:"/developers/dAppLibraries/intro",permalink:"/docs/developers/dAppLibraries/intro",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/developers/dAppLibraries/1_intro.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Setting Up JProvd",permalink:"/docs/nodes/providers/setting_up"},next:{title:"Jackal.js-protos / Jackal.nodejs-protos",permalink:"/docs/developers/dAppLibraries/jackal_protos"}},c={},p=[],l={toc:p},u="wrapper";function d(e){let{components:r,...t}=e;return(0,o.kt)(u,(0,n.Z)({},l,t,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"about-these-libraries"},"About These Libraries"),(0,o.kt)("p",null,"The following sections outline the basics of how to use the available libraries to interact with the Jackal chain. These\nare a work in progress and will be expanded on over time."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e1923b53.d71b1720.js b/assets/js/e1923b53.169a8c97.js similarity index 79% rename from assets/js/e1923b53.d71b1720.js rename to assets/js/e1923b53.169a8c97.js index eb67b6e..d687caf 100644 --- a/assets/js/e1923b53.d71b1720.js +++ b/assets/js/e1923b53.169a8c97.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[1947],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>f});var r=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function s(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var c=r.createContext({}),l=function(e){var n=r.useContext(c),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},p=function(e){var n=l(e.components);return r.createElement(c.Provider,{value:n},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},m=r.forwardRef((function(e,n){var t=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=l(t),m=a,f=d["".concat(c,".").concat(m)]||d[m]||u[m]||o;return t?r.createElement(f,s(s({ref:n},p),{},{components:t})):r.createElement(f,s({ref:n},p))}));function f(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var o=t.length,s=new Array(o);s[0]=m;var i={};for(var c in n)hasOwnProperty.call(n,c)&&(i[c]=n[c]);i.originalType=e,i[d]="string"==typeof e?e:a,s[1]=i;for(var l=2;l{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var r=t(7462),a=(t(7294),t(3905));const o={sidebar_position:3},s="Joining Testnet",i={unversionedId:"nodes/nodes/testnet",id:"nodes/nodes/testnet",title:"Joining Testnet",description:"After installing canined. You can join the testnet by following these steps:",source:"@site/docs/nodes/nodes/3_testnet.md",sourceDirName:"nodes/nodes",slug:"/nodes/nodes/testnet",permalink:"/docs/nodes/nodes/testnet",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/nodes/nodes/3_testnet.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Installing Canined",permalink:"/docs/nodes/nodes/installation"},next:{title:"Joining Mainnet",permalink:"/docs/nodes/nodes/mainnet"}},c={},l=[],p={toc:l},d="wrapper";function u(e){let{components:n,...t}=e;return(0,a.kt)(d,(0,r.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"joining-testnet"},"Joining Testnet"),(0,a.kt)("p",null,"After installing ",(0,a.kt)("inlineCode",{parentName:"p"},"canined"),". You can join the testnet by following these steps:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},"canined init --chain-id=\n")),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("inlineCode",{parentName:"p"},"chain-id")," for testnet is currently ",(0,a.kt)("inlineCode",{parentName:"p"},"lupulella-2"),".")),(0,a.kt)("p",null,"Then we want to replace our generated genesis file with the one used to start the network. We also need to set our peers and seeds."),(0,a.kt)("p",null,"For an updated list of peers & seeds, please check ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/jackal-chain-assets/blob/main/testnet/seeds.md"},"this page"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},'wget -O ~/.canine/config/genesis.json https://raw.githubusercontent.com/JackalLabs/jackal-chain-assets/main/testnet/genesis.json\n\nexport SEEDS="84f520678ef59ea02f942fa6323ec562ca5a3249@45.79.161.178:26656,cecc087977336da1e9ccd2c50097cd9e7d5e1874@141.95.33.39:26656"\nsed -i.bak -e "s/^seeds *=.*/seeds = \\"$SEEDS\\"/" ~/.canine/config/config.toml\n')),(0,a.kt)("p",null,"As a validator, you'll need to set a minimum gas price like so:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},'GAS="0.002ujkl"\nsed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \\"$GAS\\"/" $HOME/.canine/config/app.toml\n')))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[1947],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>f});var r=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function s(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var c=r.createContext({}),l=function(e){var n=r.useContext(c),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},p=function(e){var n=l(e.components);return r.createElement(c.Provider,{value:n},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},m=r.forwardRef((function(e,n){var t=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=l(t),m=a,f=d["".concat(c,".").concat(m)]||d[m]||u[m]||o;return t?r.createElement(f,s(s({ref:n},p),{},{components:t})):r.createElement(f,s({ref:n},p))}));function f(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var o=t.length,s=new Array(o);s[0]=m;var i={};for(var c in n)hasOwnProperty.call(n,c)&&(i[c]=n[c]);i.originalType=e,i[d]="string"==typeof e?e:a,s[1]=i;for(var l=2;l{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var r=t(7462),a=(t(7294),t(3905));const o={sidebar_position:3},s="Joining Testnet",i={unversionedId:"nodes/nodes/testnet",id:"nodes/nodes/testnet",title:"Joining Testnet",description:"After installing canined. You can join the testnet by following these steps:",source:"@site/docs/nodes/nodes/3_testnet.md",sourceDirName:"nodes/nodes",slug:"/nodes/nodes/testnet",permalink:"/docs/nodes/nodes/testnet",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/nodes/nodes/3_testnet.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Installing Canined",permalink:"/docs/nodes/nodes/installation"},next:{title:"Joining Mainnet",permalink:"/docs/nodes/nodes/mainnet"}},c={},l=[],p={toc:l},d="wrapper";function u(e){let{components:n,...t}=e;return(0,a.kt)(d,(0,r.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"joining-testnet"},"Joining Testnet"),(0,a.kt)("p",null,"After installing ",(0,a.kt)("inlineCode",{parentName:"p"},"canined"),". You can join the testnet by following these steps:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},"canined init --chain-id=\n")),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("inlineCode",{parentName:"p"},"chain-id")," for testnet is currently ",(0,a.kt)("inlineCode",{parentName:"p"},"lupulella-2"),".")),(0,a.kt)("p",null,"Then we want to replace our generated genesis file with the one used to start the network. We also need to set our peers\nand seeds."),(0,a.kt)("p",null,"For an updated list of peers & seeds, please\ncheck ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/jackal-chain-assets/blob/main/testnet/seeds.md"},"this page"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},'wget -O ~/.canine/config/genesis.json https://raw.githubusercontent.com/JackalLabs/jackal-chain-assets/main/testnet/genesis.json\n\nexport SEEDS="84f520678ef59ea02f942fa6323ec562ca5a3249@45.79.161.178:26656,cecc087977336da1e9ccd2c50097cd9e7d5e1874@141.95.33.39:26656"\nsed -i.bak -e "s/^seeds *=.*/seeds = \\"$SEEDS\\"/" ~/.canine/config/config.toml\n')),(0,a.kt)("p",null,"As a validator, you'll need to set a minimum gas price like so:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},'GAS="0.002ujkl"\nsed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \\"$GAS\\"/" $HOME/.canine/config/app.toml\n')))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e289ecfd.8a4268d1.js b/assets/js/e289ecfd.8a4268d1.js new file mode 100644 index 0000000..07d82bf --- /dev/null +++ b/assets/js/e289ecfd.8a4268d1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[3523],{3905:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},m=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},p="mdxType",u={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,o=e.mdxType,a=e.originalType,l=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),p=c(r),d=o,f=p["".concat(l,".").concat(d)]||p[d]||u[d]||a;return r?n.createElement(f,s(s({ref:t},m),{},{components:r})):n.createElement(f,s({ref:t},m))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,s=new Array(a);s[0]=d;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[p]="string"==typeof e?e:o,s[1]=i;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var n=r(7462),o=(r(7294),r(3905));const a={sidebar_position:4},s="Name Service Module",i={unversionedId:"protocol/modules/rns",id:"protocol/modules/rns",title:"Name Service Module",description:"The rns (Reverse Name Service) module is an essential component of the Jackal Protocol, providing a user-friendly",source:"@site/docs/protocol/modules/rns.md",sourceDirName:"protocol/modules",slug:"/protocol/modules/rns",permalink:"/docs/protocol/modules/rns",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/protocol/modules/rns.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"LP Module (Coming Soon)",permalink:"/docs/protocol/modules/lp"},next:{title:"WASM Module",permalink:"/docs/protocol/modules/wasm"}},l={},c=[{value:"Overview",id:"overview",level:2}],m={toc:c},p="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"name-service-module"},"Name Service Module"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"rns")," (Reverse Name Service) module is an essential component of the Jackal Protocol, providing a user-friendly\nnaming system for blockchain addresses. The RNS module simplifies the process of interacting with complex addresses by\nmapping them to human-readable names. This module allows users to transfer tokens and permissions to files/folders\nstored on the Jackal Protocol using human readable names."),(0,o.kt)("h2",{id:"overview"},"Overview"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"rns")," module manages the following aspects of the Reverse Name Service:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Name Registration"),": Allows users to register unique names for their blockchain addresses."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Name Management"),": Facilitates updating, renewing, and transferring RNS names."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Name Resolution"),": Provides a mechanism for resolving RNS names to their corresponding addresses."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Name Sales"),": Enables users to buy and sell RNS names through the RNS Marketplace."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Name Transfers"),": Enables users to transfer RNS names.")),(0,o.kt)("p",null,"For a more detailed guide on integrating the rns module into your application, please refer to\nthe ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain/blob/master/x/README.md"},"module documentation")," on GitHub."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e289ecfd.d57d11c2.js b/assets/js/e289ecfd.d57d11c2.js deleted file mode 100644 index 6851420..0000000 --- a/assets/js/e289ecfd.d57d11c2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[3523],{3905:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},m=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},p="mdxType",u={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,o=e.mdxType,a=e.originalType,l=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),p=c(r),d=o,f=p["".concat(l,".").concat(d)]||p[d]||u[d]||a;return r?n.createElement(f,s(s({ref:t},m),{},{components:r})):n.createElement(f,s({ref:t},m))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,s=new Array(a);s[0]=d;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[p]="string"==typeof e?e:o,s[1]=i;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var n=r(7462),o=(r(7294),r(3905));const a={sidebar_position:4},s="Name Service Module",i={unversionedId:"protocol/modules/rns",id:"protocol/modules/rns",title:"Name Service Module",description:"The rns (Reverse Name Service) module is an essential component of the Jackal Protocol, providing a user-friendly naming system for blockchain addresses. The RNS module simplifies the process of interacting with complex addresses by mapping them to human-readable names. This module allows users to transfer tokens and permissions to files/folders stored on the Jackal Protocol using human readable names.",source:"@site/docs/protocol/modules/rns.md",sourceDirName:"protocol/modules",slug:"/protocol/modules/rns",permalink:"/docs/protocol/modules/rns",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/protocol/modules/rns.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"LP Module (Coming Soon)",permalink:"/docs/protocol/modules/lp"},next:{title:"WASM Module",permalink:"/docs/protocol/modules/wasm"}},l={},c=[{value:"Overview",id:"overview",level:2}],m={toc:c},p="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"name-service-module"},"Name Service Module"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"rns")," (Reverse Name Service) module is an essential component of the Jackal Protocol, providing a user-friendly naming system for blockchain addresses. The RNS module simplifies the process of interacting with complex addresses by mapping them to human-readable names. This module allows users to transfer tokens and permissions to files/folders stored on the Jackal Protocol using human readable names. "),(0,o.kt)("h2",{id:"overview"},"Overview"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"rns")," module manages the following aspects of the Reverse Name Service:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Name Registration"),": Allows users to register unique names for their blockchain addresses."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Name Management"),": Facilitates updating, renewing, and transferring RNS names."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Name Resolution"),": Provides a mechanism for resolving RNS names to their corresponding addresses."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Name Sales"),": Enables users to buy and sell RNS names through the RNS Marketplace."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Name Transfers"),": Enables users to transfer RNS names.")),(0,o.kt)("p",null,"For a more detailed guide on integrating the rns module into your application, please refer to the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/canine-chain/blob/master/x/README.md"},"module documentation")," on GitHub."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ea96f03c.023d2762.js b/assets/js/ea96f03c.023d2762.js new file mode 100644 index 0000000..dcf7b47 --- /dev/null +++ b/assets/js/ea96f03c.023d2762.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[3298],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>h});var n=r(7294);function o(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 c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var a=n.createContext({}),l=function(e){var t=n.useContext(a),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(a.Provider,{value:t},e.children)},y="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,a=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),y=l(r),u=o,h=y["".concat(a,".").concat(u)]||y[u]||d[u]||i;return r?n.createElement(h,c(c({ref:t},p),{},{components:r})):n.createElement(h,c({ref:t},p))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,c=new Array(i);c[0]=u;var s={};for(var a in t)hasOwnProperty.call(t,a)&&(s[a]=t[a]);s.originalType=e,s[y]="string"==typeof e?e:o,c[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const i={sidebar_position:2},c="Encryption in Jackal Protocol",s={unversionedId:"protocol/encryption",id:"protocol/encryption",title:"Encryption in Jackal Protocol",description:"The Jackal Protocol utilizes encryption techniques to ensure the privacy and security of user data. The two primary",source:"@site/docs/protocol/encryption.md",sourceDirName:"protocol",slug:"/protocol/encryption",permalink:"/docs/protocol/encryption",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/protocol/encryption.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"JKL Token",permalink:"/docs/protocol/tokens"},next:{title:"Validators",permalink:"/docs/protocol/validators"}},a={},l=[{value:"File Encryption",id:"file-encryption",level:2},{value:"Integrated Encryption Scheme",id:"integrated-encryption-scheme",level:2},{value:"File Sharing and Access",id:"file-sharing-and-access",level:2}],p={toc:l},y="wrapper";function d(e){let{components:t,...i}=e;return(0,o.kt)(y,(0,n.Z)({},p,i,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"encryption-in-jackal-protocol"},"Encryption in Jackal Protocol"),(0,o.kt)("p",null,"The Jackal Protocol utilizes encryption techniques to ensure the privacy and security of user data. The two primary\nencryption models within the protocol are file encryption and file-entry encryption. File encryption secures the files\nthemselves, while file-entry encryption focuses on securing the file entries on the blockchain."),(0,o.kt)("h2",{id:"file-encryption"},"File Encryption"),(0,o.kt)("p",null,"File encryption is essential for protecting the data stored on storage providers within the Jackal Protocol. Before\ntransferring files to storage providers, the user's client encrypts the files using a randomly generated symmetric key.\nThe Advanced Encryption Standard (AES-256) is used for this encryption process, resulting in a securely encrypted file."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"File Encryption Process",src:r(5542).Z,width:"482",height:"302"})),(0,o.kt)("p",null,"The symmetric key's secure storage is equally crucial, as exposing it would compromise the file's encryption. The Jackal\nChain's File Tree Module serves as a safe and immutable location for storing the encrypted symmetric key alongside the\nfile's location."),(0,o.kt)("h2",{id:"integrated-encryption-scheme"},"Integrated Encryption Scheme"),(0,o.kt)("p",null,"The protocol uses an Integrated Encryption Scheme based on AES and the Elliptic Curve cryptography, which generates\nBech32 addresses for secure key storage."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Integrated Encryption Scheme",src:r(4998).Z,width:"467",height:"242"})),(0,o.kt)("p",null,"To securely store the symmetric key, the protocol encrypts it with the user's public key. This process ensures that only\nthe user with the corresponding private key can decrypt the symmetric key."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Symmetric Key Decryption",src:r(6299).Z,width:"762",height:"322"})),(0,o.kt)("p",null,"When decrypting a file, the user's private key is used to decrypt the symmetric key. Once the symmetric key is\nretrieved, it can be used to decrypt the file stored on the storage provider, resulting in the original uploaded file."),(0,o.kt)("h2",{id:"file-sharing-and-access"},"File Sharing and Access"),(0,o.kt)("p",null,"To share files with other users, the protocol first decrypts the symmetric key from the chain, then retrieves the\nexternal user's public key from the chain, and encrypts the symmetric key with the external user's public key. By\nappending the newly encrypted symmetric key to the file entry, the external user gains access to the file."),(0,o.kt)("p",null,"By leveraging encryption techniques for both files and file entries, the Jackal Protocol ensures the privacy, security,\nand integrity of user data throughout the storage and sharing processes."))}d.isMDXComponent=!0},5542:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/enc1-a5bf8bd57de61c12dd33f5f71acf6d2b.png"},4998:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/enc2-301650ee7a3ebf09db7d546400ff51e1.png"},6299:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/enc3-cd67943d1c117087b30355af9d5994eb.png"}}]); \ No newline at end of file diff --git a/assets/js/ea96f03c.c8a3eca1.js b/assets/js/ea96f03c.c8a3eca1.js deleted file mode 100644 index 7f0c7aa..0000000 --- a/assets/js/ea96f03c.c8a3eca1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[3298],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>u});var n=r(7294);function o(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 c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var a=n.createContext({}),l=function(e){var t=n.useContext(a),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(a.Provider,{value:t},e.children)},y="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,a=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),y=l(r),h=o,u=y["".concat(a,".").concat(h)]||y[h]||d[h]||i;return r?n.createElement(u,c(c({ref:t},p),{},{components:r})):n.createElement(u,c({ref:t},p))}));function u(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,c=new Array(i);c[0]=h;var s={};for(var a in t)hasOwnProperty.call(t,a)&&(s[a]=t[a]);s.originalType=e,s[y]="string"==typeof e?e:o,c[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const i={sidebar_position:2},c="Encryption in Jackal Protocol",s={unversionedId:"protocol/encryption",id:"protocol/encryption",title:"Encryption in Jackal Protocol",description:"The Jackal Protocol utilizes encryption techniques to ensure the privacy and security of user data. The two primary encryption models within the protocol are file encryption and file-entry encryption. File encryption secures the files themselves, while file-entry encryption focuses on securing the file entries on the blockchain.",source:"@site/docs/protocol/encryption.md",sourceDirName:"protocol",slug:"/protocol/encryption",permalink:"/docs/protocol/encryption",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/protocol/encryption.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"JKL Token",permalink:"/docs/protocol/tokens"},next:{title:"Validators",permalink:"/docs/protocol/validators"}},a={},l=[{value:"File Encryption",id:"file-encryption",level:2},{value:"Integrated Encryption Scheme",id:"integrated-encryption-scheme",level:2},{value:"File Sharing and Access",id:"file-sharing-and-access",level:2}],p={toc:l},y="wrapper";function d(e){let{components:t,...i}=e;return(0,o.kt)(y,(0,n.Z)({},p,i,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"encryption-in-jackal-protocol"},"Encryption in Jackal Protocol"),(0,o.kt)("p",null,"The Jackal Protocol utilizes encryption techniques to ensure the privacy and security of user data. The two primary encryption models within the protocol are file encryption and file-entry encryption. File encryption secures the files themselves, while file-entry encryption focuses on securing the file entries on the blockchain."),(0,o.kt)("h2",{id:"file-encryption"},"File Encryption"),(0,o.kt)("p",null,"File encryption is essential for protecting the data stored on storage providers within the Jackal Protocol. Before transferring files to storage providers, the user's client encrypts the files using a randomly generated symmetric key. The Advanced Encryption Standard (AES-256) is used for this encryption process, resulting in a securely encrypted file."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"File Encryption Process",src:r(5542).Z,width:"482",height:"302"})),(0,o.kt)("p",null,"The symmetric key's secure storage is equally crucial, as exposing it would compromise the file's encryption. The Jackal Chain's File Tree Module serves as a safe and immutable location for storing the encrypted symmetric key alongside the file's location."),(0,o.kt)("h2",{id:"integrated-encryption-scheme"},"Integrated Encryption Scheme"),(0,o.kt)("p",null,"The protocol uses an Integrated Encryption Scheme based on AES and the Elliptic Curve cryptography, which generates Bech32 addresses for secure key storage."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Integrated Encryption Scheme",src:r(4998).Z,width:"467",height:"242"})),(0,o.kt)("p",null,"To securely store the symmetric key, the protocol encrypts it with the user's public key. This process ensures that only the user with the corresponding private key can decrypt the symmetric key."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Symmetric Key Decryption",src:r(6299).Z,width:"762",height:"322"})),(0,o.kt)("p",null,"When decrypting a file, the user's private key is used to decrypt the symmetric key. Once the symmetric key is retrieved, it can be used to decrypt the file stored on the storage provider, resulting in the original uploaded file."),(0,o.kt)("h2",{id:"file-sharing-and-access"},"File Sharing and Access"),(0,o.kt)("p",null,"To share files with other users, the protocol first decrypts the symmetric key from the chain, then retrieves the external user's public key from the chain, and encrypts the symmetric key with the external user's public key. By appending the newly encrypted symmetric key to the file entry, the external user gains access to the file."),(0,o.kt)("p",null,"By leveraging encryption techniques for both files and file entries, the Jackal Protocol ensures the privacy, security, and integrity of user data throughout the storage and sharing processes."))}d.isMDXComponent=!0},5542:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/enc1-a5bf8bd57de61c12dd33f5f71acf6d2b.png"},4998:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/enc2-301650ee7a3ebf09db7d546400ff51e1.png"},6299:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/enc3-cd67943d1c117087b30355af9d5994eb.png"}}]); \ No newline at end of file diff --git a/assets/js/ebbc57e7.eb8f268f.js b/assets/js/ebbc57e7.f8960240.js similarity index 67% rename from assets/js/ebbc57e7.eb8f268f.js rename to assets/js/ebbc57e7.f8960240.js index 6fbee4a..35d114b 100644 --- a/assets/js/ebbc57e7.eb8f268f.js +++ b/assets/js/ebbc57e7.f8960240.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[4808],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>g});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),c=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},p=function(e){var n=c(e.components);return a.createElement(s.Provider,{value:n},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=c(t),m=r,g=d["".concat(s,".").concat(m)]||d[m]||u[m]||o;return t?a.createElement(g,i(i({ref:n},p),{},{components:t})):a.createElement(g,i({ref:n},p))}));function g(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,i=new Array(o);i[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l[d]="string"==typeof e?e:r,i[1]=l;for(var c=2;c{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var a=t(7462),r=(t(7294),t(3905));const o={sidebar_position:1},i="Creating Validator",l={unversionedId:"nodes/validators/joining",id:"nodes/validators/joining",title:"Creating Validator",description:"This guide assumes you are using the same machine as the full node.",source:"@site/docs/nodes/validators/1_joining.md",sourceDirName:"nodes/validators",slug:"/nodes/validators/joining",permalink:"/docs/nodes/validators/joining",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/nodes/validators/1_joining.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Joining Mainnet",permalink:"/docs/nodes/nodes/mainnet"},next:{title:"DIY Build",permalink:"/docs/nodes/providers/hardware/diy-serious copy"}},s={},c=[{value:"Creating A Wallet",id:"creating-a-wallet",level:2},{value:"Setting Up",id:"setting-up",level:2},{value:"Configure Gas Prices",id:"configure-gas-prices",level:3},{value:"Create Your Validator",id:"create-your-validator",level:3}],p={toc:c},d="wrapper";function u(e){let{components:n,...t}=e;return(0,r.kt)(d,(0,a.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"creating-validator"},"Creating Validator"),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"This guide assumes you are using the same machine as the full node."),(0,r.kt)("p",{parentName:"admonition"},"Perform the following steps as your ",(0,r.kt)("inlineCode",{parentName:"p"},"jackal")," user.")),(0,r.kt)("h2",{id:"creating-a-wallet"},"Creating A Wallet"),(0,r.kt)("p",null,"We need to create a wallet and set the keyring password."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"canined keys add WALLET_NAME --keyring-backend os\n")),(0,r.kt)("p",null,"This wallet is used to claim rewards, commission and to vote as your validator."),(0,r.kt)("p",null,"You will see a similar output once created."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'- name: WALLET_NAME\n type: local\n address: jkl1hjhglrzggqtdhsh3ag8jp0cckmva5pe976jxel\n pubkey: \'{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"Rnrlv1TNrt1cz3+pSq2UDNiJQZINNlgtkNousVlkugZ7"}\'\n mnemonic: ""\n\n\n**Important** write this mnemonic phrase in a safe place.\nIt is the only way to recover your account if you ever forget your password.\n\nsome words forming mnemonic seed will be placed here you have to write them down and keep them safe\n')),(0,r.kt)("p",null,"Besure to back up the seed phrase of your validator wallet. It's also recommened to keep an offline copy along with your key files. Remember, your key files cannot be restored and ",(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("em",{parentName:"strong"},"must"))," be backed up. See the installation page for instructions."),(0,r.kt)("p",null,"You should also backup your keyring files."),(0,r.kt)("p",null,"Change ",(0,r.kt)("inlineCode",{parentName:"p"},"WALLET_NAME")," to the name of your wallet."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"mkdir ~/keyring_backup\ncp ~/.canine/WALLET_NAME.info ~/keyring_backup\ncp ~/.canine/keyhash ~/keyring_backup\n")),(0,r.kt)("h2",{id:"setting-up"},"Setting Up"),(0,r.kt)("h3",{id:"configure-gas-prices"},"Configure Gas Prices"),(0,r.kt)("p",null,"As a validator, you'll need to set a minimum gas price like so:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},'GAS="0.02ujkl"\nsed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \\"$GAS\\"/" $HOME/.canine/config/app.toml\n')),(0,r.kt)("h3",{id:"create-your-validator"},"Create Your Validator"),(0,r.kt)("p",null,"Before continuing, please note that ",(0,r.kt)("inlineCode",{parentName:"p"},"commission-max-change")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"commission-max-rate")," cannot be changed once you set them. Your ",(0,r.kt)("inlineCode",{parentName:"p"},"commission-rate")," may be changed once per day."),(0,r.kt)("p",null,"There are a few things you will need to alter in this command. ",(0,r.kt)("inlineCode",{parentName:"p"},"amount")," needs to be changed to what you are starting your self bond as. ",(0,r.kt)("inlineCode",{parentName:"p"},"from")," needs to be the name of your wallet you created earlier. The ",(0,r.kt)("inlineCode",{parentName:"p"},"moniker"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"details"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"identity"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"website"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"security-contact")," should all be filled with the appropiate information."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},'canined tx staking create-validator \\\n --amount 1000000ujkl \\\n --commission-max-change-rate 0.10 \\\n --commission-max-rate 0.2 \\\n --commission-rate 0.1 \\\n --from WALLET_NAME \\\n --min-self-delegation 1 \\\n --moniker "YOUR_MONIKER" \\\n --details="YOUR DETAILS" \\\n --identity "PGP IDENTITY" \\\n --website="https://example.com" \\\n --security-contact="your-email@email.com" \\\n --pubkey $(canined tendermint show-validator) \\\n --chain-id jackal-1 \\\n --gas-prices 0.02ujkl\n')))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[4808],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>g});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),c=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},p=function(e){var n=c(e.components);return a.createElement(s.Provider,{value:n},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=c(t),m=r,g=d["".concat(s,".").concat(m)]||d[m]||u[m]||o;return t?a.createElement(g,i(i({ref:n},p),{},{components:t})):a.createElement(g,i({ref:n},p))}));function g(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,i=new Array(o);i[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l[d]="string"==typeof e?e:r,i[1]=l;for(var c=2;c{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var a=t(7462),r=(t(7294),t(3905));const o={sidebar_position:1},i="Creating Validator",l={unversionedId:"nodes/validators/joining",id:"nodes/validators/joining",title:"Creating Validator",description:"This guide assumes you are using the same machine as the full node.",source:"@site/docs/nodes/validators/1_joining.md",sourceDirName:"nodes/validators",slug:"/nodes/validators/joining",permalink:"/docs/nodes/validators/joining",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/nodes/validators/1_joining.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Joining Mainnet",permalink:"/docs/nodes/nodes/mainnet"},next:{title:"DIY Build",permalink:"/docs/nodes/providers/hardware/diy-serious copy"}},s={},c=[{value:"Creating A Wallet",id:"creating-a-wallet",level:2},{value:"Setting Up",id:"setting-up",level:2},{value:"Configure Gas Prices",id:"configure-gas-prices",level:3},{value:"Create Your Validator",id:"create-your-validator",level:3}],p={toc:c},d="wrapper";function u(e){let{components:n,...t}=e;return(0,r.kt)(d,(0,a.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"creating-validator"},"Creating Validator"),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"This guide assumes you are using the same machine as the full node."),(0,r.kt)("p",{parentName:"admonition"},"Perform the following steps as your ",(0,r.kt)("inlineCode",{parentName:"p"},"jackal")," user.")),(0,r.kt)("h2",{id:"creating-a-wallet"},"Creating A Wallet"),(0,r.kt)("p",null,"We need to create a wallet and set the keyring password."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"canined keys add WALLET_NAME --keyring-backend os\n")),(0,r.kt)("p",null,"This wallet is used to claim rewards, commission and to vote as your validator."),(0,r.kt)("p",null,"You will see a similar output once created."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'- name: WALLET_NAME\n type: local\n address: jkl1hjhglrzggqtdhsh3ag8jp0cckmva5pe976jxel\n pubkey: \'{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"Rnrlv1TNrt1cz3+pSq2UDNiJQZINNlgtkNousVlkugZ7"}\'\n mnemonic: ""\n\n\n**Important** write this mnemonic phrase in a safe place.\nIt is the only way to recover your account if you ever forget your password.\n\nsome words forming mnemonic seed will be placed here you have to write them down and keep them safe\n')),(0,r.kt)("p",null,"Besure to back up the seed phrase of your validator wallet. It's also recommened to keep an offline copy along with your\nkey files. Remember, your key files cannot be restored and ",(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("em",{parentName:"strong"},"must"))," be backed up. See the installation page for\ninstructions."),(0,r.kt)("p",null,"You should also backup your keyring files."),(0,r.kt)("p",null,"Change ",(0,r.kt)("inlineCode",{parentName:"p"},"WALLET_NAME")," to the name of your wallet."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"mkdir ~/keyring_backup\ncp ~/.canine/WALLET_NAME.info ~/keyring_backup\ncp ~/.canine/keyhash ~/keyring_backup\n")),(0,r.kt)("h2",{id:"setting-up"},"Setting Up"),(0,r.kt)("h3",{id:"configure-gas-prices"},"Configure Gas Prices"),(0,r.kt)("p",null,"As a validator, you'll need to set a minimum gas price like so:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},'GAS="0.02ujkl"\nsed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \\"$GAS\\"/" $HOME/.canine/config/app.toml\n')),(0,r.kt)("h3",{id:"create-your-validator"},"Create Your Validator"),(0,r.kt)("p",null,"Before continuing, please note that ",(0,r.kt)("inlineCode",{parentName:"p"},"commission-max-change")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"commission-max-rate")," cannot be changed once you set\nthem. Your ",(0,r.kt)("inlineCode",{parentName:"p"},"commission-rate")," may be changed once per day."),(0,r.kt)("p",null,"There are a few things you will need to alter in this command. ",(0,r.kt)("inlineCode",{parentName:"p"},"amount")," needs to be changed to what you are starting\nyour self bond as. ",(0,r.kt)("inlineCode",{parentName:"p"},"from")," needs to be the name of your wallet you created earlier.\nThe ",(0,r.kt)("inlineCode",{parentName:"p"},"moniker"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"details"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"identity"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"website"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"security-contact")," should all be filled with the appropiate\ninformation."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},'canined tx staking create-validator \\\n --amount 1000000ujkl \\\n --commission-max-change-rate 0.10 \\\n --commission-max-rate 0.2 \\\n --commission-rate 0.1 \\\n --from WALLET_NAME \\\n --min-self-delegation 1 \\\n --moniker "YOUR_MONIKER" \\\n --details="YOUR DETAILS" \\\n --identity "PGP IDENTITY" \\\n --website="https://example.com" \\\n --security-contact="your-email@email.com" \\\n --pubkey $(canined tendermint show-validator) \\\n --chain-id jackal-1 \\\n --gas-prices 0.02ujkl\n')))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ec604ac9.f59d0662.js b/assets/js/ec604ac9.f59d0662.js new file mode 100644 index 0000000..8a5b302 --- /dev/null +++ b/assets/js/ec604ac9.f59d0662.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[9061],{3905:(e,r,t)=>{t.d(r,{Zo:()=>s,kt:()=>b});var n=t(7294);function o(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function a(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function i(e){for(var r=1;r=0||(o[t]=e[t]);return o}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=n.createContext({}),p=function(e){var r=n.useContext(l),t=r;return e&&(t="function"==typeof e?e(r):i(i({},r),e)),t},s=function(e){var r=p(e.components);return n.createElement(l.Provider,{value:r},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},f=n.forwardRef((function(e,r){var t=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),u=p(t),f=o,b=u["".concat(l,".").concat(f)]||u[f]||d[f]||a;return t?n.createElement(b,i(i({ref:r},s),{},{components:t})):n.createElement(b,i({ref:r},s))}));function b(e,r){var t=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var a=t.length,i=new Array(a);i[0]=f;var c={};for(var l in r)hasOwnProperty.call(r,l)&&(c[l]=r[l]);c.originalType=e,c[u]="string"==typeof e?e:o,i[1]=c;for(var p=2;p{t.r(r),t.d(r,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>c,toc:()=>p});var n=t(7462),o=(t(7294),t(3905));const a={sidebar_position:5},i="Jackal.go",c={unversionedId:"developers/dAppLibraries/jackal_go",id:"developers/dAppLibraries/jackal_go",title:"Jackal.go",description:"Quickstart",source:"@site/docs/developers/dAppLibraries/5_jackal_go.md",sourceDirName:"developers/dAppLibraries",slug:"/developers/dAppLibraries/jackal_go",permalink:"/docs/developers/dAppLibraries/jackal_go",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/developers/dAppLibraries/5_jackal_go.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Jackal.nodejs",permalink:"/docs/developers/dAppLibraries/jackal_nodejs"},next:{title:"About Jackal APIs",permalink:"/docs/developers/apis/intro"}},l={},p=[{value:"Quickstart",id:"quickstart",level:2}],s={toc:p},u="wrapper";function d(e){let{components:r,...t}=e;return(0,o.kt)(u,(0,n.Z)({},s,t,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"jackalgo"},"Jackal.go"),(0,o.kt)("h2",{id:"quickstart"},"Quickstart"),(0,o.kt)("p",null,"Coming Soon"))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f1994572.34a7efc9.js b/assets/js/f1994572.34a7efc9.js new file mode 100644 index 0000000..50f5234 --- /dev/null +++ b/assets/js/f1994572.34a7efc9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[2782],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var o=a(7294);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 l(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({}),d=function(e){var t=o.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},c=function(e){var t=d(e.components);return o.createElement(s.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var a=e.components,n=e.mdxType,r=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=d(a),h=n,k=u["".concat(s,".").concat(h)]||u[h]||p[h]||r;return a?o.createElement(k,l(l({ref:t},c),{},{components:a})):o.createElement(k,l({ref:t},c))}));function k(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var r=a.length,l=new Array(r);l[0]=h;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[u]="string"==typeof e?e:n,l[1]=i;for(var d=2;d{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>p,frontMatter:()=>r,metadata:()=>i,toc:()=>d});var o=a(7462),n=(a(7294),a(3905));const r={sidebar_position:3},l="How to Delegate JKL Tokens to a Validator",i={unversionedId:"using-jackal/delegate",id:"using-jackal/delegate",title:"How to Delegate JKL Tokens to a Validator",description:"This guide will help you delegate your JKL tokens to a validator on the Jackal Protocol, which helps secure the network",source:"@site/docs/using-jackal/delegate.md",sourceDirName:"using-jackal",slug:"/using-jackal/delegate",permalink:"/docs/using-jackal/delegate",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/using-jackal/delegate.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Accessing JKL Tokens on Osmosis and Withdrawing to Jackal Protocol",permalink:"/docs/using-jackal/fund"},next:{title:"Jackal Dashboard Guide",permalink:"/docs/using-jackal/dashboard"}},s={},d=[{value:"Step 1: Set up a Keplr Wallet",id:"step-1-set-up-a-keplr-wallet",level:2},{value:"Step 2: Choose a Dashboard",id:"step-2-choose-a-dashboard",level:2},{value:"Step 3: Choose a Validator",id:"step-3-choose-a-validator",level:2},{value:"Step 4: Delegate JKL Tokens",id:"step-4-delegate-jkl-tokens",level:2},{value:"Step 5: Monitor and Manage Your Delegation",id:"step-5-monitor-and-manage-your-delegation",level:2},{value:"Reminder",id:"reminder",level:3},{value:"Slashing by 0.01%",id:"slashing-by-001",level:4},{value:"Slashing by 5%",id:"slashing-by-5",level:4}],c={toc:d},u="wrapper";function p(e){let{components:t,...a}=e;return(0,n.kt)(u,(0,o.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"how-to-delegate-jkl-tokens-to-a-validator"},"How to Delegate JKL Tokens to a Validator"),(0,n.kt)("p",null,"This guide will help you delegate your JKL tokens to a validator on the Jackal Protocol, which helps secure the network\nand earns you staking rewards."),(0,n.kt)("h2",{id:"step-1-set-up-a-keplr-wallet"},"Step 1: Set up a Keplr Wallet"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Install the ",(0,n.kt)("a",{parentName:"li",href:"https://wallet.keplr.app/"},"Keplr Wallet")," browser extension."),(0,n.kt)("li",{parentName:"ol"},"Create a new wallet or import an existing one."),(0,n.kt)("li",{parentName:"ol"},"Make sure you have some JKL tokens in your wallet.")),(0,n.kt)("h2",{id:"step-2-choose-a-dashboard"},"Step 2: Choose a Dashboard"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"https://app.jackalprotocol.com/"},"Jackal Dashboard")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"https://ping.pub/jackal/staking"},"Ping Pub"))),(0,n.kt)("h2",{id:"step-3-choose-a-validator"},"Step 3: Choose a Validator"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Review the list of active validators and their details, such as commission, uptime, and self-delegation."),(0,n.kt)("li",{parentName:"ol"},'Choose a validator that aligns with your preferences and click on "Delegate".')),(0,n.kt)("h2",{id:"step-4-delegate-jkl-tokens"},"Step 4: Delegate JKL Tokens"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Enter the amount of JKL tokens you want to delegate."),(0,n.kt)("li",{parentName:"ol"},'Click "Delegate" and confirm the transaction in your Keplr Wallet.'),(0,n.kt)("li",{parentName:"ol"},'Once the transaction is complete, you will see your delegated JKL tokens and earned rewards in the "Staking" or "\nDelegations" tab on the dashboards.')),(0,n.kt)("h2",{id:"step-5-monitor-and-manage-your-delegation"},"Step 5: Monitor and Manage Your Delegation"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"You can redelegate your JKL tokens to another validator or undelegate (unbond) them if you want to withdraw your\ntokens. Note that there is a 14-day unbonding period during which your tokens are locked and not earning rewards.")),(0,n.kt)("p",null,"Now you have successfully delegated your JKL tokens to a validator on the Jackal Protocol, contributing to the network's\nsecurity and earning staking rewards."),(0,n.kt)("h3",{id:"reminder"},"Reminder"),(0,n.kt)("p",null,"If you possess JKL tokens, you can temporarily lock them away to secure the protocol, this is called staking or\ndelegating. In exchange for securing the network with your tokens, you receive rewards and the ability to vote on the\nProtocol\u2019s future. These rewards come from newly generated JKL tokens and transaction fees."),(0,n.kt)("p",null,"It should be noted that staking or delegating is not risk free, this is why it is important to learn about the risks and\nparticipate in sustainable staking practices."),(0,n.kt)("p",null,"To decrease risk, it\u2019s recommended that you do research on validators and select one you trust as well as delegate to\nmultiple validators."),(0,n.kt)("h4",{id:"slashing-by-001"},"Slashing by 0.01%"),(0,n.kt)("p",null,"Occurs if the validator you delegate to is offline for too long."),(0,n.kt)("h4",{id:"slashing-by-5"},"Slashing by 5%"),(0,n.kt)("p",null,"Occurs if the validator signs two different blocks at the same block height. This is often caused by bad validator\noperation practices or malicious intent by the validator."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f1994572.ad8a18f1.js b/assets/js/f1994572.ad8a18f1.js deleted file mode 100644 index a35f5f1..0000000 --- a/assets/js/f1994572.ad8a18f1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[2782],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var o=a(7294);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 l(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({}),d=function(e){var t=o.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},c=function(e){var t=d(e.components);return o.createElement(s.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var a=e.components,n=e.mdxType,r=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=d(a),h=n,k=u["".concat(s,".").concat(h)]||u[h]||p[h]||r;return a?o.createElement(k,l(l({ref:t},c),{},{components:a})):o.createElement(k,l({ref:t},c))}));function k(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var r=a.length,l=new Array(r);l[0]=h;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[u]="string"==typeof e?e:n,l[1]=i;for(var d=2;d{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>p,frontMatter:()=>r,metadata:()=>i,toc:()=>d});var o=a(7462),n=(a(7294),a(3905));const r={sidebar_position:3},l="How to Delegate JKL Tokens to a Validator",i={unversionedId:"using-jackal/delegate",id:"using-jackal/delegate",title:"How to Delegate JKL Tokens to a Validator",description:"This guide will help you delegate your JKL tokens to a validator on the Jackal Protocol, which helps secure the network and earns you staking rewards.",source:"@site/docs/using-jackal/delegate.md",sourceDirName:"using-jackal",slug:"/using-jackal/delegate",permalink:"/docs/using-jackal/delegate",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/using-jackal/delegate.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Accessing JKL Tokens on Osmosis and Withdrawing to Jackal Protocol",permalink:"/docs/using-jackal/fund"},next:{title:"Jackal Dashboard Guide",permalink:"/docs/using-jackal/dashboard"}},s={},d=[{value:"Step 1: Set up a Keplr Wallet",id:"step-1-set-up-a-keplr-wallet",level:2},{value:"Step 2: Choose a Dashboard",id:"step-2-choose-a-dashboard",level:2},{value:"Step 3: Choose a Validator",id:"step-3-choose-a-validator",level:2},{value:"Step 4: Delegate JKL Tokens",id:"step-4-delegate-jkl-tokens",level:2},{value:"Step 5: Monitor and Manage Your Delegation",id:"step-5-monitor-and-manage-your-delegation",level:2},{value:"Reminder",id:"reminder",level:3},{value:"Slashing by 0.01%",id:"slashing-by-001",level:4},{value:"Slashing by 5%",id:"slashing-by-5",level:4}],c={toc:d},u="wrapper";function p(e){let{components:t,...a}=e;return(0,n.kt)(u,(0,o.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"how-to-delegate-jkl-tokens-to-a-validator"},"How to Delegate JKL Tokens to a Validator"),(0,n.kt)("p",null,"This guide will help you delegate your JKL tokens to a validator on the Jackal Protocol, which helps secure the network and earns you staking rewards."),(0,n.kt)("h2",{id:"step-1-set-up-a-keplr-wallet"},"Step 1: Set up a Keplr Wallet"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Install the ",(0,n.kt)("a",{parentName:"li",href:"https://wallet.keplr.app/"},"Keplr Wallet")," browser extension."),(0,n.kt)("li",{parentName:"ol"},"Create a new wallet or import an existing one."),(0,n.kt)("li",{parentName:"ol"},"Make sure you have some JKL tokens in your wallet.")),(0,n.kt)("h2",{id:"step-2-choose-a-dashboard"},"Step 2: Choose a Dashboard"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"https://app.jackalprotocol.com/"},"Jackal Dashboard")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"https://ping.pub/jackal/staking"},"Ping Pub"))),(0,n.kt)("h2",{id:"step-3-choose-a-validator"},"Step 3: Choose a Validator"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Review the list of active validators and their details, such as commission, uptime, and self-delegation."),(0,n.kt)("li",{parentName:"ol"},'Choose a validator that aligns with your preferences and click on "Delegate".')),(0,n.kt)("h2",{id:"step-4-delegate-jkl-tokens"},"Step 4: Delegate JKL Tokens"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Enter the amount of JKL tokens you want to delegate."),(0,n.kt)("li",{parentName:"ol"},'Click "Delegate" and confirm the transaction in your Keplr Wallet.'),(0,n.kt)("li",{parentName:"ol"},'Once the transaction is complete, you will see your delegated JKL tokens and earned rewards in the "Staking" or "Delegations" tab on the dashboards.')),(0,n.kt)("h2",{id:"step-5-monitor-and-manage-your-delegation"},"Step 5: Monitor and Manage Your Delegation"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"You can redelegate your JKL tokens to another validator or undelegate (unbond) them if you want to withdraw your tokens. Note that there is a 14-day unbonding period during which your tokens are locked and not earning rewards.")),(0,n.kt)("p",null,"Now you have successfully delegated your JKL tokens to a validator on the Jackal Protocol, contributing to the network's security and earning staking rewards."),(0,n.kt)("h3",{id:"reminder"},"Reminder"),(0,n.kt)("p",null,"If you possess JKL tokens, you can temporarily lock them away to secure the protocol, this is called staking or delegating. In exchange for securing the network with your tokens, you receive rewards and the ability to vote on the Protocol\u2019s future. These rewards come from newly generated JKL tokens and transaction fees."),(0,n.kt)("p",null,"It should be noted that staking or delegating is not risk free, this is why it is important to learn about the risks and participate in sustainable staking practices."),(0,n.kt)("p",null,"To decrease risk, it\u2019s recommended that you do research on validators and select one you trust as well as delegate to multiple validators."),(0,n.kt)("h4",{id:"slashing-by-001"},"Slashing by 0.01%"),(0,n.kt)("p",null,"Occurs if the validator you delegate to is offline for too long."),(0,n.kt)("h4",{id:"slashing-by-5"},"Slashing by 5%"),(0,n.kt)("p",null,"Occurs if the validator signs two different blocks at the same block height. This is often caused by bad validator operation practices or malicious intent by the validator."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f3769d49.76bc0d96.js b/assets/js/f3769d49.76bc0d96.js deleted file mode 100644 index 9b211fe..0000000 --- a/assets/js/f3769d49.76bc0d96.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[2891],{3905:(e,t,a)=>{a.d(t,{Zo:()=>s,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=n.createContext({}),c=function(e){var t=n.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},s=function(e){var t=c(e.components);return n.createElement(p.Provider,{value:t},e.children)},u="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),u=c(a),m=r,k=u["".concat(p,".").concat(m)]||u[m]||h[m]||o;return a?n.createElement(k,l(l({ref:t},s),{},{components:a})):n.createElement(k,l({ref:t},s))}));function k(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,l=new Array(o);l[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[u]="string"==typeof e?e:r,l[1]=i;for(var c=2;c{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var n=a(7462),r=(a(7294),a(3905));const o={sidebar_position:2},l="Keplr Wallet",i={unversionedId:"using-jackal/wallet/keplr",id:"using-jackal/wallet/keplr",title:"Keplr Wallet",description:"The Keplr browser extension is a wallet for accessing some Jackal applications in the Cosmos ecosystem. Keplr can be used to exchange/manage JKL and other Cosmos-based tokens, participate in governance from the Jackal Dashboard, and use Jackal Storage.",source:"@site/docs/using-jackal/wallet/keplr.md",sourceDirName:"using-jackal/wallet",slug:"/using-jackal/wallet/keplr",permalink:"/docs/using-jackal/wallet/keplr",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/using-jackal/wallet/keplr.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Why Choose Jackal Protocol",permalink:"/docs/overview/why-jackal"},next:{title:"Accessing JKL Tokens on Osmosis and Withdrawing to Jackal Protocol",permalink:"/docs/using-jackal/fund"}},p={},c=[{value:"Set up Keplr",id:"set-up-keplr",level:2},{value:"Create a new account",id:"create-a-new-account",level:2},{value:"Create an account with a Seed Phrase",id:"create-an-account-with-a-seed-phrase",level:3},{value:"Import an existing account",id:"import-an-existing-account",level:3},{value:"Connecting Keplr to the Jackal Protocol",id:"connecting-keplr-to-the-jackal-protocol",level:2}],s={toc:c},u="wrapper";function h(e){let{components:t,...a}=e;return(0,r.kt)(u,(0,n.Z)({},s,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"keplr-wallet"},"Keplr Wallet"),(0,r.kt)("p",null,"The Keplr browser extension is a wallet for accessing some Jackal applications in the ",(0,r.kt)("a",{parentName:"p",href:"https://cosmos.network/"},"Cosmos ecosystem"),". Keplr can be used to exchange/manage JKL and other Cosmos-based tokens, participate in governance from the ",(0,r.kt)("a",{parentName:"p",href:"/docs/using-jackal/dashboard"},"Jackal Dashboard"),", and use Jackal Storage. "),(0,r.kt)("h2",{id:"set-up-keplr"},"Set up Keplr"),(0,r.kt)("p",null,"More information about setting up a Keplr wallet can be found in the official ",(0,r.kt)("a",{parentName:"p",href:"https://docs.keplr.app/"},"Keplr Documentation"),"."),(0,r.kt)("p",null,"Open the Keplr extension on your browser. If you are setting up Keplr for the first time, you can either ",(0,r.kt)("strong",{parentName:"p"},"create a new account")," or ",(0,r.kt)("strong",{parentName:"p"},"import an existing account"),"."),(0,r.kt)("h2",{id:"create-a-new-account"},"Create a new account"),(0,r.kt)("p",null,"There are two ways to create a new Keplr account:"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Most Secure")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Mnemonic/seed phrase.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Easiest")," "),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"One-click login. ")),(0,r.kt)("h3",{id:"create-an-account-with-a-seed-phrase"},"Create an account with a Seed Phrase"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"In the initial pop-up window, choose Create New Account"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"If you have used Keplr before, click on the silhouette in the upper-right corner, then the blue box labeled ",(0,r.kt)("strong",{parentName:"li"},"Add Account"),", and select ",(0,r.kt)("strong",{parentName:"li"},"Create New Account"),"."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Choose to have a seed/mnemonic phrase of 24 words, and save the phrase."),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"You can change the derivation path by clicking on Advanced, but this is optional ",(0,r.kt)("a",{parentName:"li",href:"https://faq.keplr.app/"},"learn more in the Keplr FAQ")))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Enter a name for your account. This can be changed later.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Once you have transcribed your 24 word seed/mnemonic phrase, click on ",(0,r.kt)("strong",{parentName:"p"},"Next"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"To confirm the creation of the new account, click on the words on the right order in which they appear in your seed/mnemonic phrase, and press ",(0,r.kt)("strong",{parentName:"p"},"Register"),".")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"If you have not used Keplr before, set a password for the Keplr extension, and click ",(0,r.kt)("strong",{parentName:"p"},"Confirm"),"."))),(0,r.kt)("h3",{id:"import-an-existing-account"},"Import an existing account"),(0,r.kt)("p",null," There are several ways to import an existing account:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"via a ",(0,r.kt)("strong",{parentName:"li"},"mnemonic/seed phrase/private key"),"."),(0,r.kt)("li",{parentName:"ul"},"via ",(0,r.kt)("strong",{parentName:"li"},"ledger"),".")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Import with a Seed Phrase")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"In the initial pop-up window, choose Import Existing Account\nIf you have used Keplr before, click on the silhouette in the upper-right corner, then the blue box labeled ",(0,r.kt)("strong",{parentName:"p"},"Add Account"),", and select ",(0,r.kt)("strong",{parentName:"p"},"Import Existing Account"),".")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Enter your mnemonic/seed phrase/private key in the appropriate slot, seperating the words with spaces and make sure to check they are spelled correctly.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Make sure you have imported the account with the correct derivation path, viewable by clicking on ",(0,r.kt)("strong",{parentName:"p"},"Advanced"),"."),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Normally, the derivation path should be m/44'/\u2026\u2019/0/0/0, but if you see that importing the account via mnemonic on Keplr, the Cosmos Mainnet address displayed is different than yours, it is possible the derivation path ends with 1 (or another number) instead of 0.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"If this is the case, you just have to start the process over, and replace the last 0 with 1")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Learn more in the ",(0,r.kt)("a",{parentName:"p",href:"https://faq.keplr.app/"},"Keplr FAQ"))))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"If you have not used Keplr before, set a password for the Keplr extension, and click ",(0,r.kt)("strong",{parentName:"p"},"Confirm"),"."))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Import with Ledger")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"In the initial pop-up window, choose Import Ledger."),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"If you have used Keplr before, click on the silhouette in the upper-right corner, then the blue box labeled ",(0,r.kt)("strong",{parentName:"li"},"Add Account"),", and select ",(0,r.kt)("strong",{parentName:"li"},"Import Ledger"),"."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"To complete the connection with your Ledger Nano Hard Wallet, follow the steps described in the pop-up that appears. A detailed tutorial can be found ",(0,r.kt)("a",{parentName:"p",href:"https://medium.com/chainapsis/how-to-use-ledger-nano-hardware-wallet-with-keplr-9ea7f07826c2"},"here"),". ")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"If you have not used Keplr before, set a password for the Keplr extension, and click ",(0,r.kt)("strong",{parentName:"p"},"Confirm"),"."))),(0,r.kt)("h2",{id:"connecting-keplr-to-the-jackal-protocol"},"Connecting Keplr to the Jackal Protocol"),(0,r.kt)("p",null,"Once you are signed in to the Keplr extension, you can connect the wallet with the Jackal Protocol. Once on the ",(0,r.kt)("strong",{parentName:"p"},"Jackal Dashboard")," you will be prompted to connect your Keplr wallet."))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f3769d49.b9120004.js b/assets/js/f3769d49.b9120004.js new file mode 100644 index 0000000..43a1618 --- /dev/null +++ b/assets/js/f3769d49.b9120004.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[2891],{3905:(e,t,a)=>{a.d(t,{Zo:()=>s,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=n.createContext({}),c=function(e){var t=n.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},s=function(e){var t=c(e.components);return n.createElement(p.Provider,{value:t},e.children)},u="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),u=c(a),m=r,k=u["".concat(p,".").concat(m)]||u[m]||h[m]||o;return a?n.createElement(k,l(l({ref:t},s),{},{components:a})):n.createElement(k,l({ref:t},s))}));function k(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,l=new Array(o);l[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[u]="string"==typeof e?e:r,l[1]=i;for(var c=2;c{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var n=a(7462),r=(a(7294),a(3905));const o={sidebar_position:2},l="Keplr Wallet",i={unversionedId:"using-jackal/wallet/keplr",id:"using-jackal/wallet/keplr",title:"Keplr Wallet",description:"The Keplr browser extension is a wallet for accessing some Jackal applications in",source:"@site/docs/using-jackal/wallet/keplr.md",sourceDirName:"using-jackal/wallet",slug:"/using-jackal/wallet/keplr",permalink:"/docs/using-jackal/wallet/keplr",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/using-jackal/wallet/keplr.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Why Choose Jackal Protocol",permalink:"/docs/overview/why-jackal"},next:{title:"Accessing JKL Tokens on Osmosis and Withdrawing to Jackal Protocol",permalink:"/docs/using-jackal/fund"}},p={},c=[{value:"Set up Keplr",id:"set-up-keplr",level:2},{value:"Create a new account",id:"create-a-new-account",level:2},{value:"Create an account with a Seed Phrase",id:"create-an-account-with-a-seed-phrase",level:3},{value:"Import an existing account",id:"import-an-existing-account",level:3},{value:"Connecting Keplr to the Jackal Protocol",id:"connecting-keplr-to-the-jackal-protocol",level:2}],s={toc:c},u="wrapper";function h(e){let{components:t,...a}=e;return(0,r.kt)(u,(0,n.Z)({},s,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"keplr-wallet"},"Keplr Wallet"),(0,r.kt)("p",null,"The Keplr browser extension is a wallet for accessing some Jackal applications in\nthe ",(0,r.kt)("a",{parentName:"p",href:"https://cosmos.network/"},"Cosmos ecosystem"),". Keplr can be used to exchange/manage JKL and other Cosmos-based tokens,\nparticipate in governance from the ",(0,r.kt)("a",{parentName:"p",href:"/docs/using-jackal/dashboard"},"Jackal Dashboard"),", and use Jackal Storage."),(0,r.kt)("h2",{id:"set-up-keplr"},"Set up Keplr"),(0,r.kt)("p",null,"More information about setting up a Keplr wallet can be found in the\nofficial ",(0,r.kt)("a",{parentName:"p",href:"https://docs.keplr.app/"},"Keplr Documentation"),"."),(0,r.kt)("p",null,"Open the Keplr extension on your browser. If you are setting up Keplr for the first time, you can either ",(0,r.kt)("strong",{parentName:"p"},"create a new\naccount")," or ",(0,r.kt)("strong",{parentName:"p"},"import an existing account"),"."),(0,r.kt)("h2",{id:"create-a-new-account"},"Create a new account"),(0,r.kt)("p",null,"There are two ways to create a new Keplr account:"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Most Secure")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Mnemonic/seed phrase.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Easiest")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"One-click login.")),(0,r.kt)("h3",{id:"create-an-account-with-a-seed-phrase"},"Create an account with a Seed Phrase"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"In the initial pop-up window, choose Create New Account"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"If you have used Keplr before, click on the silhouette in the upper-right corner, then the blue box labeled ",(0,r.kt)("strong",{parentName:"li"},"Add\nAccount"),", and select ",(0,r.kt)("strong",{parentName:"li"},"Create New Account"),"."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Choose to have a seed/mnemonic phrase of 24 words, and save the phrase."),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"You can change the derivation path by clicking on Advanced, but this is\noptional ",(0,r.kt)("a",{parentName:"li",href:"https://faq.keplr.app/"},"learn more in the Keplr FAQ")))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Enter a name for your account. This can be changed later.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Once you have transcribed your 24 word seed/mnemonic phrase, click on ",(0,r.kt)("strong",{parentName:"p"},"Next"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"To confirm the creation of the new account, click on the words on the right order in which they appear in your\nseed/mnemonic phrase, and press ",(0,r.kt)("strong",{parentName:"p"},"Register"),".")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"If you have not used Keplr before, set a password for the Keplr extension, and click ",(0,r.kt)("strong",{parentName:"p"},"Confirm"),"."))),(0,r.kt)("h3",{id:"import-an-existing-account"},"Import an existing account"),(0,r.kt)("p",null,"There are several ways to import an existing account:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"via a ",(0,r.kt)("strong",{parentName:"li"},"mnemonic/seed phrase/private key"),"."),(0,r.kt)("li",{parentName:"ul"},"via ",(0,r.kt)("strong",{parentName:"li"},"ledger"),".")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Import with a Seed Phrase")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"In the initial pop-up window, choose Import Existing Account\nIf you have used Keplr before, click on the silhouette in the upper-right corner, then the blue box labeled ",(0,r.kt)("strong",{parentName:"p"},"Add\nAccount"),", and select ",(0,r.kt)("strong",{parentName:"p"},"Import Existing Account"),".")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Enter your mnemonic/seed phrase/private key in the appropriate slot, seperating the words with spaces and make sure\nto check they are spelled correctly.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Make sure you have imported the account with the correct derivation path, viewable by clicking on ",(0,r.kt)("strong",{parentName:"p"},"Advanced"),"."),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Normally, the derivation path should be m/44'/\u2026\u2019/0/0/0, but if you see that importing the account via mnemonic on\nKeplr, the Cosmos Mainnet address displayed is different than yours, it is possible the derivation path ends with\n1 (or another number) instead of 0.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"If this is the case, you just have to start the process over, and replace the last 0 with 1")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Learn more in the ",(0,r.kt)("a",{parentName:"p",href:"https://faq.keplr.app/"},"Keplr FAQ"))))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"If you have not used Keplr before, set a password for the Keplr extension, and click ",(0,r.kt)("strong",{parentName:"p"},"Confirm"),"."))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Import with Ledger")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"In the initial pop-up window, choose Import Ledger."),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"If you have used Keplr before, click on the silhouette in the upper-right corner, then the blue box labeled ",(0,r.kt)("strong",{parentName:"li"},"Add\nAccount"),", and select ",(0,r.kt)("strong",{parentName:"li"},"Import Ledger"),"."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"To complete the connection with your Ledger Nano Hard Wallet, follow the steps described in the pop-up that appears.\nA detailed tutorial can be\nfound ",(0,r.kt)("a",{parentName:"p",href:"https://medium.com/chainapsis/how-to-use-ledger-nano-hardware-wallet-with-keplr-9ea7f07826c2"},"here"),".")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"If you have not used Keplr before, set a password for the Keplr extension, and click ",(0,r.kt)("strong",{parentName:"p"},"Confirm"),"."))),(0,r.kt)("h2",{id:"connecting-keplr-to-the-jackal-protocol"},"Connecting Keplr to the Jackal Protocol"),(0,r.kt)("p",null,"Once you are signed in to the Keplr extension, you can connect the wallet with the Jackal Protocol. Once on the ",(0,r.kt)("strong",{parentName:"p"},"Jackal\nDashboard")," you will be prompted to connect your Keplr wallet."))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fd23986e.6b726842.js b/assets/js/fd23986e.6b726842.js new file mode 100644 index 0000000..1a594d4 --- /dev/null +++ b/assets/js/fd23986e.6b726842.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[2127],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>f});var n=a(7294);function l(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t=0||(l[a]=e[a]);return l}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(l[a]=e[a])}return l}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={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,l=e.mdxType,o=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),p=c(a),m=l,f=p["".concat(s,".").concat(m)]||p[m]||u[m]||o;return a?n.createElement(f,r(r({ref:t},d),{},{components:a})):n.createElement(f,r({ref:t},d))}));function f(e,t){var a=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var o=a.length,r=new Array(o);r[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:l,r[1]=i;for(var c=2;c{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var n=a(7462),l=(a(7294),a(3905));const o={sidebar_position:4},r="Jackal.nodejs",i={unversionedId:"developers/dAppLibraries/jackal_nodejs",id:"developers/dAppLibraries/jackal_nodejs",title:"Jackal.nodejs",description:"Quickstart",source:"@site/docs/developers/dAppLibraries/4_jackal_nodejs.md",sourceDirName:"developers/dAppLibraries",slug:"/developers/dAppLibraries/jackal_nodejs",permalink:"/docs/developers/dAppLibraries/jackal_nodejs",draft:!1,editUrl:"https://github.com/JackalLabs/canine-docs/blob/master/docs/developers/dAppLibraries/4_jackal_nodejs.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"Jackal.js",permalink:"/docs/developers/dAppLibraries/jackal_js"},next:{title:"Jackal.go",permalink:"/docs/developers/dAppLibraries/jackal_go"}},s={},c=[{value:"Quickstart",id:"quickstart",level:2},{value:"Demo",id:"demo",level:3},{value:"Pre-requesites",id:"pre-requesites",level:3},{value:"Setting Up",id:"setting-up",level:3},{value:"Wallet Instantiation",id:"wallet-instantiation",level:4},{value:"Buying Storage Space",id:"buying-storage-space",level:3},{value:"Creating a Root Folder",id:"creating-a-root-folder",level:3},{value:"Creating a Child Folder",id:"creating-a-child-folder",level:3},{value:"Uploading a File",id:"uploading-a-file",level:3},{value:"Downloading a File",id:"downloading-a-file",level:3}],d={toc:c},p="wrapper";function u(e){let{components:t,...a}=e;return(0,l.kt)(p,(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"jackalnodejs"},"Jackal.nodejs"),(0,l.kt)("h2",{id:"quickstart"},"Quickstart"),(0,l.kt)("h3",{id:"demo"},"Demo"),(0,l.kt)("p",null,"A working demo repo can be found ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/JackalLabs/pup-demo"},"on GitHub"),"."),(0,l.kt)("h3",{id:"pre-requesites"},"Pre-requesites"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Nodejs v20+"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://www.npmjs.com/package/@jackallabs/jackal.nodejs"},"Jackal.nodejs")),(0,l.kt)("li",{parentName:"ul"},"Wallet Mnemonic")),(0,l.kt)("h3",{id:"setting-up"},"Setting Up"),(0,l.kt)("p",null,"Install dependencies:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"npm install @jackallabs/jackal.nodejs\nnpm install -D @types/node typescript tscpaths\n")),(0,l.kt)("p",null,"Jackal.js requires Node v20+. The easiest way to manage this is\nwith ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/nvm-sh/nvm#installing-and-updating"},"NVM"),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"nvm use 20\n")),(0,l.kt)("h4",{id:"wallet-instantiation"},"Wallet Instantiation"),(0,l.kt)("p",null,"Jackal.nodejs does not use a traditional wallet like Jackal.js. Instead, ",(0,l.kt)("inlineCode",{parentName:"p"},"MnemonicWallet.create(mnemonic)")," is used for\nwallet instantiation."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const appConfig = {\n signerChain: 'lupulella-2',\n queryAddr: 'https://testnet-grpc.jackalprotocol.com',\n txAddr: 'https://testnet-rpc.jackalprotocol.com'\n}\n\nconst m = await MnemonicWallet.create(mnemonic)\n\n// Hooking up the wallet to your app\nconst w = await WalletHandler.trackWallet(appConfig, m)\n")),(0,l.kt)("p",null,"Additionally, a query-only mode for the wallet can get accessed via the following:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const wallet = await WalletHandler.trackQueryWallet('https://testnet-grpc.jackalprotocol.com') // Use the gRPC-web address of your choice\n")),(0,l.kt)("h3",{id:"buying-storage-space"},"Buying Storage Space"),(0,l.kt)("p",null,"Every account that wishes to use the Jackal Protocol to store data needs to have a paid storage account.\nThis means giving the protocol $8 USD per month per tb. We can do this with Jackal.js!"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const storage = await StorageHandler.trackStorage(wallet)\n\n// (Wallet address)\n// duration in months (min 1)\n// space in terabytes (min .001)\n// 2 TB for 1 year:\nawait storage.buyStorage(WALLET_ADDRESS, 12, 2)\n")),(0,l.kt)("h3",{id:"creating-a-root-folder"},"Creating a Root Folder"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const minimumProviderVersion = '1.0.9'\nconst fileIo = await FileIo.trackIo(wallet, minimumProviderVersion)\n\nconst listOfRootFolders = [\"Home\", ...]\n// you can create as many root folders as you would like this way. Home is the Jackal Dashboard default root directory.\n// The first time a user connects, they must init the system\nconst storage = await StorageHandler.trackStorage(wallet)\nconst msg = storage.makeStorageInitMsg()\nawait fileIo.generateInitialDirs(msg, listOfRootFolders)\n\n// after the first time, this code can be used instead. this will only create new root folders if they don't already exist\nconst newFolderCount = await fileIo.verifyFoldersExist(listOfRootFolders)\n")),(0,l.kt)("h3",{id:"creating-a-child-folder"},"Creating a Child Folder"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},'const fileIo = await FileIo.trackIo(wallet)\nconst parentFolderPath = PARENT_FOLDER_NAME_AND_PATH // for example Dashboard\'s root folder path is s/Home\nconst parent = await fileIo.downloadFolder(parentFolderPath)\nconst listOfChildFolders = ["Movies", "Pictures", ...]\nawait fileIo.createFolders(parent, listOfChildFolders)\n')),(0,l.kt)("h3",{id:"uploading-a-file"},"Uploading a File"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const fileIo = await FileIo.trackIo(wallet)\n\nconst parentFolderPath = PARENT_FOLDER_NAME_AND_PATH // for example Dashboard's root folder path is s/Home\nconst parent = await fileIo.downloadFolder(parentFolderPath)\n\nconst file = FILE_OBJECT // this MUST be an instance of File() that is in the browser memory\nconst fileName = file.name\nconst handler = await FileUploadHandler.trackFile(file, parentFolderPath)\n\nconst uploadList = {}\nuploadList[fileName] = {\n data: null,\n exists: false,\n handler: handler,\n key: fileName,\n uploadable: await handler.getForUpload()\n}\n\nawait fileIo.staggeredUploadFiles(uploadList, parent, {counter: 0, complete: 0})\n")),(0,l.kt)("h3",{id:"downloading-a-file"},"Downloading a File"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},"const fileIo = await FileIo.trackIo(wallet)\n\n/* optional */\nconst parentFolderPath = PARENT_FOLDER_NAME_AND_PATH // for example Dashboard's root folder path is s/Home\nconst parent = await fileIo.downloadFolder(parentFolderPath)\nconst childrenFiles = parent.getChildFiles()\nconst pathOfFirstChild = parent.getMyChildPath(childrenFiles[0].name)\n/* end optional */\n\nconst downloadDetails = {\n rawPath: FILE_PATH, // manual complete file path OR pathOfFirstChild\n owner: OWNER_ADDRESS, // JKL address of file owner\n isFolder: false\n}\n\nconst fileHanlder = await fileIo.downloadFile(downloadDetails, { track: 0 })\n\nconst file = fileHanlder.receiveBacon()\n// do what you want with the File object returned by receiveBacon\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/main.a2c4ba8b.js b/assets/js/main.a2c4ba8b.js new file mode 100644 index 0000000..deddcb6 --- /dev/null +++ b/assets/js/main.a2c4ba8b.js @@ -0,0 +1,2 @@ +/*! For license information please see main.a2c4ba8b.js.LICENSE.txt */ +(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),a=n(7462),o=n(8356),i=n.n(o),l=n(6887);const s={"03cdf430":[()=>n.e(229).then(n.bind(n,2530)),"@site/docs/ecosystem/partnerships.md",2530],"041d8db4":[()=>n.e(6487).then(n.bind(n,7158)),"@site/docs/developers/apis/2_apis.md",7158],"0558eea0":[()=>n.e(9042).then(n.bind(n,7815)),"@site/docs/ecosystem/grants-funding.md",7815],"0e384e19":[()=>n.e(9671).then(n.bind(n,9881)),"@site/docs/intro.md",9881],15018644:[()=>n.e(1385).then(n.t.bind(n,3769,19)),"/home/runner/work/canine-docs/canine-docs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],17896441:[()=>Promise.all([n.e(532),n.e(9455),n.e(7918)]).then(n.bind(n,903)),"@theme/DocItem",903],"18a433c4":[()=>n.e(1210).then(n.bind(n,8437)),"@site/docs/official-links/jackal-foundation.md",8437],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,9963)),"@theme/DocPage",9963],"1f391b9e":[()=>Promise.all([n.e(532),n.e(9455),n.e(3085)]).then(n.bind(n,4247)),"@theme/MDXPage",4247],"23f3f2f9":[()=>n.e(6174).then(n.bind(n,2957)),"@site/docs/contributors/foundation.md",2957],"24536a89":[()=>n.e(8206).then(n.bind(n,4457)),"@site/docs/developers/apis/1_intro.md",4457],"24b4006e":[()=>n.e(63).then(n.bind(n,6960)),"@site/docs/developers/dAppLibraries/2_jackal_protos.md",6960],"259b7029":[()=>n.e(7026).then(n.bind(n,9583)),"@site/docs/nodes/providers/1_building.md",9583],"29af3fe3":[()=>n.e(92).then(n.bind(n,8348)),"@site/docs/nodes/nodes/2_installation.md",8348],"344debb6":[()=>n.e(54).then(n.bind(n,120)),"@site/docs/protocol/modules/lp.md",120],"365ebb01":[()=>n.e(9293).then(n.bind(n,3641)),"@site/docs/protocol/validators.md",3641],"393be207":[()=>n.e(7414).then(n.bind(n,3123)),"@site/src/pages/markdown-page.md",3123],"3d14bff3":[()=>n.e(737).then(n.bind(n,3097)),"@site/docs/developers/intro.md",3097],"3e125dc6":[()=>n.e(1148).then(n.bind(n,8682)),"@site/docs/overview/why-jackal.md",8682],"5402824b":[()=>n.e(1078).then(n.bind(n,5149)),"@site/docs/official-links/jackal-labs.md",5149],"5a6f97fe":[()=>n.e(5275).then(n.bind(n,4731)),"@site/docs/using-jackal/dashboard.md",4731],"5da52a1e":[()=>n.e(8938).then(n.bind(n,4544)),"@site/docs/nodes/nodes/1_hardware.md",4544],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"65b97a36":[()=>n.e(1770).then(n.bind(n,124)),"@site/docs/overview/jackal-tldr.md",124],"7b9432de":[()=>n.e(7275).then(n.bind(n,1431)),"@site/docs/protocol/modules/wasm.md",1431],"7d26c06c":[()=>n.e(1232).then(n.bind(n,1392)),"@site/docs/protocol/tokens.md",1392],"7f9142bb":[()=>n.e(1314).then(n.bind(n,1609)),"@site/docs/nodes/providers/hardware/enterprise.md",1609],"874276e5":[()=>n.e(5533).then(n.bind(n,2757)),"@site/docs/protocol/modules/storage.md",2757],"8a56e0ba":[()=>n.e(8957).then(n.bind(n,7109)),"@site/docs/protocol/modules/filetree.md",7109],"8b564e48":[()=>n.e(5689).then(n.bind(n,2121)),"@site/docs/protocol/p-o-p.md",2121],"9093546b":[()=>n.e(6164).then(n.bind(n,8410)),"@site/docs/protocol/modules/module-overview.md",8410],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"9c403616":[()=>n.e(1817).then(n.bind(n,4252)),"@site/docs/protocol/modules/jklmint.md",4252],a4043c8d:[()=>n.e(6683).then(n.bind(n,2843)),"@site/docs/nodes/1_install.md",2843],ab3acb2a:[()=>n.e(604).then(n.bind(n,4589)),"@site/docs/contributors/labs.md",4589],b0580eac:[()=>n.e(7053).then(n.bind(n,5621)),"@site/docs/protocol/modules/dsig.md",5621],b1fc7db6:[()=>n.e(8425).then(n.bind(n,8602)),"@site/docs/using-jackal/fund.md",8602],b46b7d8b:[()=>n.e(1172).then(n.bind(n,7497)),"@site/docs/overview/jkl.md",7497],b92c85d1:[()=>n.e(6216).then(n.bind(n,2472)),"@site/docs/nodes/providers/hardware/diy-serious copy.md",2472],bbf127f0:[()=>n.e(5863).then(n.bind(n,1643)),"@site/docs/nodes/providers/2_setting_up.md",1643],c4f5d8e4:[()=>Promise.all([n.e(532),n.e(4195)]).then(n.bind(n,2216)),"@site/src/pages/index.js",2216],c894e2df:[()=>n.e(4878).then(n.bind(n,6524)),"@site/docs/contributors/join.md",6524],c97fbebf:[()=>n.e(4286).then(n.bind(n,3764)),"@site/docs/nodes/nodes/4_mainnet.md",3764],d07072fe:[()=>n.e(9404).then(n.bind(n,592)),"@site/docs/official-links/jackal-protocol.md",592],d1f710bd:[()=>n.e(5798).then(n.t.bind(n,5745,19)),"/home/runner/work/canine-docs/canine-docs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],d866114a:[()=>n.e(2855).then(n.bind(n,5951)),"@site/docs/developers/dAppLibraries/3_jackal_js.md",5951],dda406b3:[()=>n.e(316).then(n.bind(n,1159)),"@site/docs/developers/dAppLibraries/1_intro.md",1159],e1923b53:[()=>n.e(1947).then(n.bind(n,78)),"@site/docs/nodes/nodes/3_testnet.md",78],e289ecfd:[()=>n.e(3523).then(n.bind(n,4824)),"@site/docs/protocol/modules/rns.md",4824],ea96f03c:[()=>n.e(3298).then(n.bind(n,5639)),"@site/docs/protocol/encryption.md",5639],ebbc57e7:[()=>n.e(4808).then(n.bind(n,5183)),"@site/docs/nodes/validators/1_joining.md",5183],ec604ac9:[()=>n.e(9061).then(n.bind(n,9809)),"@site/docs/developers/dAppLibraries/5_jackal_go.md",9809],f1994572:[()=>n.e(2782).then(n.bind(n,1422)),"@site/docs/using-jackal/delegate.md",1422],f3769d49:[()=>n.e(2891).then(n.bind(n,9186)),"@site/docs/using-jackal/wallet/keplr.md",9186],fd23986e:[()=>n.e(2127).then(n.bind(n,9526)),"@site/docs/developers/dAppLibraries/4_jackal_nodejs.md",9526]};function u(e){let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(9670),d=n(226);function p(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(4972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const o=l[`${e}-${t}`],p={},f=[],m=[],h=(0,c.Z)(o);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=s[n];r&&(p[t]=r[0],f.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:p,modules:f,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let o=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{o=o[e]})),o[l[l.length-1]]=a}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,a.Z)({},i,n)))}})}const f=[{path:"/markdown-page",component:p("/markdown-page","d2a"),exact:!0},{path:"/docs",component:p("/docs","674"),routes:[{path:"/docs/contributors/foundation",component:p("/docs/contributors/foundation","569"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/contributors/join",component:p("/docs/contributors/join","5af"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/contributors/labs",component:p("/docs/contributors/labs","38f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/developers/apis/apis",component:p("/docs/developers/apis/apis","df2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/developers/apis/intro",component:p("/docs/developers/apis/intro","4cf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/developers/dAppLibraries/intro",component:p("/docs/developers/dAppLibraries/intro","b54"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/developers/dAppLibraries/jackal_go",component:p("/docs/developers/dAppLibraries/jackal_go","bb9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/developers/dAppLibraries/jackal_js",component:p("/docs/developers/dAppLibraries/jackal_js","a6f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/developers/dAppLibraries/jackal_nodejs",component:p("/docs/developers/dAppLibraries/jackal_nodejs","fa7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/developers/dAppLibraries/jackal_protos",component:p("/docs/developers/dAppLibraries/jackal_protos","1fd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/developers/intro",component:p("/docs/developers/intro","f46"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/ecosystem/grants-funding",component:p("/docs/ecosystem/grants-funding","b80"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/ecosystem/partnerships",component:p("/docs/ecosystem/partnerships","5b7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro",component:p("/docs/intro","aed"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/nodes/install",component:p("/docs/nodes/install","ba4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/nodes/nodes/hardware",component:p("/docs/nodes/nodes/hardware","d4f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/nodes/nodes/installation",component:p("/docs/nodes/nodes/installation","609"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/nodes/nodes/mainnet",component:p("/docs/nodes/nodes/mainnet","4c6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/nodes/nodes/testnet",component:p("/docs/nodes/nodes/testnet","d25"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/nodes/providers/building",component:p("/docs/nodes/providers/building","239"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/nodes/providers/hardware/diy-serious copy",component:p("/docs/nodes/providers/hardware/diy-serious copy","3fd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/nodes/providers/hardware/enterprise",component:p("/docs/nodes/providers/hardware/enterprise","85f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/nodes/providers/setting_up",component:p("/docs/nodes/providers/setting_up","baa"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/nodes/validators/joining",component:p("/docs/nodes/validators/joining","92f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/official-links/jackal-foundation",component:p("/docs/official-links/jackal-foundation","7fe"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/official-links/jackal-labs",component:p("/docs/official-links/jackal-labs","fbd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/official-links/jackal-protocol",component:p("/docs/official-links/jackal-protocol","bae"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/overview/jackal-tldr",component:p("/docs/overview/jackal-tldr","498"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/overview/jkl",component:p("/docs/overview/jkl","e3b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/overview/why-jackal",component:p("/docs/overview/why-jackal","01e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/protocol/encryption",component:p("/docs/protocol/encryption","538"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/protocol/modules/dsig",component:p("/docs/protocol/modules/dsig","7f0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/protocol/modules/filetree",component:p("/docs/protocol/modules/filetree","b70"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/protocol/modules/jklmint",component:p("/docs/protocol/modules/jklmint","eb0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/protocol/modules/lp",component:p("/docs/protocol/modules/lp","2f2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/protocol/modules/module-overview",component:p("/docs/protocol/modules/module-overview","bb8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/protocol/modules/rns",component:p("/docs/protocol/modules/rns","ce1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/protocol/modules/storage",component:p("/docs/protocol/modules/storage","862"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/protocol/modules/wasm",component:p("/docs/protocol/modules/wasm","284"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/protocol/p-o-p",component:p("/docs/protocol/p-o-p","533"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/protocol/tokens",component:p("/docs/protocol/tokens","463"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/protocol/validators",component:p("/docs/protocol/validators","18b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/using-jackal/dashboard",component:p("/docs/using-jackal/dashboard","322"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/using-jackal/delegate",component:p("/docs/using-jackal/delegate","aa6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/using-jackal/fund",component:p("/docs/using-jackal/fund","988"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/using-jackal/wallet/keplr",component:p("/docs/using-jackal/wallet/keplr","ebe"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"/",component:p("/","41d"),exact:!0},{path:"*",component:p("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>o});var r=n(7294);const a=r.createContext(!1);function o(e){let{children:t}=e;const[n,o]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{o(!0)}),[]),r.createElement(a.Provider,{value:n},t)}},9383:(e,t,n)=>{"use strict";var r=n(7294),a=n(3935),o=n(3727),i=n(405),l=n(412);const s=[n(2497),n(3310),n(8320),n(2295)];var u=n(723),c=n(6550),d=n(8790);function p(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var f=n(7462),m=n(5742),h=n(2263),g=n(4996),b=n(6668),v=n(1944),y=n(4711),w=n(9727),k=n(3320),E=n(197);function S(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,h.Z)(),n=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function _(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),a=function(){const{siteConfig:{url:e}}=(0,h.Z)(),{pathname:t}=(0,c.TH)();return e+(0,g.Z)(t)}(),o=t?`${n}${t}`:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function x(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,b.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(v.d,{image:n}),r.createElement(_,null),r.createElement(S,null),r.createElement(E.Z,{tag:k.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,f.Z)({key:t},e))))))}const C=new Map;function T(e){if(C.has(e.pathname))return{...e,pathname:C.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return C.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return C.set(e.pathname,t),{...e,pathname:t}}var A=n(8934),L=n(8940);function R(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const N=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,r.useLayoutEffect)((()=>{a!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:a}),R("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function O(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class P extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?R("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=R("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),O(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(N,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const D=P,I="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",j="__docusaurus-base-url-issue-banner-suggestion-container",F="__DOCUSAURUS_INSERT_BASEURL_BANNER";function B(e){return`\nwindow['${F}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${F}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${I}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{window[F]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,B(e))),r.createElement("div",{id:I}))}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement(z,null):null}function $(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:a,localeConfigs:o}}=(0,h.Z)(),i=(0,g.Z)(e),{htmlLang:l,direction:s}=o[a];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var q=n(4763);function H(){const e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement(q.Z,null,r.createElement(L.M,null,r.createElement(A.t,null,r.createElement(p,null,r.createElement($,null),r.createElement(x,null),r.createElement(U,null),r.createElement(D,{location:T(t)},e)))))}var G=n(6887);const Z=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var V=n(9670);const W=new Set,Y=new Set,K=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,Q={prefetch(e){if(!(e=>!K()&&!Y.has(e)&&!W.has(e))(e))return!1;W.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(G).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,V.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Z(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!K()&&!Y.has(e))(e)&&(Y.add(e),O(e))},X=Object.freeze(Q);if(l.Z.canUseDOM){window.docusaurus=X;const e=a.hydrate;O(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(o.VK,null,r.createElement(H,null))),document.getElementById("__docusaurus"))}))}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(7294),a=n(6809);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"intro","docs":[{"id":"contributors/foundation","path":"/docs/contributors/foundation","sidebar":"tutorialSidebar"},{"id":"contributors/join","path":"/docs/contributors/join","sidebar":"tutorialSidebar"},{"id":"contributors/labs","path":"/docs/contributors/labs","sidebar":"tutorialSidebar"},{"id":"developers/apis/apis","path":"/docs/developers/apis/apis","sidebar":"tutorialSidebar"},{"id":"developers/apis/intro","path":"/docs/developers/apis/intro","sidebar":"tutorialSidebar"},{"id":"developers/dAppLibraries/intro","path":"/docs/developers/dAppLibraries/intro","sidebar":"tutorialSidebar"},{"id":"developers/dAppLibraries/jackal_go","path":"/docs/developers/dAppLibraries/jackal_go","sidebar":"tutorialSidebar"},{"id":"developers/dAppLibraries/jackal_js","path":"/docs/developers/dAppLibraries/jackal_js","sidebar":"tutorialSidebar"},{"id":"developers/dAppLibraries/jackal_nodejs","path":"/docs/developers/dAppLibraries/jackal_nodejs","sidebar":"tutorialSidebar"},{"id":"developers/dAppLibraries/jackal_protos","path":"/docs/developers/dAppLibraries/jackal_protos","sidebar":"tutorialSidebar"},{"id":"developers/intro","path":"/docs/developers/intro","sidebar":"tutorialSidebar"},{"id":"ecosystem/grants-funding","path":"/docs/ecosystem/grants-funding","sidebar":"tutorialSidebar"},{"id":"ecosystem/partnerships","path":"/docs/ecosystem/partnerships","sidebar":"tutorialSidebar"},{"id":"intro","path":"/docs/intro","sidebar":"tutorialSidebar"},{"id":"nodes/install","path":"/docs/nodes/install","sidebar":"tutorialSidebar"},{"id":"nodes/nodes/hardware","path":"/docs/nodes/nodes/hardware","sidebar":"tutorialSidebar"},{"id":"nodes/nodes/installation","path":"/docs/nodes/nodes/installation","sidebar":"tutorialSidebar"},{"id":"nodes/nodes/mainnet","path":"/docs/nodes/nodes/mainnet","sidebar":"tutorialSidebar"},{"id":"nodes/nodes/testnet","path":"/docs/nodes/nodes/testnet","sidebar":"tutorialSidebar"},{"id":"nodes/providers/building","path":"/docs/nodes/providers/building","sidebar":"tutorialSidebar"},{"id":"nodes/providers/hardware/diy-serious copy","path":"/docs/nodes/providers/hardware/diy-serious copy","sidebar":"tutorialSidebar"},{"id":"nodes/providers/hardware/enterprise","path":"/docs/nodes/providers/hardware/enterprise","sidebar":"tutorialSidebar"},{"id":"nodes/providers/setting_up","path":"/docs/nodes/providers/setting_up","sidebar":"tutorialSidebar"},{"id":"nodes/validators/joining","path":"/docs/nodes/validators/joining","sidebar":"tutorialSidebar"},{"id":"official-links/jackal-foundation","path":"/docs/official-links/jackal-foundation","sidebar":"tutorialSidebar"},{"id":"official-links/jackal-labs","path":"/docs/official-links/jackal-labs","sidebar":"tutorialSidebar"},{"id":"official-links/jackal-protocol","path":"/docs/official-links/jackal-protocol","sidebar":"tutorialSidebar"},{"id":"overview/jackal-tldr","path":"/docs/overview/jackal-tldr","sidebar":"tutorialSidebar"},{"id":"overview/jkl","path":"/docs/overview/jkl","sidebar":"tutorialSidebar"},{"id":"overview/why-jackal","path":"/docs/overview/why-jackal","sidebar":"tutorialSidebar"},{"id":"protocol/encryption","path":"/docs/protocol/encryption","sidebar":"tutorialSidebar"},{"id":"protocol/modules/dsig","path":"/docs/protocol/modules/dsig","sidebar":"tutorialSidebar"},{"id":"protocol/modules/filetree","path":"/docs/protocol/modules/filetree","sidebar":"tutorialSidebar"},{"id":"protocol/modules/jklmint","path":"/docs/protocol/modules/jklmint","sidebar":"tutorialSidebar"},{"id":"protocol/modules/lp","path":"/docs/protocol/modules/lp","sidebar":"tutorialSidebar"},{"id":"protocol/modules/module-overview","path":"/docs/protocol/modules/module-overview","sidebar":"tutorialSidebar"},{"id":"protocol/modules/rns","path":"/docs/protocol/modules/rns","sidebar":"tutorialSidebar"},{"id":"protocol/modules/storage","path":"/docs/protocol/modules/storage","sidebar":"tutorialSidebar"},{"id":"protocol/modules/wasm","path":"/docs/protocol/modules/wasm","sidebar":"tutorialSidebar"},{"id":"protocol/p-o-p","path":"/docs/protocol/p-o-p","sidebar":"tutorialSidebar"},{"id":"protocol/tokens","path":"/docs/protocol/tokens","sidebar":"tutorialSidebar"},{"id":"protocol/validators","path":"/docs/protocol/validators","sidebar":"tutorialSidebar"},{"id":"using-jackal/dashboard","path":"/docs/using-jackal/dashboard","sidebar":"tutorialSidebar"},{"id":"using-jackal/delegate","path":"/docs/using-jackal/delegate","sidebar":"tutorialSidebar"},{"id":"using-jackal/fund","path":"/docs/using-jackal/fund","sidebar":"tutorialSidebar"},{"id":"using-jackal/wallet/keplr","path":"/docs/using-jackal/wallet/keplr","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/docs/intro","label":"intro"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.4.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.1"}}}'),u={siteConfig:a.default,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(412),o=n(5742),i=n(8780),l=n(7961);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(u,{error:t}))}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function c(e){let{error:t,tryAgain:n}=e;return r.createElement(p,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(o.Z,null,r.createElement("title",null,"Page Error")),r.createElement(l.Z,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(c,e);class p extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(405);function o(e){return r.createElement(a.ql,e)}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7462),a=n(7294),o=n(3727),i=n(8780),l=n(2263),s=n(3919),u=n(412);const c=a.createContext({collectLink:()=>{}});var d=n(4996);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:b=!0,...v}=e;const{siteConfig:{trailingSlash:y,baseUrl:w}}=(0,l.Z)(),{withBaseUrl:k}=(0,d.C)(),E=(0,a.useContext)(c),S=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(()=>S.current));const _=p||f;const x=(0,s.Z)(_),C=_?.replace("pathname://","");let T=void 0!==C?(A=C,b&&(e=>e.startsWith("/"))(A)?k(A):A):void 0;var A;T&&x&&(T=(0,i.applyTrailingSlash)(T,{trailingSlash:y,baseUrl:w}));const L=(0,a.useRef)(!1),R=n?o.OL:o.rU,N=u.Z.canUseIntersectionObserver,O=(0,a.useRef)(),P=()=>{L.current||null==T||(window.docusaurus.preload(T),L.current=!0)};(0,a.useEffect)((()=>(!N&&x&&null!=T&&window.docusaurus.prefetch(T),()=>{N&&O.current&&O.current.disconnect()})),[O,T,N,x]);const D=T?.startsWith("#")??!1,I=!T||!x||D;return I||g||E.collectLink(T),I?a.createElement("a",(0,r.Z)({ref:S,href:T},_&&!x&&{target:"_blank",rel:"noopener noreferrer"},v)):a.createElement(R,(0,r.Z)({},v,{onMouseEnter:P,onTouchStart:P,innerRef:e=>{S.current=e,N&&e&&x&&(O.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(O.current.unobserve(e),O.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),O.current.observe(e))},to:T},n&&{isActive:h,activeClassName:m}))}const f=a.forwardRef(p)},1875:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=()=>null},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var o=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return o[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,a(l,o))}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(7294),a=n(2263),o=n(3919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8940);function o(){return(0,r.useContext)(a._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8934);function o(){return(0,r.useContext)(a._)}},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const l=a?`${a}.${o}`:o;r(i)?e(i,l):t[l]=i}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>o});var r=n(7294);const a=r.createContext(null);function o(e){let{children:t,value:n}=e;const o=r.useContext(a),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:o,value:n})),[o,n]);return r.createElement(a.Provider,{value:i},t)}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>h,gA:()=>p,_r:()=>c,Jo:()=>g,zh:()=>d,yW:()=>m,gB:()=>f});var r=n(6550),a=n(2263),o=n(9935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=function(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const u={},c=()=>i("docusaurus-plugin-content-docs")??u,d=e=>function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function p(e){void 0===e&&(e={});const t=c(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function f(e){return d(e).versions}function m(e){const t=d(e);return l(t)}function h(e){const t=d(e),{pathname:n}=(0,r.TH)();return s(t,n)}function g(e){const t=d(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(4865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),a=n(6809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const a={iconExternalLink:"iconExternalLink_nPIU"};function o(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:a.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},7961:(e,t,n)=>{"use strict";n.d(t,{Z:()=>dt});var r=n(7294),a=n(6010),o=n(4763),i=n(1944),l=n(7462),s=n(6550),u=n(5999),c=n(5936);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,u.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:a}=f();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:a}),t))}var g=n(5281),b=n(9727);const v={skipToContent:"skipToContent_fXgn"};function y(){return r.createElement(h,{className:v.skipToContent})}var w=n(6668),k=n(9689);function E(e){let{width:t=21,height:n=21,color:a="currentColor",strokeWidth:o=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:a,strokeWidth:o},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const S={closeButton:"closeButton_CVFx"};function _(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,u.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,a.Z)("clean-btn close",S.closeButton,e.className)}),r.createElement(E,{width:14,height:14,strokeWidth:3.1}))}const x={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,a.Z)(x.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function A(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,k.nT)();if(!t)return null;const{backgroundColor:a,textColor:o,isCloseable:i}=e;return r.createElement("div",{className:T.announcementBar,style:{backgroundColor:a,color:o},role:"banner"},i&&r.createElement("div",{className:T.announcementBarPlaceholder}),r.createElement(C,{className:T.announcementBarContent}),i&&r.createElement(_,{onClick:n,className:T.announcementBarClose}))}var L=n(2961),R=n(2466);var N=n(902),O=n(3102);const P=r.createContext(null);function D(e){let{children:t}=e;const n=function(){const e=(0,L.e)(),t=(0,O.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,N.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return r.createElement(P.Provider,{value:n},t)}function I(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function M(){const e=(0,r.useContext)(P);if(!e)throw new N.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,O.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:I(o)})),[a,o,t])}function j(e){let{header:t,primaryMenu:n,secondaryMenu:o}=e;const{shown:i}=M();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var F=n(2949),B=n(2389);function z(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function U(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function q(e){let{className:t,buttonClassName:n,value:o,onChange:i}=e;const l=(0,B.Z)(),s=(0,u.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===o?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.Z)($.toggle,t)},r.createElement("button",{className:(0,a.Z)("clean-btn",$.toggleButton,!l&&$.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===o?"light":"dark"),disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},r.createElement(z,{className:(0,a.Z)($.toggleIcon,$.lightToggleIcon)}),r.createElement(U,{className:(0,a.Z)($.toggleIcon,$.darkToggleIcon)})))}const H=r.memo(q),G={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function Z(e){let{className:t}=e;const n=(0,w.L)().navbar.style,a=(0,w.L)().colorMode.disableSwitch,{colorMode:o,setColorMode:i}=(0,F.I)();return a?null:r.createElement(H,{className:t,buttonClassName:"dark"===n?G.darkNavbarColorModeToggle:void 0,value:o,onChange:i})}var V=n(1327);function W(){return r.createElement(V.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Y(){const e=(0,L.e)();return r.createElement("button",{type:"button","aria-label":(0,u.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(E,{color:"var(--ifm-color-emphasis-600)"}))}function K(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(W,null),r.createElement(Z,{className:"margin-right--md"}),r.createElement(Y,null))}var Q=n(9960),X=n(4996),J=n(3919);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(9471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:a,href:o,label:i,html:s,isDropdownLink:u,prependBaseUrlToHref:c,...d}=e;const p=(0,X.Z)(a),f=(0,X.Z)(t),m=(0,X.Z)(o,{forcePrependBaseUrl:!0}),h=i&&o&&!(0,J.Z)(o),g=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,h&&r.createElement(te.Z,u&&{width:12,height:12}))};return o?r.createElement(Q.Z,(0,l.Z)({href:c?m:o},d,g)):r.createElement(Q.Z,(0,l.Z)({to:p,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(f)},d,g))}function re(e){let{className:t,isDropdownItem:n=!1,...o}=e;const i=r.createElement(ne,(0,l.Z)({className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},o));return n?r.createElement("li",null,i):i}function ae(e){let{className:t,isDropdownItem:n,...o}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,l.Z)({className:(0,a.Z)("menu__link",t)},o)))}function oe(e){let{mobile:t=!1,position:n,...a}=e;const o=t?ae:re;return r.createElement(o,(0,l.Z)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(6043),le=n(8596),se=n(2263);function ue(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ce(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const u=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[u]),r.createElement("div",{ref:u,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c})},r.createElement(ne,(0,l.Z)({"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,a.Z)("navbar__link",o)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(_e,(0,l.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:o,onClick:i,...u}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),r.createElement("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":p})},r.createElement(ne,(0,l.Z)({role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},u,{onClick:e=>{e.preventDefault(),f()}}),u.children??u.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p},t.map(((e,t)=>r.createElement(_e,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function pe(e){let{mobile:t=!1,...n}=e;const a=t?de:ce;return r.createElement(a,n)}var fe=n(4711);function me(e){let{width:t=20,height:n=20,...a}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},a),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const he="iconLanguage_nlXk";var ge=n(1875);const be={searchBox:"searchBox_ZlJk"};function ve(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.Z)(n,be.searchBox)},t)}var ye=n(143),we=n(2802);var ke=n(373);const Ee=e=>e.docs.find((t=>t.id===e.mainDocId));const Se={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:a,...o}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,se.Z)(),p=(0,fe.l)(),{search:f,hash:m}=(0,s.TH)(),h=[...n,...c.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...a],g=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(pe,(0,l.Z)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:he}),g),items:h}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(ve,{className:n},r.createElement(ge.Z,null))},dropdown:pe,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,a.Z)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,ye.Iw)(a),s=(0,we.vY)(t,a);return null===s?null:r.createElement(oe,(0,l.Z)({exact:!0},o,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,ye.Iw)(a),s=(0,we.oz)(t,a).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(oe,(0,l.Z)({exact:!0},o,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...o}=e;const i=(0,we.lO)(a)[0],s=t??i.label,u=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(oe,(0,l.Z)({},o,{label:s,to:u}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:o,dropdownItemsAfter:i,...c}=e;const{search:d,hash:p}=(0,s.TH)(),f=(0,ye.Iw)(n),m=(0,ye.gB)(n),{savePreferredVersionName:h}=(0,ke.J)(n),g=[...o,...m.map((e=>{const t=f.alternateDocVersions[e.name]??Ee(e);return{label:e.label,to:`${t.path}${d}${p}`,isActive:()=>e===f.activeVersion,onClick:()=>h(e.name)}})),...i],b=(0,we.lO)(n)[0],v=t&&g.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,y=t&&g.length>1?void 0:Ee(b).path;return g.length<=1?r.createElement(oe,(0,l.Z)({},c,{mobile:t,label:v,to:y,isActive:a?()=>!1:void 0})):r.createElement(pe,(0,l.Z)({},c,{mobile:t,label:v,to:y,items:g,isActive:a?()=>!1:void 0}))}};function _e(e){let{type:t,...n}=e;const a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Se[a];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(o,n)}function xe(){const e=(0,L.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(_e,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Ce(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Te(){const e=0===(0,w.L)().navbar.items.length,t=M();return r.createElement(r.Fragment,null,!e&&r.createElement(Ce,{onClick:()=>t.hide()}),t.content)}function Ae(){const e=(0,L.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(j,{header:r.createElement(K,null),primaryMenu:r.createElement(xe,null),secondaryMenu:r.createElement(Te,null)}):null}const Le={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Re(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function Ne(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.L)(),i=(0,L.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,R.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+u{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,"aria-label":(0,u.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",n&&[Le.navbarHideable,!s&&Le.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown})},t,r.createElement(Re,{onClick:i.toggle}),r.createElement(Ae,null))}var Oe=n(8780);const Pe={errorBoundaryError:"errorBoundaryError_a6uf"};function De(e){return r.createElement("button",(0,l.Z)({type:"button"},e),r.createElement(u.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function Ie(e){let{error:t}=e;const n=(0,Oe.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Pe.errorBoundaryError},n)}class Me extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const je="right";function Fe(e){let{width:t=30,height:n=30,className:a,...o}=e;return r.createElement("svg",(0,l.Z)({className:a,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},o),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Be(){const{toggle:e,shown:t}=(0,L.e)();return r.createElement("button",{onClick:e,"aria-label":(0,u.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(Fe,null))}const ze={colorModeToggle:"colorModeToggle_DEke"};function Ue(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Me,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(_e,e)))))}function $e(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function qe(){const e=(0,L.e)(),t=(0,w.L)().navbar.items,[n,a]=function(e){function t(e){return"left"===(e.position??je)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return r.createElement($e,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(Be,null),r.createElement(W,null),r.createElement(Ue,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(Ue,{items:a}),r.createElement(Z,{className:ze.colorModeToggle}),!o&&r.createElement(ve,null,r.createElement(ge.Z,null)))})}function He(){return r.createElement(Ne,null,r.createElement(qe,null))}function Ge(e){let{item:t}=e;const{to:n,href:a,label:o,prependBaseUrlToHref:i,...s}=t,u=(0,X.Z)(n),c=(0,X.Z)(a,{forcePrependBaseUrl:!0});return r.createElement(Q.Z,(0,l.Z)({className:"footer__link-item"},a?{href:i?c:a}:{to:u},s),o,a&&!(0,J.Z)(a)&&r.createElement(te.Z,null))}function Ze(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Ge,{item:t}))}function Ve(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(Ze,{key:t,item:e})))))}function We(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(Ve,{key:t,column:e}))))}function Ye(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function Ke(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Ge,{item:t})}function Qe(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(Ke,{item:e}),t.length!==n+1&&r.createElement(Ye,null))))))}function Xe(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(We,{columns:t}):r.createElement(Qe,{links:t})}var Je=n(941);const et={footerLogoLink:"footerLogoLink_BH7S"};function tt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Je.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function nt(e){let{logo:t}=e;return t.href?r.createElement(Q.Z,{href:t.href,className:et.footerLogoLink,target:t.target},r.createElement(tt,{logo:t})):r.createElement(tt,{logo:t})}function rt(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function at(e){let{style:t,links:n,logo:o,copyright:i}=e;return r.createElement("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(o||i)&&r.createElement("div",{className:"footer__bottom text--center"},o&&r.createElement("div",{className:"margin-bottom--sm"},o),i)))}function ot(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:a,style:o}=e;return r.createElement(at,{style:o,links:n&&n.length>0&&r.createElement(Xe,{links:n}),logo:a&&r.createElement(nt,{logo:a}),copyright:t&&r.createElement(rt,{copyright:t})})}const it=r.memo(ot),lt=(0,N.Qc)([F.S,k.pl,R.OC,ke.L5,i.VC,function(e){let{children:t}=e;return r.createElement(O.n2,null,r.createElement(L.M,null,r.createElement(D,null,t)))}]);function st(e){let{children:t}=e;return r.createElement(lt,null,t)}function ut(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(De,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(Ie,{error:t})))))}const ct={mainWrapper:"mainWrapper_z2l0"};function dt(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:u}=e;return(0,b.t)(),r.createElement(st,null,r.createElement(i.d,{title:s,description:u}),r.createElement(y,null),r.createElement(A,null),r.createElement(He,null),r.createElement("div",{id:d,className:(0,a.Z)(g.k.wrapper.main,ct.mainWrapper,l)},r.createElement(o.Z,{fallback:e=>r.createElement(ut,e)},t)),!n&&r.createElement(it,null))}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),a=n(7294),o=n(9960),i=n(4996),l=n(2263),s=n(6668),u=n(941);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=a.createElement(u.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?a.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:u}}=(0,s.L)(),{imageClassName:d,titleClassName:p,...f}=e,m=(0,i.Z)(u?.href||"/"),h=n?"":t,g=u?.alt??h;return a.createElement(o.Z,(0,r.Z)({to:m},f,u?.target&&{target:u.target}),u&&a.createElement(c,{logo:u,alt:g,imageClassName:d}),null!=n&&a.createElement("b",{className:p},n))}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(5742);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return r.createElement(a.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),a=n(7294),o=n(6010),i=n(2389),l=n(2949);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:u,className:c,alt:d,...p}=e,f=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,f.map((e=>a.createElement("img",(0,r.Z)({key:e,src:u[e],alt:d,className:(0,o.Z)(s.themedImage,s[`themedImage--${e}`],c)},p)))))}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>s,z:()=>g});var r=n(7462),a=n(7294),o=n(412),i=n(1442);const l="ease-in-out";function s(e){let{initialState:t}=e;const[n,r]=(0,a.useState)(t??!1),o=(0,a.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:o}}const u={display:"none",overflow:"hidden",height:"0px"},c={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?u:c;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function p(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const o=(0,a.useRef)(!1);(0,a.useEffect)((()=>{const e=t.current;function a(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??l}`,height:`${t}px`}}function s(){const t=a();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return d(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function f(e){if(!o.Z.canUseDOM)return e?u:c}function m(e){let{as:t="div",collapsed:n,children:r,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const u=(0,a.useRef)(null);return p({collapsibleRef:u,collapsed:n,animation:o}),a.createElement(t,{ref:u,style:s?void 0:f(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(u.current,n),i?.(n))},className:l},r)}function h(e){let{collapsed:t,...n}=e;const[o,i]=(0,a.useState)(!t),[l,s]=(0,a.useState)(t);return(0,a.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,a.useLayoutEffect)((()=>{o&&s(t)}),[o,t]),o?a.createElement(m,(0,r.Z)({},n,{collapsed:l})):null}function g(e){let{lazy:t,...n}=e;const r=t?h:m;return a.createElement(r,n)}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>f});var r=n(7294),a=n(2389),o=n(12),i=n(902),l=n(6668);const s=(0,o.WA)("docusaurus.announcement.dismiss"),u=(0,o.WA)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),p=r.createContext(null);function f(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{o(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(p.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(p);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>h});var r=n(7294),a=n(412),o=n(902),i=n(12),l=n(6668);const s=r.createContext(void 0),u="theme",c=(0,i.WA)(u),d={light:"light",dark:"dark"},p=e=>e===d.dark?d.dark:d.light,f=e=>a.Z.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e),m=e=>{c.set(p(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[a,o]=(0,r.useState)(f(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&m(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&i(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[a,i])}();return r.createElement(s.Provider,{value:n},t)}function g(){const e=(0,r.useContext)(s);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>g});var r=n(7294),a=n(143),o=n(9935),i=n(6668),l=n(2802),s=n(902),u=n(12);const c=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,u.WA)(c(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.WA)(c(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.WA)(c(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const f=r.createContext(null);function m(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,l]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return r.createElement(f.Provider,{value:n},t)}function g(e){let{children:t}=e;return l.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function b(){const e=(0,r.useContext)(f);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,i]=b(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),a=n(902);const o=Symbol("EmptyContext"),i=r.createContext(o);function l(e){let{children:t,name:n,items:a}=e;const o=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return r.createElement(i.Provider,{value:o},t)}function s(){const e=(0,r.useContext)(i);if(e===o)throw new a.i6("DocsSidebarProvider");return e}},2961:(e,t,n)=>{"use strict";n.d(t,{M:()=>p,e:()=>f});var r=n(7294),a=n(3102),o=n(7524),i=n(6550),l=(n(1688),n(902));function s(e){!function(e){const t=(0,i.k6)(),n=(0,l.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var u=n(6668);const c=r.createContext(void 0);function d(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,u.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[i,l]=(0,r.useState)(!1);s((()=>{if(i)return l(!1),!1}));const c=(0,r.useCallback)((()=>{l((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:i})),[e,n,c,i])}function p(e){let{children:t}=e;const n=d();return r.createElement(c.Provider,{value:n},t)}function f(){const e=r.useContext(c);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),a=n(902);const o=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(o);if(!i)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,a.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(7294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(7294),a=n(412);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return a.Z.canUseDOM?window.innerWidth>i?o.desktop:o.mobile:o.ssr}const s=!1;function u(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},1442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},2802:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>p,_F:()=>h,cE:()=>d,hI:()=>k,lO:()=>v,vY:()=>w,oz:()=>y,s1:()=>b});var r=n(7294),a=n(6550),o=n(8790),i=n(143),l=n(373),s=n(1116);function u(e){return Array.from(new Set(e))}var c=n(8596);const d=!!i._r;function p(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=p(t);if(e)return e}}}const f=(e,t)=>void 0!==e&&(0,c.Mg)(e,t),m=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?f(e.href,t):"category"===e.type&&(f(e.href,t)||m(e.items,t))}function g(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,c.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,c.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function b(){const e=(0,s.V)(),{pathname:t}=(0,a.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?g({sidebarItems:e.items,pathname:t}):null}function v(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>u([t,n,a].filter(Boolean))),[t,n,a])}function y(e,t){const n=v(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function w(e,t){const n=v(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${u(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function k(e){let{route:t,versionMetadata:n}=e;const r=(0,a.TH)(),i=t.routes,l=i.find((e=>(0,a.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,o.H)(i),sidebarName:s,sidebarItems:u}}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>c,VC:()=>f});var r=n(7294),a=n(6010),o=n(5742),i=n(226);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(4996),u=n(2263);function c(e){let{title:t,description:n,keywords:a,image:i,children:l}=e;const c=function(e){const{siteConfig:t}=(0,u.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),p=i?d(i,{absolute:!0}):void 0;return r.createElement(o.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),p&&r.createElement("meta",{property:"og:image",content:p}),p&&r.createElement("meta",{name:"twitter:image",content:p}),l)}const d=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,a.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(o.Z,null,r.createElement("html",{className:l})),n)}function f(e){let{children:t}=e;const n=l(),o=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(p,{className:(0,a.Z)(o,i)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>s,i6:()=>l,zX:()=>o});var r=n(7294);const a=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function o(e){const t=(0,r.useRef)(e);return a((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return a((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),a=n(723),o=n(2263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,o.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>s,RF:()=>d});var r=n(7294),a=n(412),o=n(2389),i=n(902);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const c=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),a=(0,r.useRef)(c()),o=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function p(){const e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>a});n(2263);const r="default";function a(e,t){return`docs-${e}-${t}`}},12:(e,t,n)=>{"use strict";n.d(t,{WA:()=>s});n(7294),n(1688);const r="localStorage";function a(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function o(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function s(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=o(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),a({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),a({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>o});var r=n(2263),a=n(6550);function o(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:o}}=(0,r.Z)(),{pathname:i}=(0,a.TH)(),l=o===n?e:e.replace(`/${o}/`,"/"),s=i.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:a}=e;return`${a?t:""}${function(e){return e===n?`${l}`:`${l}${e}/`}(r)}${s}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),a=n(6550),o=n(902);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(2263);function a(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},4143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},6010:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta});const a=function(){for(var e,t,n=0,a="";n{"use strict";n.d(t,{lX:()=>w,q_:()=>C,ob:()=>f,PP:()=>A,Ep:()=>p});var r=n(7462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;p--){var f=i[p];"."===f?o(i,p):".."===f?(o(i,p),d++):d&&(o(i,p),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(8776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function f(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=f(e,t,h(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(9864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=f(n);a&&a!==m&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),h=s(n),g=0;g{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,a,o,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&f(a),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=p(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(a){return!1}}()?Object.assign:function(e,a){for(var o,i,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s{"use strict";n.d(t,{Z:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);S+=E.value.length,E=E.next){var _=E.value;if(t.length>e.length)return;if(!(_ instanceof a)){var x,C=1;if(v){if(!(x=o(k,S,e,b))||x.index>=e.length)break;var T=x.index,A=x.index+x[0].length,L=S;for(L+=E.value.length;T>=L;)L+=(E=E.next).value.length;if(S=L-=E.value.length,E.value instanceof a)continue;for(var R=E;R!==t.tail&&(Ld.reach&&(d.reach=D);var I=E.prev;if(O&&(I=s(t,I,O),S+=O.length),u(t,I,C),E=s(t,I,new a(p,g?r.tokenize(N,g):N,y,N)),P&&s(t,E,P),C>1){var M={cause:p+","+m,reach:D};i(e,t,n,E.prev,S,M),d&&M.reach>d.reach&&(d.reach=M.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function u(e,t,n){for(var r=t.next,a=0;a"+o.content+""},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var l=p(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s=0&&f(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function u(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,s(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function c(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,c={},d=s(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=a,n})).join(""),n,r),p=Object.keys(c);return i=0,function e(t){for(var n=0;n=p.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=p[i],o="string"==typeof r?r:r.content,l=o.indexOf(a);if(-1!==l){++i;var s=o.substring(0,l),d=u(c[a]),f=o.substring(l+a.length),m=[];if(s&&m.push(s),m.push(d),f){var h=[f];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function p(e){return"string"==typeof e?e:Array.isArray(e)?e.map(p).join(""):p(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r*\.{3}(?:[^{}]|)*\})/.source;function o(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(a);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}a.content&&"string"!=typeof a.content&&l(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=o.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],p="string"==typeof u?u:u.content,f=t(r,c),m=p.indexOf(f);if(m>-1){++a;var h=p.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(m+f.length),v=[];h&&v.push.apply(v,i([h])),v.push(g),b&&v.push.apply(v,i([b])),"string"==typeof u?l.splice.apply(l,[s,1].concat(v)):u.content=v}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},9901:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const r=n(9901),a=n(9642),o=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...o,...Object.keys(Prism.languages)];a(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(6500).resolve(t)],delete Prism.languages[e],n(6500)(t),o.add(e)}))}i.silent=!1,e.exports=i},6726:(e,t,n)=>{var r={"./":2885};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=6726},6500:(e,t,n)=>{var r={"./":2885};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=6500},9642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n "));var l={},s=e[r];if(s){function u(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var i in a(t,o),l[t]=!0,n[t])l[i]=!0}t(s.require,u),t(s.optional,u),t(s.modify,u)}n[r]=l,o.pop()}}return function(e){var t=n[e];return t||(a(e,r),t=n[e]),t}}function a(e){for(var t in e)return!0;return!1}return function(o,i,l){var s=function(e){var t={};for(var n in e){var r=e[n];for(var a in r)if("meta"!=a){var o=r[a];t[a]="string"==typeof o?{title:o}:o}}return t}(o),u=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var a in n={},e){var o=e[a];t(o&&o.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+a+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+a+" because it is a component.");n[t]=a}))}return n[r]||r}}(s);i=i.map(u),l=(l||[]).map(u);var c=n(i),d=n(l);i.forEach((function e(n){var r=s[n];t(r&&r.require,(function(t){t in d||(c[t]=!0,e(t))}))}));for(var p,f=r(s),m=c;a(m);){for(var h in p={},m){var g=s[h];t(g&&g.modify,(function(e){e in d&&(p[e]=!0)}))}for(var b in d)if(!(b in c))for(var v in f(b))if(v in c){p[b]=!0;break}for(var y in m=p)c[y]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,a){var o=a?a.series:void 0,i=a?a.parallel:e,l={},s={};function u(e){if(e in l)return l[e];s[e]=!0;var a,c=[];for(var d in t(e))d in n&&c.push(d);if(0===c.length)a=r(e);else{var p=i(c.map((function(e){var t=u(e);return delete s[e],t})));o?a=o(p,(function(){return r(e)})):r(e)}return l[e]=a}for(var c in n)u(c);var d=[];for(var p in s)d.push(l[p]);return i(d)}(f,c,t,n)}};return w}}();e.exports=t},2703:(e,t,n)=>{"use strict";var r=n(414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),a=n(7418),o=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n