diff --git a/404.html b/404.html index 1a60476..e9a1554 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/29af3fe3.2c077e63.js b/assets/js/29af3fe3.2c077e63.js new file mode 100644 index 0000000..b5bc5c3 --- /dev/null +++ b/assets/js/29af3fe3.2c077e63.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[92],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=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 o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),c=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=c(e.components);return a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),d=c(n),m=r,g=d["".concat(s,".").concat(m)]||d[m]||p[m]||o;return n?a.createElement(g,l(l({ref:t},u),{},{components:n})):a.createElement(g,l({ref:t},u))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var c=2;c{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var a=n(7462),r=(n(7294),n(3905));const o={sidebar_position:2},l="Installing Canined",i={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:"Installing required tools",id:"installing-required-tools",level:3},{value:"Installing Go",id:"installing-go",level:3},{value:"Firewall Configuration",id:"firewall-configuration",level:3},{value:"Create Jackal user",id:"create-jackal-user",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};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"installing-canined"},"Installing Canined"),(0,r.kt)("h2",{id:"pre-requisites"},"Pre-Requisites"),(0,r.kt)("p",null,"There are a few things needed before installing."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Perform the follow instructions as ",(0,r.kt)("inlineCode",{parentName:"p"},"root")," or your ",(0,r.kt)("inlineCode",{parentName:"p"},"admin")," account.")),(0,r.kt)("h3",{id:"installing-required-tools"},"Installing required tools"),(0,r.kt)("p",null,"This will install the necessary tools to build the jackal chain source, along with lz4 compression tool and jquery tool."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"sudo apt update\nsudo apt install build-essential lz4 jq\n")),(0,r.kt)("h3",{id:"installing-go"},"Installing Go"),(0,r.kt)("p",null,"Follow more in-depth instructions to install Go v1.19 or higher ",(0,r.kt)("a",{parentName:"p",href:"https://golang.org/doc/install"},"here"),"."),(0,r.kt)("p",null,"On Ububtu you can install it with:"),(0,r.kt)("pre",null,(0,r.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,r.kt)("p",null,"Add the following golang path info to the current users ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.profile"),"."),(0,r.kt)("p",null,"Also add it to the skeleton profile so all new users have it. ",(0,r.kt)("inlineCode",{parentName:"p"},"/etc/skel/.profile")),(0,r.kt)("pre",null,(0,r.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,r.kt)("p",null,"Restarting the shell with youre profile settings or just rebasing them like so is required."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"source ~/.profile\n")),(0,r.kt)("h3",{id:"firewall-configuration"},"Firewall Configuration"),(0,r.kt)("p",null,"Configure UFW to only accept traffic on ports we use."),(0,r.kt)("pre",null,(0,r.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 enable\n")),(0,r.kt)("h3",{id:"create-jackal-user"},"Create Jackal user"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},'sudo adduser --gecos "" jackal\n')),(0,r.kt)("h3",{id:"creating-a-service"},"Creating a Service"),(0,r.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,r.kt)("p",null,"First create the service file ",(0,r.kt)("inlineCode",{parentName:"p"},"/etc/systemd/system/jackal.service")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"sudo nano /etc/systemd/system/jackal.service\n")),(0,r.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,r.kt)("pre",null,(0,r.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,r.kt)("p",null,"Update systemd and enable the service file."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"sudo systemctl daemon-reload\nsudo systemctl enable canined.service\n")),(0,r.kt)("h2",{id:"building-from-source"},"Building from Source"),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Perform the next follow steps as your ",(0,r.kt)("inlineCode",{parentName:"p"},"jackal")," user")),(0,r.kt)("p",null,"Replace ",(0,r.kt)("inlineCode",{parentName:"p"},"")," with the current running version."),(0,r.kt)("pre",null,(0,r.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,r.kt)("p",null,"From there you will be able to use ",(0,r.kt)("inlineCode",{parentName:"p"},"canined"),", ex:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"canined version\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/29af3fe3.c0d16cab.js b/assets/js/29af3fe3.c0d16cab.js deleted file mode 100644 index 6e05c6c..0000000 --- a/assets/js/29af3fe3.c0d16cab.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[92],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var a=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 l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var o=a.createContext({}),c=function(e){var t=a.useContext(o),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=c(e.components);return a.createElement(o.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,o=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=c(n),g=r,m=p["".concat(o,".").concat(g)]||p[g]||d[g]||l;return n?a.createElement(m,i(i({ref:t},u),{},{components:n})):a.createElement(m,i({ref:t},u))}));function g(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,i=new Array(l);i[0]=p;var s={};for(var o in t)hasOwnProperty.call(t,o)&&(s[o]=t[o]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>i,default:()=>d,frontMatter:()=>l,metadata:()=>s,toc:()=>c});var a=n(7462),r=(n(7294),n(3905));const l={sidebar_position:2},i="Installing Canined",s={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"}},o={},c=[{value:"Pre-Requisites",id:"pre-requisites",level:2},{value:"Installing Build Essentials",id:"installing-build-essentials",level:3},{value:"Installing Go",id:"installing-go",level:3},{value:"Building from Source",id:"building-from-source",level:2},{value:"Syncing to Current Height",id:"syncing-to-current-height",level:2},{value:"Versions for Sync",id:"versions-for-sync",level:3},{value:"Creating a Service",id:"creating-a-service",level:2}],u={toc:c};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"installing-canined"},"Installing Canined"),(0,r.kt)("h2",{id:"pre-requisites"},"Pre-Requisites"),(0,r.kt)("p",null,"There are a few things needed before installing."),(0,r.kt)("h3",{id:"installing-build-essentials"},"Installing Build Essentials"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"sudo apt update\nsudo apt install build-essential\n")),(0,r.kt)("h3",{id:"installing-go"},"Installing Go"),(0,r.kt)("p",null,"Follow more in-depth instructions to install Go v1.19 or higher ",(0,r.kt)("a",{parentName:"p",href:"https://golang.org/doc/install"},"here"),"."),(0,r.kt)("p",null,"On Ububtu you can install it with:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"wget https://golang.org/dl/go1.19.3.linux-amd64.tar.gz\nsudo tar -C /usr/local -xzf go1.19.3.linux-amd64.tar.gz\n")),(0,r.kt)("p",null,"Add these lines to the end of ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.profile"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"export GOROOT=/usr/local/go\nexport GOPATH=$HOME/go\nexport GO111MODULE=on\nexport PATH=$PATH:/usr/local/go/bin:$HOME/go/bin\n")),(0,r.kt)("p",null,"Restarting the shell with youre profile settings or just rebasing them like so is required."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"source ~/.profile\n")),(0,r.kt)("h2",{id:"building-from-source"},"Building from Source"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"git clone https://github.com/JackalLabs/canine-chain.git\ncd canine-chain\ngit fetch\ngit checkout \n\nmake install\n")),(0,r.kt)("p",null,"From there you will be able to use ",(0,r.kt)("inlineCode",{parentName:"p"},"canined"),", ex:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"canined version\n")),(0,r.kt)("h2",{id:"syncing-to-current-height"},"Syncing to Current Height"),(0,r.kt)("p",null,"Get a snapshot ",(0,r.kt)("a",{parentName:"p",href:"http://snapshots.autostake.net/jackal-1/"},"here"),"."),(0,r.kt)("p",null,"For the sake of this guide, the snapshot we download is named ",(0,r.kt)("inlineCode",{parentName:"p"},"jackal.tar.lz4")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"sudo snap install lz4\ncanined unsafe-reset-all --keep-addr-book\nlz4 -c -d jackal.tar.lz4 | tar -x -C $HOME/.canine\n")),(0,r.kt)("p",null,"Then start the chain again."),(0,r.kt)("h3",{id:"versions-for-sync"},"Versions for Sync"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"block height"),(0,r.kt)("th",{parentName:"tr",align:null},"canined version"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"45381"),(0,r.kt)("td",{parentName:"tr",align:null},"1.1.2")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"0"),(0,r.kt)("td",{parentName:"tr",align:null},"1.1.0")))),(0,r.kt)("h2",{id:"creating-a-service"},"Creating a Service"),(0,r.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,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},'cd $HOME\necho "[Unit]\nDescription=Jackal Node\nAfter=network-online.target\n[Service]\nUser=${USER}\nExecStart=$(which canined) start\nRestart=always\nRestartSec=3\nLimitNOFILE=4096\n[Install]\nWantedBy=multi-user.target\n" > canined.service\n\nsudo mv canined.service /lib/systemd/system/\nsudo systemctl enable canined.service\n\n# Starting the service\nsudo systemctl start canined.service\n\n# Restarting the service\nsudo systemctl daemon-reload\nsudo systemctl restart canined.service\n')))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.d1f88f4c.js b/assets/js/935f2afb.e8465805.js similarity index 50% rename from assets/js/935f2afb.d1f88f4c.js rename to assets/js/935f2afb.e8465805.js index 6ce357f..21eb910 100644 --- a/assets/js/935f2afb.d1f88f4c.js +++ b/assets/js/935f2afb.e8465805.js @@ -1 +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":"Getting Started","href":"/docs/intro","docId":"intro"},{"type":"category","label":"Overview","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"What is 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 would I use the 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":"Jackal Wallet","href":"/docs/using-jackal/wallet/jackalwallet","docId":"using-jackal/wallet/jackalwallet"},{"type":"link","label":"Keplr Wallet","href":"/docs/using-jackal/wallet/keplr","docId":"using-jackal/wallet/keplr"}]},{"type":"link","label":"Funding your Account","href":"/docs/using-jackal/fund","docId":"using-jackal/fund"},{"type":"link","label":"Staking","href":"/docs/using-jackal/delegate","docId":"using-jackal/delegate"},{"type":"link","label":"Jackal Dashboard","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","href":"/docs/protocol/modules/lp","docId":"protocol/modules/lp"},{"type":"link","label":"rns 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","href":"/docs/protocol/p-o-p","docId":"protocol/p-o-p"},{"type":"link","label":"Tokens","href":"/docs/protocol/tokens","docId":"protocol/tokens"},{"type":"link","label":"Encryption","href":"/docs/protocol/encryption","docId":"protocol/encryption"},{"type":"category","label":"Storage Providers","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs/protocol/storageproviders/overview","docId":"protocol/storageproviders/overview"},{"type":"link","label":"Casual Storage Build","href":"/docs/protocol/storageproviders/casual-build","docId":"protocol/storageproviders/casual-build"},{"type":"link","label":"DIY Serious Build","href":"/docs/protocol/storageproviders/diy-serious copy","docId":"protocol/storageproviders/diy-serious copy"},{"type":"link","label":"Enterprise Build","href":"/docs/protocol/storageproviders/enterprise","docId":"protocol/storageproviders/enterprise"}]},{"type":"link","label":"Validators","href":"/docs/protocol/validators","docId":"protocol/validators"}]},{"type":"link","label":"Jackal Explorer","href":"/docs/explorer","docId":"explorer"},{"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":"link","label":"Bounties","href":"/docs/ecosystem/bounties","docId":"ecosystem/bounties"}]},{"type":"category","label":"Nodes & Providers","collapsible":true,"collapsed":true,"items":[{"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":"link","label":"Creating Provider","href":"/docs/nodes/providers/building","docId":"nodes/providers/building"},{"type":"link","label":"Setting Up Canined","href":"/docs/nodes/providers/setting_up","docId":"nodes/providers/setting_up"}]}]}]},"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"},"ecosystem/bounties":{"id":"ecosystem/bounties","title":"Bounties","description":"The Jackal Foundation often posts bounties which are tasks and projects that maintain the Jackal Protocol. Upon successful completion of a bounty, the reward will be released to the service provider. These bounties range in complexity from creating memes and blog publications to refactoring code.","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"},"explorer":{"id":"explorer","title":"Jackal Explorer","description":"The Jackal Explorer is a \u201cLight Explorer\u201d that fetches data from Cosmos full node via LCD/RPC endpoints. This allows our users to explore transactions on the Jackal Blockchain.","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Getting Started","description":"You\u2019ve arrived at the Jackal Wiki! Thank you for taking the first steps towards a more secure, simple, and self-custodial digital experience.","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":"Mainnet goes live on October 26th 2022! If you are here before that, these docs will not work!","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/setting_up":{"id":"nodes/providers/setting_up","title":"Setting Up Canined","description":"Canined Init","sidebar":"tutorialSidebar"},"nodes/validators/joining":{"id":"nodes/validators/joining","title":"Creating Validator","description":"Disclaimer","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":"What is the Jackal Protocol?","description":"The Jackal Protocol is a fast, scalable, and secure blockchain that empowers individuals, developers, and enterprises to increase their data privacy and cybersecurity posture without sacrificing ease of use. This protocol strives to offer world-class applications to protect the planet\u2019s most important data\u2013your data.","sidebar":"tutorialSidebar"},"overview/jkl":{"id":"overview/jkl","title":"What is the JKL Token?","description":"The JKL Token is the native token that powers the infrastructure of the Jackal Protocol and can be applied in a multitude of different ways.","sidebar":"tutorialSidebar"},"overview/why-jackal":{"id":"overview/why-jackal","title":"Why would I use the Jackal Protocol?","description":"Jackal users are empowered with a fast and scalable blockchain while having the ability to be self-custodial of their data. It may be hard to comprehend why many strive for high digital privacy and cyber security posture, so here is a community-compiled list of reasons people use the Jackal Protocol.","sidebar":"tutorialSidebar"},"protocol/encryption":{"id":"protocol/encryption","title":"Encryption","description":"Jackal has two main features that rely on encryption techniques to keep user data private and secure. The two main models are file encryption and file-entry encryption. These reside in different locations within the protocol. The files themselves are stored on Storage Providers, which require files to be encrypted before they are transferred to those machines. The file entries are data structures living directly on-chain in the File Tree blockchain module, again needing to be encrypted on the client\'s device before being sent to the blockchain. The file encryption model is simply performed by taking the file as raw bytes and randomly generating a key in the user\'s client. This key is called a Symmetric Key. We then pass both the key and the file through AES256 encryption, which results in an encrypted file that can safely be sent to the Storage-Providers.","sidebar":"tutorialSidebar"},"protocol/modules/dsig":{"id":"protocol/modules/dsig","title":"dsig Module","description":"dsig","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":"jklmint","sidebar":"tutorialSidebar"},"protocol/modules/lp":{"id":"protocol/modules/lp","title":"lp Module","description":"lp","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":"rns Module","description":"rns","sidebar":"tutorialSidebar"},"protocol/modules/storage":{"id":"protocol/modules/storage","title":"storage Module","description":"storage","sidebar":"tutorialSidebar"},"protocol/modules/wasm":{"id":"protocol/modules/wasm","title":"wasm Module","description":"wasm","sidebar":"tutorialSidebar"},"protocol/p-o-p":{"id":"protocol/p-o-p","title":"Jackal Proof-of-Persistence","description":"Jackal Storage functions by a Proof-of-Storage algorithm we call Proof-of-Persistence. The Jackal Proof-of-Persistence (JPOP) works 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. Storage Providers are responsible for posting Merkle Proofs within a challenge window determined by the blockchain. These challenge windows require the provider to post the raw chunk of data corresponding to the index of the challenge window alongside the required Merkle Hashes to prove the data belongs to the Merkle Root stored on the contract. These challenge indexes are chosen at random by the blockchain using a block-hash-based random number generator paired with a random data oracle.","sidebar":"tutorialSidebar"},"protocol/storageproviders/casual-build":{"id":"protocol/storageproviders/casual-build","title":"Casual Storage Build","description":"You may be successful contributing to the network with an old computer you may have. If you are looking to purpose build a machine- here are the recommendations for casual a storage provider.","sidebar":"tutorialSidebar"},"protocol/storageproviders/diy-serious copy":{"id":"protocol/storageproviders/diy-serious copy","title":"DIY Serious 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"},"protocol/storageproviders/enterprise":{"id":"protocol/storageproviders/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"},"protocol/storageproviders/overview":{"id":"protocol/storageproviders/overview","title":"Overview","description":"Want to power the storage infrastructure for web3?","sidebar":"tutorialSidebar"},"protocol/tokens":{"id":"protocol/tokens","title":"Tokens","description":"JKL or Jackal","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","description":"What is the Jackal Dashboard?","sidebar":"tutorialSidebar"},"using-jackal/delegate":{"id":"using-jackal/delegate","title":"Staking","description":"How to Delegate to a Validator","sidebar":"tutorialSidebar"},"using-jackal/fund":{"id":"using-jackal/fund","title":"Funding your Account","description":"How to Fund your Account.","sidebar":"tutorialSidebar"},"using-jackal/wallet/jackalwallet":{"id":"using-jackal/wallet/jackalwallet","title":"Jackal Wallet","description":"Coming Soon","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 +"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":"Getting Started","href":"/docs/intro","docId":"intro"},{"type":"category","label":"Overview","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"What is 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 would I use the 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":"Jackal Wallet","href":"/docs/using-jackal/wallet/jackalwallet","docId":"using-jackal/wallet/jackalwallet"},{"type":"link","label":"Keplr Wallet","href":"/docs/using-jackal/wallet/keplr","docId":"using-jackal/wallet/keplr"}]},{"type":"link","label":"Funding your Account","href":"/docs/using-jackal/fund","docId":"using-jackal/fund"},{"type":"link","label":"Staking","href":"/docs/using-jackal/delegate","docId":"using-jackal/delegate"},{"type":"link","label":"Jackal Dashboard","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","href":"/docs/protocol/modules/lp","docId":"protocol/modules/lp"},{"type":"link","label":"rns 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","href":"/docs/protocol/p-o-p","docId":"protocol/p-o-p"},{"type":"link","label":"Tokens","href":"/docs/protocol/tokens","docId":"protocol/tokens"},{"type":"link","label":"Encryption","href":"/docs/protocol/encryption","docId":"protocol/encryption"},{"type":"category","label":"Storage Providers","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs/protocol/storageproviders/overview","docId":"protocol/storageproviders/overview"},{"type":"link","label":"Casual Storage Build","href":"/docs/protocol/storageproviders/casual-build","docId":"protocol/storageproviders/casual-build"},{"type":"link","label":"DIY Serious Build","href":"/docs/protocol/storageproviders/diy-serious copy","docId":"protocol/storageproviders/diy-serious copy"},{"type":"link","label":"Enterprise Build","href":"/docs/protocol/storageproviders/enterprise","docId":"protocol/storageproviders/enterprise"}]},{"type":"link","label":"Validators","href":"/docs/protocol/validators","docId":"protocol/validators"}]},{"type":"link","label":"Jackal Explorer","href":"/docs/explorer","docId":"explorer"},{"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":"link","label":"Bounties","href":"/docs/ecosystem/bounties","docId":"ecosystem/bounties"}]},{"type":"category","label":"Nodes & Providers","collapsible":true,"collapsed":true,"items":[{"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":"link","label":"Creating Provider","href":"/docs/nodes/providers/building","docId":"nodes/providers/building"},{"type":"link","label":"Setting Up Canined","href":"/docs/nodes/providers/setting_up","docId":"nodes/providers/setting_up"}]}]}]},"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"},"ecosystem/bounties":{"id":"ecosystem/bounties","title":"Bounties","description":"The Jackal Foundation often posts bounties which are tasks and projects that maintain the Jackal Protocol. Upon successful completion of a bounty, the reward will be released to the service provider. These bounties range in complexity from creating memes and blog publications to refactoring code.","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"},"explorer":{"id":"explorer","title":"Jackal Explorer","description":"The Jackal Explorer is a \u201cLight Explorer\u201d that fetches data from Cosmos full node via LCD/RPC endpoints. This allows our users to explore transactions on the Jackal Blockchain.","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Getting Started","description":"You\u2019ve arrived at the Jackal Wiki! Thank you for taking the first steps towards a more secure, simple, and self-custodial digital experience.","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/setting_up":{"id":"nodes/providers/setting_up","title":"Setting Up Canined","description":"Canined Init","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":"What is the Jackal Protocol?","description":"The Jackal Protocol is a fast, scalable, and secure blockchain that empowers individuals, developers, and enterprises to increase their data privacy and cybersecurity posture without sacrificing ease of use. This protocol strives to offer world-class applications to protect the planet\u2019s most important data\u2013your data.","sidebar":"tutorialSidebar"},"overview/jkl":{"id":"overview/jkl","title":"What is the JKL Token?","description":"The JKL Token is the native token that powers the infrastructure of the Jackal Protocol and can be applied in a multitude of different ways.","sidebar":"tutorialSidebar"},"overview/why-jackal":{"id":"overview/why-jackal","title":"Why would I use the Jackal Protocol?","description":"Jackal users are empowered with a fast and scalable blockchain while having the ability to be self-custodial of their data. It may be hard to comprehend why many strive for high digital privacy and cyber security posture, so here is a community-compiled list of reasons people use the Jackal Protocol.","sidebar":"tutorialSidebar"},"protocol/encryption":{"id":"protocol/encryption","title":"Encryption","description":"Jackal has two main features that rely on encryption techniques to keep user data private and secure. The two main models are file encryption and file-entry encryption. These reside in different locations within the protocol. The files themselves are stored on Storage Providers, which require files to be encrypted before they are transferred to those machines. The file entries are data structures living directly on-chain in the File Tree blockchain module, again needing to be encrypted on the client\'s device before being sent to the blockchain. The file encryption model is simply performed by taking the file as raw bytes and randomly generating a key in the user\'s client. This key is called a Symmetric Key. We then pass both the key and the file through AES256 encryption, which results in an encrypted file that can safely be sent to the Storage-Providers.","sidebar":"tutorialSidebar"},"protocol/modules/dsig":{"id":"protocol/modules/dsig","title":"dsig Module","description":"dsig","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":"jklmint","sidebar":"tutorialSidebar"},"protocol/modules/lp":{"id":"protocol/modules/lp","title":"lp Module","description":"lp","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":"rns Module","description":"rns","sidebar":"tutorialSidebar"},"protocol/modules/storage":{"id":"protocol/modules/storage","title":"storage Module","description":"storage","sidebar":"tutorialSidebar"},"protocol/modules/wasm":{"id":"protocol/modules/wasm","title":"wasm Module","description":"wasm","sidebar":"tutorialSidebar"},"protocol/p-o-p":{"id":"protocol/p-o-p","title":"Jackal Proof-of-Persistence","description":"Jackal Storage functions by a Proof-of-Storage algorithm we call Proof-of-Persistence. The Jackal Proof-of-Persistence (JPOP) works 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. Storage Providers are responsible for posting Merkle Proofs within a challenge window determined by the blockchain. These challenge windows require the provider to post the raw chunk of data corresponding to the index of the challenge window alongside the required Merkle Hashes to prove the data belongs to the Merkle Root stored on the contract. These challenge indexes are chosen at random by the blockchain using a block-hash-based random number generator paired with a random data oracle.","sidebar":"tutorialSidebar"},"protocol/storageproviders/casual-build":{"id":"protocol/storageproviders/casual-build","title":"Casual Storage Build","description":"You may be successful contributing to the network with an old computer you may have. If you are looking to purpose build a machine- here are the recommendations for casual a storage provider.","sidebar":"tutorialSidebar"},"protocol/storageproviders/diy-serious copy":{"id":"protocol/storageproviders/diy-serious copy","title":"DIY Serious 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"},"protocol/storageproviders/enterprise":{"id":"protocol/storageproviders/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"},"protocol/storageproviders/overview":{"id":"protocol/storageproviders/overview","title":"Overview","description":"Want to power the storage infrastructure for web3?","sidebar":"tutorialSidebar"},"protocol/tokens":{"id":"protocol/tokens","title":"Tokens","description":"JKL or Jackal","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","description":"What is the Jackal Dashboard?","sidebar":"tutorialSidebar"},"using-jackal/delegate":{"id":"using-jackal/delegate","title":"Staking","description":"How to Delegate to a Validator","sidebar":"tutorialSidebar"},"using-jackal/fund":{"id":"using-jackal/fund","title":"Funding your Account","description":"How to Fund your Account.","sidebar":"tutorialSidebar"},"using-jackal/wallet/jackalwallet":{"id":"using-jackal/wallet/jackalwallet","title":"Jackal Wallet","description":"Coming Soon","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/c97fbebf.9fa09b5e.js b/assets/js/c97fbebf.9fa09b5e.js deleted file mode 100644 index 87ca1ff..0000000 --- a/assets/js/c97fbebf.9fa09b5e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[4286],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>m});var r=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function i(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var c=r.createContext({}),l=function(e){var n=r.useContext(c),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},p=function(e){var n=l(e.components);return r.createElement(c.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},u=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(t),m=o,f=u["".concat(c,".").concat(m)]||u[m]||d[m]||a;return t?r.createElement(f,i(i({ref:n},p),{},{components:t})):r.createElement(f,i({ref:n},p))}));function m(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,i=new Array(a);i[0]=u;var s={};for(var c in n)hasOwnProperty.call(n,c)&&(s[c]=n[c]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var l=2;l{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var r=t(7462),o=(t(7294),t(3905));const a={sidebar_position:4},i="Joining Mainnet",s={unversionedId:"nodes/nodes/mainnet",id:"nodes/nodes/mainnet",title:"Joining Mainnet",description:"Mainnet goes live on October 26th 2022! If you are here before that, these docs will not work!",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"}},c={},l=[],p={toc:l};function d(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,r.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"joining-mainnet"},"Joining Mainnet"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Mainnet goes live on October 26th 2022! If you are here before that, these docs will not work!")),(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 --chain-id=\n")),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("inlineCode",{parentName:"p"},"chain-id")," for mainnet is currently ",(0,o.kt)("inlineCode",{parentName:"p"},"jackal-1"),".")),(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')))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c97fbebf.bceaa042.js b/assets/js/c97fbebf.bceaa042.js new file mode 100644 index 0000000..ea0800a --- /dev/null +++ b/assets/js/c97fbebf.bceaa042.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[4286],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});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={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=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"]),u=c(n),h=o,m=u["".concat(l,".").concat(h)]||u[h]||d[h]||r;return n?a.createElement(m,s(s({ref:t},p),{},{components:n})):a.createElement(m,s({ref:t},p))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,s=new Array(r);s[0]=u;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:o,s[1]=i;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,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};function d(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(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."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ebbc57e7.1db563e5.js b/assets/js/ebbc57e7.1db563e5.js new file mode 100644 index 0000000..7fe79ad --- /dev/null +++ b/assets/js/ebbc57e7.1db563e5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[4808],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>m});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={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},u=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"]),u=c(t),m=r,g=u["".concat(s,".").concat(m)]||u[m]||d[m]||o;return t?a.createElement(g,i(i({ref:n},p),{},{components:t})):a.createElement(g,i({ref:n},p))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,i=new Array(o);i[0]=u;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var c=2;c{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>i,default:()=>d,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:"Creating Provider",permalink:"/docs/nodes/providers/building"}},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};function d(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(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')))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ebbc57e7.22a4e0a5.js b/assets/js/ebbc57e7.22a4e0a5.js deleted file mode 100644 index 0309fe0..0000000 --- a/assets/js/ebbc57e7.22a4e0a5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcanine_docs=self.webpackChunkcanine_docs||[]).push([[4808],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>m});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 a(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||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var l=r.createContext({}),c=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},d=function(e){var n=c(e.components);return r.createElement(l.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},u=r.forwardRef((function(e,n){var t=e.components,i=e.mdxType,a=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=c(t),m=i,g=u["".concat(l,".").concat(m)]||u[m]||p[m]||a;return t?r.createElement(g,o(o({ref:n},d),{},{components:t})):r.createElement(g,o({ref:n},d))}));function m(e,n){var t=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var a=t.length,o=new Array(a);o[0]=u;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s.mdxType="string"==typeof e?e:i,o[1]=s;for(var c=2;c{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var r=t(7462),i=(t(7294),t(3905));const a={sidebar_position:1},o="Creating Validator",s={unversionedId:"nodes/validators/joining",id:"nodes/validators/joining",title:"Creating Validator",description:"Disclaimer",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:"Creating Provider",permalink:"/docs/nodes/providers/building"}},l={},c=[{value:"Disclaimer",id:"disclaimer",level:2},{value:"Setting Up",id:"setting-up",level:2}],d={toc:c};function p(e){let{components:n,...t}=e;return(0,i.kt)("wrapper",(0,r.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"creating-validator"},"Creating Validator"),(0,i.kt)("h2",{id:"disclaimer"},"Disclaimer"),(0,i.kt)("p",null,"This guide assumes you are using the same machine as the full node."),(0,i.kt)("h2",{id:"setting-up"},"Setting Up"),(0,i.kt)("p",null,"As a validator, you'll need to set a minimum gas price like so:"),(0,i.kt)("pre",null,(0,i.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')),(0,i.kt)("pre",null,(0,i.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 --pubkey $(canined tendermint show-validator) \\\n --chain-id jackal-1 \\\n --gas-prices 0.02ujkl\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.6a89e642.js b/assets/js/runtime~main.a9bdcc32.js similarity index 66% rename from assets/js/runtime~main.6a89e642.js rename to assets/js/runtime~main.a9bdcc32.js index 3287318..befa9a5 100644 --- a/assets/js/runtime~main.6a89e642.js +++ b/assets/js/runtime~main.a9bdcc32.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,t,f,r,c={},b={};function d(e){var a=b[e];if(void 0!==a)return a.exports;var t=b[e]={id:e,loaded:!1,exports:{}};return c[e].call(t.exports,t,t.exports,d),t.loaded=!0,t.exports}d.m=c,d.c=b,e=[],d.O=(a,t,f,r)=>{if(!t){var c=1/0;for(i=0;i=r)&&Object.keys(d.O).every((e=>d.O[e](t[o])))?t.splice(o--,1):(b=!1,r0&&e[i-1][2]>r;i--)e[i]=e[i-1];e[i]=[t,f,r]},d.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return d.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var r=Object.create(null);d.r(r);var c={};a=a||[null,t({}),t([]),t(t)];for(var b=2&f&&e;"object"==typeof b&&!~a.indexOf(b);b=t(b))Object.getOwnPropertyNames(b).forEach((a=>c[a]=()=>e[a]));return c.default=()=>e,d.d(r,c),r},d.d=(e,a)=>{for(var t in a)d.o(a,t)&&!d.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((a,t)=>(d.f[t](e,a),a)),[])),d.u=e=>"assets/js/"+({53:"935f2afb",54:"344debb6",92:"29af3fe3",229:"03cdf430",604:"ab3acb2a",1078:"5402824b",1092:"17b6a24f",1148:"3e125dc6",1172:"b46b7d8b",1210:"18a433c4",1232:"7d26c06c",1251:"d07de6bd",1344:"723cbd1b",1770:"65b97a36",1817:"9c403616",1947:"e1923b53",2782:"f1994572",2891:"f3769d49",3085:"1f391b9e",3298:"ea96f03c",3523:"e289ecfd",4195:"c4f5d8e4",4286:"c97fbebf",4512:"2edbca5e",4808:"ebbc57e7",4878:"c894e2df",5202:"c1147f98",5275:"5a6f97fe",5359:"5593d6f2",5533:"874276e5",5689:"8b564e48",5863:"bbf127f0",6164:"9093546b",6174:"23f3f2f9",7026:"259b7029",7049:"9718a321",7053:"b0580eac",7275:"7b9432de",7414:"393be207",7918:"17896441",8425:"b1fc7db6",8938:"5da52a1e",8957:"8a56e0ba",9042:"0558eea0",9293:"365ebb01",9404:"d07072fe",9514:"1be78505",9671:"0e384e19",9853:"a5b5e7c9",9960:"c933c35c"}[e]||e)+"."+{53:"d1f88f4c",54:"f6c185dc",92:"c0d16cab",229:"d73494f5",604:"7d90b373",1078:"99445947",1092:"0bee5a84",1148:"d5941de6",1172:"21d76f7a",1210:"91e3ad46",1232:"2c4fc305",1251:"1e10924a",1344:"9d2fbd7a",1770:"b077fc11",1817:"207c9ed8",1947:"2c1e9c37",2666:"c0e3c62f",2782:"3c4b4d92",2891:"593fc0ed",3085:"63dfc29a",3298:"54015f3a",3523:"f8d883b5",4195:"d26c19ee",4286:"9fa09b5e",4512:"87f48177",4808:"22a4e0a5",4878:"12dc302d",4972:"1f3b4ce6",5202:"91bc9804",5275:"febd63e3",5359:"6c72c143",5533:"4e7e8a20",5689:"d0188ea3",5863:"2ab986e5",6164:"408492a1",6174:"f1dcacb9",7026:"031b39b7",7049:"df5618fa",7053:"86693754",7275:"edd061b6",7414:"1c40378b",7918:"61bcb5db",8425:"064c1066",8938:"141e8715",8957:"c86c876a",9042:"b9658663",9293:"b134c87a",9404:"a42d065d",9514:"e7329934",9671:"367e753d",9853:"69bbf936",9960:"9cadafb6"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},r="canine-docs:",d.l=(e,a,t,c)=>{if(f[e])f[e].push(a);else{var b,o;if(void 0!==t)for(var n=document.getElementsByTagName("script"),i=0;i{b.onerror=b.onload=null,clearTimeout(s);var r=f[e];if(delete f[e],b.parentNode&&b.parentNode.removeChild(b),r&&r.forEach((e=>e(t))),a)return a(t)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=l.bind(null,b.onerror),b.onload=l.bind(null,b.onload),o&&document.head.appendChild(b)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/",d.gca=function(e){return e={17896441:"7918","935f2afb":"53","344debb6":"54","29af3fe3":"92","03cdf430":"229",ab3acb2a:"604","5402824b":"1078","17b6a24f":"1092","3e125dc6":"1148",b46b7d8b:"1172","18a433c4":"1210","7d26c06c":"1232",d07de6bd:"1251","723cbd1b":"1344","65b97a36":"1770","9c403616":"1817",e1923b53:"1947",f1994572:"2782",f3769d49:"2891","1f391b9e":"3085",ea96f03c:"3298",e289ecfd:"3523",c4f5d8e4:"4195",c97fbebf:"4286","2edbca5e":"4512",ebbc57e7:"4808",c894e2df:"4878",c1147f98:"5202","5a6f97fe":"5275","5593d6f2":"5359","874276e5":"5533","8b564e48":"5689",bbf127f0:"5863","9093546b":"6164","23f3f2f9":"6174","259b7029":"7026","9718a321":"7049",b0580eac:"7053","7b9432de":"7275","393be207":"7414",b1fc7db6:"8425","5da52a1e":"8938","8a56e0ba":"8957","0558eea0":"9042","365ebb01":"9293",d07072fe:"9404","1be78505":"9514","0e384e19":"9671",a5b5e7c9:"9853",c933c35c:"9960"}[e]||e,d.p+d.u(e)},(()=>{var e={1303:0,532:0};d.f.j=(a,t)=>{var f=d.o(e,a)?e[a]:void 0;if(0!==f)if(f)t.push(f[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var r=new Promise(((t,r)=>f=e[a]=[t,r]));t.push(f[2]=r);var c=d.p+d.u(a),b=new Error;d.l(c,(t=>{if(d.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var r=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;b.message="Loading chunk "+a+" failed.\n("+r+": "+c+")",b.name="ChunkLoadError",b.type=r,b.request=c,f[1](b)}}),"chunk-"+a,a)}},d.O.j=a=>0===e[a];var a=(a,t)=>{var f,r,c=t[0],b=t[1],o=t[2],n=0;if(c.some((a=>0!==e[a]))){for(f in b)d.o(b,f)&&(d.m[f]=b[f]);if(o)var i=o(d)}for(a&&a(t);n{"use strict";var e,a,t,r,f,c={},b={};function d(e){var a=b[e];if(void 0!==a)return a.exports;var t=b[e]={id:e,loaded:!1,exports:{}};return c[e].call(t.exports,t,t.exports,d),t.loaded=!0,t.exports}d.m=c,d.c=b,e=[],d.O=(a,t,r,f)=>{if(!t){var c=1/0;for(i=0;i=f)&&Object.keys(d.O).every((e=>d.O[e](t[o])))?t.splice(o--,1):(b=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[t,r,f]},d.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return d.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var f=Object.create(null);d.r(f);var c={};a=a||[null,t({}),t([]),t(t)];for(var b=2&r&&e;"object"==typeof b&&!~a.indexOf(b);b=t(b))Object.getOwnPropertyNames(b).forEach((a=>c[a]=()=>e[a]));return c.default=()=>e,d.d(f,c),f},d.d=(e,a)=>{for(var t in a)d.o(a,t)&&!d.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((a,t)=>(d.f[t](e,a),a)),[])),d.u=e=>"assets/js/"+({53:"935f2afb",54:"344debb6",92:"29af3fe3",229:"03cdf430",604:"ab3acb2a",1078:"5402824b",1092:"17b6a24f",1148:"3e125dc6",1172:"b46b7d8b",1210:"18a433c4",1232:"7d26c06c",1251:"d07de6bd",1344:"723cbd1b",1770:"65b97a36",1817:"9c403616",1947:"e1923b53",2782:"f1994572",2891:"f3769d49",3085:"1f391b9e",3298:"ea96f03c",3523:"e289ecfd",4195:"c4f5d8e4",4286:"c97fbebf",4512:"2edbca5e",4808:"ebbc57e7",4878:"c894e2df",5202:"c1147f98",5275:"5a6f97fe",5359:"5593d6f2",5533:"874276e5",5689:"8b564e48",5863:"bbf127f0",6164:"9093546b",6174:"23f3f2f9",7026:"259b7029",7049:"9718a321",7053:"b0580eac",7275:"7b9432de",7414:"393be207",7918:"17896441",8425:"b1fc7db6",8938:"5da52a1e",8957:"8a56e0ba",9042:"0558eea0",9293:"365ebb01",9404:"d07072fe",9514:"1be78505",9671:"0e384e19",9853:"a5b5e7c9",9960:"c933c35c"}[e]||e)+"."+{53:"e8465805",54:"f6c185dc",92:"2c077e63",229:"d73494f5",604:"7d90b373",1078:"99445947",1092:"0bee5a84",1148:"d5941de6",1172:"21d76f7a",1210:"91e3ad46",1232:"2c4fc305",1251:"1e10924a",1344:"9d2fbd7a",1770:"b077fc11",1817:"207c9ed8",1947:"2c1e9c37",2666:"c0e3c62f",2782:"3c4b4d92",2891:"593fc0ed",3085:"63dfc29a",3298:"54015f3a",3523:"f8d883b5",4195:"d26c19ee",4286:"bceaa042",4512:"87f48177",4808:"1db563e5",4878:"12dc302d",4972:"1f3b4ce6",5202:"91bc9804",5275:"febd63e3",5359:"6c72c143",5533:"4e7e8a20",5689:"d0188ea3",5863:"2ab986e5",6164:"408492a1",6174:"f1dcacb9",7026:"031b39b7",7049:"df5618fa",7053:"86693754",7275:"edd061b6",7414:"1c40378b",7918:"61bcb5db",8425:"064c1066",8938:"141e8715",8957:"c86c876a",9042:"b9658663",9293:"b134c87a",9404:"a42d065d",9514:"e7329934",9671:"367e753d",9853:"69bbf936",9960:"9cadafb6"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r={},f="canine-docs:",d.l=(e,a,t,c)=>{if(r[e])r[e].push(a);else{var b,o;if(void 0!==t)for(var n=document.getElementsByTagName("script"),i=0;i{b.onerror=b.onload=null,clearTimeout(s);var f=r[e];if(delete r[e],b.parentNode&&b.parentNode.removeChild(b),f&&f.forEach((e=>e(t))),a)return a(t)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=l.bind(null,b.onerror),b.onload=l.bind(null,b.onload),o&&document.head.appendChild(b)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/",d.gca=function(e){return e={17896441:"7918","935f2afb":"53","344debb6":"54","29af3fe3":"92","03cdf430":"229",ab3acb2a:"604","5402824b":"1078","17b6a24f":"1092","3e125dc6":"1148",b46b7d8b:"1172","18a433c4":"1210","7d26c06c":"1232",d07de6bd:"1251","723cbd1b":"1344","65b97a36":"1770","9c403616":"1817",e1923b53:"1947",f1994572:"2782",f3769d49:"2891","1f391b9e":"3085",ea96f03c:"3298",e289ecfd:"3523",c4f5d8e4:"4195",c97fbebf:"4286","2edbca5e":"4512",ebbc57e7:"4808",c894e2df:"4878",c1147f98:"5202","5a6f97fe":"5275","5593d6f2":"5359","874276e5":"5533","8b564e48":"5689",bbf127f0:"5863","9093546b":"6164","23f3f2f9":"6174","259b7029":"7026","9718a321":"7049",b0580eac:"7053","7b9432de":"7275","393be207":"7414",b1fc7db6:"8425","5da52a1e":"8938","8a56e0ba":"8957","0558eea0":"9042","365ebb01":"9293",d07072fe:"9404","1be78505":"9514","0e384e19":"9671",a5b5e7c9:"9853",c933c35c:"9960"}[e]||e,d.p+d.u(e)},(()=>{var e={1303:0,532:0};d.f.j=(a,t)=>{var r=d.o(e,a)?e[a]:void 0;if(0!==r)if(r)t.push(r[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var f=new Promise(((t,f)=>r=e[a]=[t,f]));t.push(r[2]=f);var c=d.p+d.u(a),b=new Error;d.l(c,(t=>{if(d.o(e,a)&&(0!==(r=e[a])&&(e[a]=void 0),r)){var f=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;b.message="Loading chunk "+a+" failed.\n("+f+": "+c+")",b.name="ChunkLoadError",b.type=f,b.request=c,r[1](b)}}),"chunk-"+a,a)}},d.O.j=a=>0===e[a];var a=(a,t)=>{var r,f,c=t[0],b=t[1],o=t[2],n=0;if(c.some((a=>0!==e[a]))){for(r in b)d.o(b,r)&&(d.m[r]=b[r]);if(o)var i=o(d)}for(a&&a(t);n Jackal Foundation | Jackal Chain Docs - +

Jackal Foundation

What is the Jackal Foundation?

The Jackal Community is anchored by the Jackal Foundation. A non-profit organization that drives the direction of development by researching and testing software, supporting projects, and ensuring decentralization.

What is the scope of the Jackal Foundation?

  • Maintain the Jackal Protocol.

  • Fund ecosystem development.

  • Create and manage Jackal Collectives.

  • Manage the core governance of the Jackal Protocol.

  • Represent and enforce changes made through the governance process.

- + \ No newline at end of file diff --git a/docs/contributors/join.html b/docs/contributors/join.html index eca596b..7ee0b33 100644 --- a/docs/contributors/join.html +++ b/docs/contributors/join.html @@ -5,13 +5,13 @@ Join the Community! | Jackal Chain Docs - +

Join the Community!

The Jackal Community is open to all.

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.

To contribute; please join below.

- + \ No newline at end of file diff --git a/docs/contributors/labs.html b/docs/contributors/labs.html index b8caae7..15cd848 100644 --- a/docs/contributors/labs.html +++ b/docs/contributors/labs.html @@ -5,13 +5,13 @@ Jackal Labs | Jackal Chain Docs - +

Jackal Labs

Who is Jackal Labs?

Jackal Labs is a Canadian software development company that contributed to the early development of the Jackal Protocol. Jackal Labs does not own or operate the Jackal Protocol as it is decentralized and autonomous. Jackal Labs proposes changes to the Jackal Protocol through on-chain governance.

What is the scope of Jackal Labs?

  • Contribute to the early development of the Jackal Protocol.

  • Perform continuous research and development for the Protocol.

  • Propose changes to the protocol through governance.

- + \ No newline at end of file diff --git a/docs/ecosystem/bounties.html b/docs/ecosystem/bounties.html index 590c865..2c14364 100644 --- a/docs/ecosystem/bounties.html +++ b/docs/ecosystem/bounties.html @@ -5,13 +5,13 @@ Bounties | Jackal Chain Docs - +

Bounties

The Jackal Foundation often posts bounties which are tasks and projects that maintain the Jackal Protocol. Upon successful completion of a bounty, the reward will be released to the service provider. These bounties range in complexity from creating memes and blog publications to refactoring code.

TODO: To check out the Jackal Bounty Board, click HERE.

- + \ No newline at end of file diff --git a/docs/ecosystem/grants-funding.html b/docs/ecosystem/grants-funding.html index fa7c545..995f750 100644 --- a/docs/ecosystem/grants-funding.html +++ b/docs/ecosystem/grants-funding.html @@ -5,13 +5,13 @@ Grants and Funding | Jackal Chain Docs - +

Grants and Funding

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;

  • Research and Development
  • Infrastructure
  • Social Impact
  • dApps
  • Tooling
  • Services

For grants, applications will be reviewed based on the following criteria.

<100k100k - 200k200k+
One round of review.Two rounds of review.Interviews, formal committee review, full pitch.

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.

- + \ No newline at end of file diff --git a/docs/ecosystem/partnerships.html b/docs/ecosystem/partnerships.html index 7c7ce63..e0c4c62 100644 --- a/docs/ecosystem/partnerships.html +++ b/docs/ecosystem/partnerships.html @@ -5,13 +5,13 @@ Partnerships | Jackal Chain Docs - +

Partnerships

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.

- + \ No newline at end of file diff --git a/docs/explorer.html b/docs/explorer.html index 3294902..aef2839 100644 --- a/docs/explorer.html +++ b/docs/explorer.html @@ -5,13 +5,13 @@ Jackal Explorer | Jackal Chain Docs - +

Jackal Explorer

The Jackal Explorer is a “Light Explorer” that fetches data from Cosmos full node via LCD/RPC endpoints. This allows our users to explore transactions on the Jackal Blockchain.

TODO: Explorer How-To

Explorer Images

- + \ No newline at end of file diff --git a/docs/intro.html b/docs/intro.html index 9368f7c..eab1c38 100644 --- a/docs/intro.html +++ b/docs/intro.html @@ -5,13 +5,13 @@ Getting Started | Jackal Chain Docs - +

Getting Started

You’ve arrived at the Jackal Wiki! Thank you for taking the first steps towards a more secure, simple, and self-custodial digital experience.

The Jackal Protocol is open source and community-driven to facilitate a transparent and trustless system. This wiki is a one-stop shop with information on the protocol, usage, infrastructure, and opportunities.

The Jackal Wiki is maintained by Jackal Labs and the Jackal Foundation teams. We work tirelessly to maintain our documentation, but if you happen to stumble upon something out-of-date, please reach out to our teams so we can keep our documentation accurate in perpetuity.

- + \ No newline at end of file diff --git a/docs/nodes/nodes/hardware.html b/docs/nodes/nodes/hardware.html index d6a0819..7ff16d5 100644 --- a/docs/nodes/nodes/hardware.html +++ b/docs/nodes/nodes/hardware.html @@ -5,13 +5,13 @@ Hardware | Jackal Chain Docs - +

Hardware

We recommend a minimum hardware requirement of:

  • 4 Cores (modern CPU's)
  • 32GB RAM
  • 1TB of storage (SSD or NVME)

We also recommend running an Ubuntu LTS OS as that is what the binaries have been tested against.

- + \ No newline at end of file diff --git a/docs/nodes/nodes/installation.html b/docs/nodes/nodes/installation.html index b5c9b2e..7d792d9 100644 --- a/docs/nodes/nodes/installation.html +++ b/docs/nodes/nodes/installation.html @@ -5,13 +5,13 @@ Installing Canined | Jackal Chain Docs - +
-

Installing Canined

Pre-Requisites

There are a few things needed before installing.

Installing Build Essentials

sudo apt update
sudo apt install build-essential

Installing Go

Follow more in-depth instructions to install Go v1.19 or higher here.

On Ububtu you can install it with:

wget https://golang.org/dl/go1.19.3.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.19.3.linux-amd64.tar.gz

Add these lines to the end of ~/.profile:

export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export GO111MODULE=on
export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin

Restarting the shell with youre profile settings or just rebasing them like so is required.

source ~/.profile

Building from Source

git clone https://github.com/JackalLabs/canine-chain.git
cd canine-chain
git fetch
git checkout <VERSION>

make install

From there you will be able to use canined, ex:

canined version

Syncing to Current Height

Get a snapshot here.

For the sake of this guide, the snapshot we download is named jackal.tar.lz4

sudo snap install lz4
canined unsafe-reset-all --keep-addr-book
lz4 -c -d jackal.tar.lz4 | tar -x -C $HOME/.canine

Then start the chain again.

Versions for Sync

block heightcanined version
453811.1.2
01.1.0

Creating a Service

You may want the daemon to run without you needing to supervise it. To turn the executable into a service follow these steps.

cd $HOME
echo "[Unit]
Description=Jackal Node
After=network-online.target
[Service]
User=${USER}
ExecStart=$(which canined) start
Restart=always
RestartSec=3
LimitNOFILE=4096
[Install]
WantedBy=multi-user.target
" > canined.service

sudo mv canined.service /lib/systemd/system/
sudo systemctl enable canined.service

# Starting the service
sudo systemctl start canined.service

# Restarting the service
sudo systemctl daemon-reload
sudo systemctl restart canined.service
- +

Installing Canined

Pre-Requisites

There are a few things needed before installing.

tip

Perform the follow instructions as root or your admin account.

Installing required tools

This will install the necessary tools to build the jackal chain source, along with lz4 compression tool and jquery tool.

sudo apt update
sudo apt install build-essential lz4 jq

Installing Go

Follow more in-depth instructions to install Go v1.19 or higher here.

On Ububtu you can install it with:

GOVER=$(curl https://go.dev/VERSION?m=text)
wget https://golang.org/dl/${GOVER}.linux-amd64.tar.gz
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf ${GOVER}.linux-amd64.tar.gz

Add the following golang path info to the current users ~/.profile.

Also add it to the skeleton profile so all new users have it. /etc/skel/.profile

# add environmental variables for Go
if [ -f "/usr/local/go/bin/go" ] ; then
export GOROOT=/usr/local/go
export GOPATH=${HOME}/go
export GOBIN=$GOPATH/bin
export PATH=${PATH}:${GOROOT}/bin:${GOBIN}
export GO111MODULE=on
fi

Restarting the shell with youre profile settings or just rebasing them like so is required.

source ~/.profile

Firewall Configuration

Configure UFW to only accept traffic on ports we use.

ufw limit ssh/tcp comment 'Rate limit for openssh server'
ufw default deny incoming
ufw default allow outgoing
ufw allow 26656/tcp comment 'JACKAL - Cosmos SDK/Tendermint P2P'
ufw enable

Create Jackal user

sudo adduser --gecos "" jackal

Creating a Service

You may want the daemon to run without you needing to supervise it. To turn the executable into a service follow these steps.

First create the service file /etc/systemd/system/jackal.service

sudo nano /etc/systemd/system/jackal.service

Copy and paste the follow into the service file: (you may need to edit it if you've set a custom home directory location)

[Unit]
Description=Jackal Validator
After=network.target

[Service]
Group=jackal
User=jackal
WorkingDirectory=/home/jackal
ExecStart=/home/jackal/go/bin/canined start
Restart=on-failure
RestartSec=3
LimitNOFILE=8192

[Install]
WantedBy=multi-user.target

Update systemd and enable the service file.

sudo systemctl daemon-reload
sudo systemctl enable canined.service

Building from Source

tip

Perform the next follow steps as your jackal user

Replace <VERSION> with the current running version.

git clone https://github.com/JackalLabs/canine-chain.git
cd canine-chain
git fetch -a
git checkout <VERSION>

make install

From there you will be able to use canined, ex:

canined version
+ \ No newline at end of file diff --git a/docs/nodes/nodes/mainnet.html b/docs/nodes/nodes/mainnet.html index 897e56b..b5f46db 100644 --- a/docs/nodes/nodes/mainnet.html +++ b/docs/nodes/nodes/mainnet.html @@ -3,15 +3,16 @@ -Joining Mainnet | Jackal Chain Docs +Joining Mainnet | Jackal Chain Docs - +
-

Joining Mainnet

info

Mainnet goes live on October 26th 2022! If you are here before that, these docs will not work!

After installing canined. You can join the mainnet by following these steps:

canined init <alias> --chain-id=<chain-id>
note

chain-id for mainnet is currently jackal-1.

Then we want to replace our generated genesis file with the one used to start the network.

wget -O ~/.canine/config/genesis.json https://cdn.discordapp.com/attachments/1002389406650466405/1034968352591986859/updated_genesis2.json

SEEDS=$(wget https://raw.githubusercontent.com/JackalLabs/canine-mainnet-genesis/master/genesis/seeds.txt -q -O -)
PEERS=`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, -`
GAS="0.002ujkl"

sed -i.bak -e "s/^seeds *=.*/seeds = \"$SEEDS\"/; s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.canine/config/config.toml
- +

Joining Mainnet

tip

Perform the following as the jackal user.

After installing canined. You can join the mainnet by following these steps:

canined init "NODE_NAME" --chain-id=jackal-1

Then we want to replace our generated genesis file with the one used to start the network.

wget -O ~/.canine/config/genesis.json https://cdn.discordapp.com/attachments/1002389406650466405/1034968352591986859/updated_genesis2.json

SEEDS=$(wget https://raw.githubusercontent.com/JackalLabs/canine-mainnet-genesis/master/genesis/seeds.txt -q -O -)
PEERS=`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, -`
GAS="0.002ujkl"

sed -i.bak -e "s/^seeds *=.*/seeds = \"$SEEDS\"/; s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.canine/config/config.toml

Backing up key files

The created node_key.json and priv_validator_key.json cannot be recovered. These files must be backed up.

mkdir ~/key_backup
cp ~/.canine/config/node_key.json ~/key_backup
cp ~/.canine/config/priv_validator_key.json ~/key_backup

You should also keep an offline backup. Using a program like WinSCP, you can easily copy these files to your personal desktop for safe storage/backup.

Syncing to Current Height

Snapshot method

Get a snapshot here.

For the sake of this guide, the snapshot we download is named jackal.tar.lz4

If you plan on becoming a validator, before using the unsafe-reset-all flag, always besure to back up your priv_validator_state.json file.

canined unsafe-reset-all --keep-addr-book
lz4 -c -d jackal.tar.lz4 | tar -x -C $HOME/.canine

Then start the chain again.

State Sync Method

There are a couple of ways to go about doing state sync. +First is the easier route. Visit Ping.pub for Jackals State Sync configuration settings.

Next, copy these settings from Ping.pub to your config.toml in the [statesync] section.

It should look similar to this:

#######################################################
### State Sync Configuration Options ###
#######################################################
[statesync]
# State sync rapidly bootstraps a new node by discovering, fetching, and restoring a state machine
# snapshot from peers instead of fetching and replaying historical blocks. Requires some peers in
# the network to take and serve state machine snapshots. State sync is not attempted if the node
# has any local state (LastBlockHeight > 0). The node will have a truncated block history,
# starting from the height of the snapshot.
enable = true

# RPC servers (comma-separated) for light client verification of the synced state machine and
# retrieval of state data for node bootstrapping. Also needs a trusted height and corresponding
# header hash obtained from a trusted source, and a period during which validators can be trusted.
#
# For Cosmos SDK-based chains, trust_period should usually be about 2/3 of the unbonding time (~2
# weeks) during which they can be financially punished (slashed) for misbehavior.
rpc_servers = "https://rpc.jackalprotocol.com:443,https://rpc.jackalprotocol.com:443"
trust_height = 333000
trust_hash = "1685850c2d115a86af9059bd3f36a4fbbb0e8ba7f37863d517b6d2f54116daca"
trust_period = "168h" # 2/3 of unbonding time

# Time to spend discovering snapshots before initiating a restore.
discovery_time = "15s"

# Temporary directory for state sync snapshot chunks, defaults to the OS tempdir (typically /tmp).
# Will create a new, randomly named directory within, and remove it when done.
temp_dir = ""

# The timeout duration before re-requesting a chunk, possibly from a different
# peer (default: 1 minute).
chunk_request_timeout = "10s"

# The number of concurrent chunk fetchers to run (default: 1).
chunk_fetchers = "42"

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:

1PM INF Discovered new snapshot format=1 hash="S.�h�F���\"\x1d6+\x1e���ޅ��`v@�ц�����" height=1810000 module=statesync

It will download, verify, and apply chuncks of blockchain data. When it finishes you will see it catching up to blocks

State Sync Method 2

The follow commandline code will edit your config.toml with the proper information for state syncing to the most recent snapshot 3000 blocks and beyond.

STATE_SYNC_RPC=https://rpc.jackalprotocol.com:443
LATEST_HEIGHT=$(curl -s $STATE_SYNC_RPC/block | jq -r .result.block.header.height)
SYNC_BLOCK_HEIGHT=$(($LATEST_HEIGHT - 3000))
SYNC_BLOCK_HASH=$(curl -s "$STATE_SYNC_RPC/block?height=$SYNC_BLOCK_HEIGHT" | jq -r .result.block_id.hash)

sed -i.bak -e "s|^enable *=.*|enable = true|" $HOME/.teritorid/config/config.toml
sed -i.bak -e "s|^rpc_servers *=.*|rpc_servers = \"$STATE_SYNC_RPC,$STATE_SYNC_RPC\"|" \
$HOME/.teritorid/config/config.toml
sed -i.bak -e "s|^trust_height *=.*|trust_height = $SYNC_BLOCK_HEIGHT|" \
$HOME/.teritorid/config/config.toml
sed -i.bak -e "s|^trust_hash *=.*|trust_hash = \"$SYNC_BLOCK_HASH\"|" \
$HOME/.teritorid/config/config.toml

When you state sync, you can start with the latest version of canined.

Versions for Sync

block heightcanined version
453811.1.2
01.1.0

Starting the daemon

Start the daemon and sync to the current height.

sudo systemctl start jackal
sudo journalctl -u jackal -f

Watch the logs and ensure you are either state syncing correctly, or are syncing up to the current height.

+ \ No newline at end of file diff --git a/docs/nodes/nodes/testnet.html b/docs/nodes/nodes/testnet.html index af2263d..ab44e88 100644 --- a/docs/nodes/nodes/testnet.html +++ b/docs/nodes/nodes/testnet.html @@ -5,13 +5,13 @@ Joining Testnet | Jackal Chain Docs - +

Joining Testnet

After installing canined. You can join the testnet by following these steps:

canined init <alias> --chain-id=<chain-id>
note

chain-id for testnet is currently lupulella-2.

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.

For an updated list of peers & seeds, please check this page.

wget -O ~/.canine/config/genesis.json https://raw.githubusercontent.com/JackalLabs/jackal-chain-assets/main/testnet/genesis.json

export SEEDS="84f520678ef59ea02f942fa6323ec562ca5a3249@45.79.161.178:26656,cecc087977336da1e9ccd2c50097cd9e7d5e1874@141.95.33.39:26656"
sed -i.bak -e "s/^seeds *=.*/seeds = \"$SEEDS\"/" ~/.canine/config/config.toml

As a validator, you'll need to set a minimum gas price like so:

GAS="0.002ujkl"
sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"$GAS\"/" $HOME/.canine/config/app.toml
- + \ No newline at end of file diff --git a/docs/nodes/providers/building.html b/docs/nodes/providers/building.html index 58fbf85..f4fb508 100644 --- a/docs/nodes/providers/building.html +++ b/docs/nodes/providers/building.html @@ -5,13 +5,13 @@ Creating Provider | Jackal Chain Docs - +

Creating Provider

Disclaimer

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.

Setting up ZFS Without Mirroring

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.

List all drives with :

sudo fdisk -l

You should end up seeing something like this

...

Disk /dev/sda: 12.75 TiB, 14000519643136 bytes, 27344764928 sectors
Disk model: ST14000NM001G-2K
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 4DE192A1-7AFF-F64D-93D5-CA48B806DAA0

Disk /dev/sdb: 12.75 TiB, 14000519643136 bytes, 27344764928 sectors
Disk model: ST14000NM001G-2K
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: D2827F71-7F0A-EE4A-BB12-1B2172641DBE

...

Note down the Disk paths that you wish to use for your storage provider, in this case it is /dev/sdb and /dev/sda. Now we create a new pool as follows:

sudo zpool create {pool-name} /dev/sdb /dev/sda ...

This folder will now have the drives mounted at /{pool-name}. For more in-depth guides to using zfs, check out this page.

- + \ No newline at end of file diff --git a/docs/nodes/providers/setting_up.html b/docs/nodes/providers/setting_up.html index bea6aed..9f43b86 100644 --- a/docs/nodes/providers/setting_up.html +++ b/docs/nodes/providers/setting_up.html @@ -5,13 +5,13 @@ Setting Up Canined | Jackal Chain Docs - +

Setting Up Canined

Canined Init

We need to set up canine to live inside the mount point we just created as that is where all the files are stored.

info

The chain must be live on main-net to complete the following actions

export PHOME={path-to-pool-from-before}

jprovd client gen-key --home=$PHOME

jprovd config chain-id {chain-id} --home=$PHOME
jprovd config node {your node} --home=$PHOME

jprovd init {IP_ADDRESS} {STORAGE_IN_BYTES} {KEYBASE_IDENTITY} --home=$PHOME

jprovd start --home=$PHOME
- + \ No newline at end of file diff --git a/docs/nodes/validators/joining.html b/docs/nodes/validators/joining.html index 5af876b..4bc4b39 100644 --- a/docs/nodes/validators/joining.html +++ b/docs/nodes/validators/joining.html @@ -3,15 +3,15 @@ -Creating Validator | Jackal Chain Docs +Creating Validator | Jackal Chain Docs - +
-

Creating Validator

Disclaimer

This guide assumes you are using the same machine as the full node.

Setting Up

As a validator, you'll need to set a minimum gas price like so:

GAS="0.002ujkl"
sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"$GAS\"/" $HOME/.canine/config/app.toml
canined tx staking create-validator \
--amount 1000000ujkl \
--commission-max-change-rate 0.10 \
--commission-max-rate 0.2 \
--commission-rate 0.1 \
--from {WALLET_NAME} \
--min-self-delegation 1 \
--moniker {YOUR_MONIKER} \
--pubkey $(canined tendermint show-validator) \
--chain-id jackal-1 \
--gas-prices 0.02ujkl
- +

Creating Validator

tip

This guide assumes you are using the same machine as the full node.

Perform the following steps as your jackal user.

Creating A Wallet

We need to create a wallet and set the keyring password.

canined keys add WALLET_NAME --keyring-backend os

This wallet is used to claim rewards, commission and to vote as your validator.

You will see a similar output once created.

- name: WALLET_NAME
type: local
address: jkl1hjhglrzggqtdhsh3ag8jp0cckmva5pe976jxel
pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"Rnrlv1TNrt1cz3+pSq2UDNiJQZINNlgtkNousVlkugZ7"}'
mnemonic: ""


**Important** write this mnemonic phrase in a safe place.
It is the only way to recover your account if you ever forget your password.

some words forming mnemonic seed will be placed here you have to write them down and keep them safe

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 must be backed up. See the installation page for instructions.

You should also backup your keyring files.

Change WALLET_NAME to the name of your wallet.

mkdir ~/keyring_backup
cp ~/.canine/WALLET_NAME.info ~/keyring_backup
cp ~/.canine/keyhash ~/keyring_backup

Setting Up

Configure Gas Prices

As a validator, you'll need to set a minimum gas price like so:

GAS="0.02ujkl"
sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"$GAS\"/" $HOME/.canine/config/app.toml

Create Your Validator

Before continuing, please note that commission-max-change and commission-max-rate cannot be changed once you set them. Your commission-rate may be changed once per day.

There are a few things you will need to alter in this command. amount needs to be changed to what you are starting your self bond as. from needs to be the name of your wallet you created earlier. The moniker, details, identity, website, and security-contact should all be filled with the appropiate information.

canined tx staking create-validator \
--amount 1000000ujkl \
--commission-max-change-rate 0.10 \
--commission-max-rate 0.2 \
--commission-rate 0.1 \
--from WALLET_NAME \
--min-self-delegation 1 \
--moniker "YOUR_MONIKER" \
--details="YOUR DETAILS" \
--identity "PGP IDENTITY" \
--website="https://example.com" \
--security-contact="your-email@email.com" \
--pubkey $(canined tendermint show-validator) \
--chain-id jackal-1 \
--gas-prices 0.02ujkl
+ \ No newline at end of file diff --git a/docs/official-links/jackal-foundation.html b/docs/official-links/jackal-foundation.html index 0d46da0..1e13cef 100644 --- a/docs/official-links/jackal-foundation.html +++ b/docs/official-links/jackal-foundation.html @@ -5,13 +5,13 @@ Jackal Foundation Links | Jackal Chain Docs - +

Jackal Foundation Links

Here are the official website links for Jackal Foundation. Please use and bookmark these links to reduce the likelihood of cyber phishing threats.

Jackal Foundation

Jackal Foundation Twitter

Website: Coming Soon

- + \ No newline at end of file diff --git a/docs/official-links/jackal-labs.html b/docs/official-links/jackal-labs.html index 614696b..f88102b 100644 --- a/docs/official-links/jackal-labs.html +++ b/docs/official-links/jackal-labs.html @@ -5,13 +5,13 @@ Jackal Labs Links | Jackal Chain Docs - +

Jackal Labs Links

Here are the official website links for Jackal Labs. Please use and bookmark these links to reduce the likelihood of cyber phishing threats.

Jackal Labs

Jackal Labs Twitter

Website: Coming Soon

- + \ No newline at end of file diff --git a/docs/official-links/jackal-protocol.html b/docs/official-links/jackal-protocol.html index e2a70e7..4eef713 100644 --- a/docs/official-links/jackal-protocol.html +++ b/docs/official-links/jackal-protocol.html @@ -5,13 +5,13 @@ Jackal Protocol Links | Jackal Chain Docs - + - + \ No newline at end of file diff --git a/docs/overview/jackal-tldr.html b/docs/overview/jackal-tldr.html index b8c4c5b..fa1e261 100644 --- a/docs/overview/jackal-tldr.html +++ b/docs/overview/jackal-tldr.html @@ -5,13 +5,13 @@ What is the Jackal Protocol? | Jackal Chain Docs - +

What is the Jackal Protocol?

The Jackal Protocol is a fast, scalable, and secure blockchain that empowers individuals, developers, and enterprises to increase their data privacy and cybersecurity posture without sacrificing ease of use. This protocol strives to offer world-class applications to protect the planet’s most important data–your data.

Unlike other blockchains, the Jackal Protocol utilizes both validators and storage providers. The Jackal Protocol allows developers to build decentralized applications with the ability to interface with all Jackal Protocol Modules–including storage contracts and file structure. This allows developers to adjust the ownership of data, share data with other jackal users or smart contracts, and transfer small or large amounts of encrypted data without centralized storage providers or middleware. This data is always self-custodial meaning no one– not even the team at Jackal–can access or view your data.

This blockchain currently consists of seven modules: jklMint, lp, rns, wasm, storage, filetree and dsig. These interoperable modules allow for the creation of secure, scalable, and truly decentralized applications.

- + \ No newline at end of file diff --git a/docs/overview/jkl.html b/docs/overview/jkl.html index 058354e..c163e01 100644 --- a/docs/overview/jkl.html +++ b/docs/overview/jkl.html @@ -5,13 +5,13 @@ What is the JKL Token? | Jackal Chain Docs - +

What is the JKL Token?

The JKL Token is the native token that powers the infrastructure of the Jackal Protocol and can be applied in a multitude of different ways.

dApps

Applications built on the Jackal Protocol, such as Jackal Storage and the RNS Marketplace may choose to leverage the JKL token to expand its utility.

Securing the Network

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 staked tokens.

Transaction Fees

Transactions on the Jackal Protocol must be paid for using JKL. As the protocol is PoS, the cost of transactions is inexpensive.

Governance

Staked tokens grant on-chain governance participation within the Jackal Protocol to vote on text, software, spending, and other governance proposals.

Collateral

The JKL token can act as collateral for validators, storage providers, and other smart contract use cases.

Liquidity Provision

JKL can be allocated into a liquidity pool to earn JKL rewards.

- + \ No newline at end of file diff --git a/docs/overview/why-jackal.html b/docs/overview/why-jackal.html index 3c7952e..15d36a7 100644 --- a/docs/overview/why-jackal.html +++ b/docs/overview/why-jackal.html @@ -5,13 +5,13 @@ Why would I use the Jackal Protocol? | Jackal Chain Docs - +

Why would I use the Jackal Protocol?

Jackal users are empowered with a fast and scalable blockchain while having the ability to be self-custodial of their data. It may be hard to comprehend why many strive for high digital privacy and cyber security posture, so here is a community-compiled list of reasons people use the Jackal Protocol.

  • "I want a transparent, secure, and unified experience with web3."

  • "The same reason we think our phones are listening to us!"

  • "I want better cybersecurity but don’t want to change your passwords every month."

  • "Because I shouldn't have to give up ownership of all my personal information to access basic services on the Internet."

  • "I can't trust third parties that sell your data when 15 million people in the US alone experience identity theft with over 50 billion in financial losses!"

  • "Data breaches have exposed 14 billion of our records including passwords, usernames, emails, IP addresses, phone numbers, VINs, physical addresses, and more!"

  • "I believe in open-source, transparent, ethical and humane technology."

  • "It's empowering to own your data."

  • "Digital privacy is a fundamental human right and cybersecurity should be accessible to all."

  • "Third-party cookies or trackers are invasive and unnecessary."

  • "The only person that can sell my data is me."

- + \ No newline at end of file diff --git a/docs/protocol/encryption.html b/docs/protocol/encryption.html index 7b11a0b..6c305ae 100644 --- a/docs/protocol/encryption.html +++ b/docs/protocol/encryption.html @@ -5,13 +5,13 @@ Encryption | Jackal Chain Docs - +

Encryption

Jackal has two main features that rely on encryption techniques to keep user data private and secure. The two main models are file encryption and file-entry encryption. These reside in different locations within the protocol. The files themselves are stored on Storage Providers, which require files to be encrypted before they are transferred to those machines. The file entries are data structures living directly on-chain in the File Tree blockchain module, again needing to be encrypted on the client's device before being sent to the blockchain. The file encryption model is simply performed by taking the file as raw bytes and randomly generating a key in the user's client. This key is called a Symmetric Key. We then pass both the key and the file through AES256 encryption, which results in an encrypted file that can safely be sent to the Storage-Providers.

Protocol Overview

What is done with this key is equally important as the encryption performed on the file; if the key were made public, all encryption on the file itself would be naught. Therefore, we need to store this key somewhere safe and immutable. This safe place is the Jackal Chain, specifically the File Tree Module. The key is stored in the encrypted form alongside the file's location to make mapping each key to its respective file easy. To get this key into its encrypted form, we use an Integrated Encryption Scheme based on AES and the Elliptic Curve used to generate Bech32 Addresses [Reference]. To do this, the protocol takes a user's public key and encrypts the private key with it.

Protocol Overview

After this, the protocol ends up with an encrypted key that only the user whose public key was used can decrypt. When looking to decrypt a file, the process is reversed and instead uses the user's private key to decrypt the symmetric key. Following the retrieval of the symmetric key, we can decrypt the file stored on the Storage-Providers, leaving us with the originally uploaded file.

Protocol Overview

When sharing files, we can semi-repeat this process by first decrypting the key from the chain. Then we can grab the public key of an external user from the chain itself and encrypt the files with that key instead of our own. Finally, we append the newly encrypted symmetric key to the file entry giving that user access to the key.

- + \ No newline at end of file diff --git a/docs/protocol/modules/dsig.html b/docs/protocol/modules/dsig.html index 56a1f2f..6ade74b 100644 --- a/docs/protocol/modules/dsig.html +++ b/docs/protocol/modules/dsig.html @@ -5,13 +5,13 @@ dsig Module | Jackal Chain Docs - +

dsig Module

dsig

The dsig module is a digital signature service that allows users to collect signatures from multiple users who are registered on the Jackal Blockchain. Users can create 'forms' associated with a unique file stored on Jackal and can add signees (users) to collect their signatures. The signees have the following options to respond: Approve, Deny, Abstain, and No Response (Default). The form can execute a custom function after all users have voted to Approve the form.

- + \ No newline at end of file diff --git a/docs/protocol/modules/filetree.html b/docs/protocol/modules/filetree.html index 73fbf9c..d403a93 100644 --- a/docs/protocol/modules/filetree.html +++ b/docs/protocol/modules/filetree.html @@ -5,13 +5,13 @@ filetree Module | Jackal Chain Docs - +

filetree Module

Overview

The File Tree module is responsible for keeping records of a user's files and organizing them in a way that is accessible. When a user uploads a file using the Storage module, the file is only accessible from the File ID (FID) which makes the process clunky and obtuse to remember every file uploaded to Jackal. Furthermore, 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. The solution to this is a tree structure storing 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.

Protocol Overview

Folder Abstraction

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.

File Entry Structure

Storing file entries on-chain is a hurdle being that 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.

Protocol Overview

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 for edit access, editors can update the contents but nothing else.

Encrypted Viewing Access

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.

- + \ No newline at end of file diff --git a/docs/protocol/modules/jklmint.html b/docs/protocol/modules/jklmint.html index edb2848..4aaa71c 100644 --- a/docs/protocol/modules/jklmint.html +++ b/docs/protocol/modules/jklmint.html @@ -5,13 +5,13 @@ jklmint Module | Jackal Chain Docs - +

jklmint Module

jklmint

The Jackal Mint module is a replacement for the cosmos-sdk module: Mint. The key differences between this and the pre-existing minting module are that jklmint does not adjust inflation based on the rate of bonded tokens. At genesis, the jklmint module prints 10 JKL per block and distribute it to both the storage module and the default distribution module.

- + \ No newline at end of file diff --git a/docs/protocol/modules/lp.html b/docs/protocol/modules/lp.html index de84f5d..59a3473 100644 --- a/docs/protocol/modules/lp.html +++ b/docs/protocol/modules/lp.html @@ -5,13 +5,13 @@ lp Module | Jackal Chain Docs - +

lp Module

lp

The lp module allows for a native automated market maker (AMM) liquidity pools (LP) to be built directly into the Jackal Blockchain. This allows for local prices for payment mechanisms without the need for oracles, along with the ability to swap tokens directly from the Jackal dashboard or the Jackal Swap service.

- + \ No newline at end of file diff --git a/docs/protocol/modules/module-overview.html b/docs/protocol/modules/module-overview.html index 9fa8f12..05e9105 100644 --- a/docs/protocol/modules/module-overview.html +++ b/docs/protocol/modules/module-overview.html @@ -5,13 +5,13 @@ Module Overview | Jackal Chain Docs - + - + \ No newline at end of file diff --git a/docs/protocol/modules/rns.html b/docs/protocol/modules/rns.html index eff8a47..a273845 100644 --- a/docs/protocol/modules/rns.html +++ b/docs/protocol/modules/rns.html @@ -5,13 +5,13 @@ rns Module | Jackal Chain Docs - +

rns Module

rns

The rns module is a name service that allows users to manage human-readable names when interacting with the Jackal Blockchain. Users can register names, list names for sale, buy names on the marketplace, and place/accept bids from other users on their names.

- + \ No newline at end of file diff --git a/docs/protocol/modules/storage.html b/docs/protocol/modules/storage.html index 280bdd7..4bc7def 100644 --- a/docs/protocol/modules/storage.html +++ b/docs/protocol/modules/storage.html @@ -5,13 +5,13 @@ storage Module | Jackal Chain Docs - +

storage Module

storage

Jackal Storage functions by a Proof-of-Storage algorithm we call Proof-of-Persistence. The Jackal Proof-of-Persistence (JPOP) works 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. Miners, or as well call them, Storage Providers, are responsible for posting Merkle Proofs within a challenge window determined by the blockchain. These challenge windows require the miner to post the raw data chunk of data corresponding to the index of the challenge window alongside the required Merkle Hashes to prove the data belongs to the Merkle Root stored on the contract. These challenge indexes are chosen at random by the blockchain using a block-hash-based random number generator paired with a random data oracle.

If a Storage Provider successfully posts a Merkle Proof within the challenge window for the contract and the data is verified by the Validators to be valid Merkle Proofs for the challenge index, the Storage Provider is paid out. Storage Provider rewards are proportional to the file size the contract is associated with relative to every other active contract on the network. If a Storage Provider fails to provide a valid proof within the allotted timeframe, the contract is struck with a missed proof. After (X) missed proofs, the contract is burned, and the user is alerted the next time they query the contract. For every contract burned through missing proofs, the Storage Provider is struck with a penalty that remains on their record for a period of time adjustable through governance.

Interaction Outline

A user first sends a file to an available Storage Provider. A list of Storage Providers can be found on the blockchain, and providers can deny any incoming request if they wish not to store new files. The Storage Provider, after receiving the entire file, keeps that file in memory and posts a contract to the blockchain. If the contract is not signed by the sender in X blocks (configurable by the Storage Provider), then the file is removed from memory, and the contract is burned. However, if the contract is signed by the user within the given blocks, the file is committed to the Storage Provider's hard storage, and the challenge windows start being created for the now active contract.

- + \ No newline at end of file diff --git a/docs/protocol/modules/wasm.html b/docs/protocol/modules/wasm.html index 79cf0eb..d9edef3 100644 --- a/docs/protocol/modules/wasm.html +++ b/docs/protocol/modules/wasm.html @@ -5,13 +5,13 @@ wasm Module | Jackal Chain Docs - +

wasm Module

wasm

Jackal incorporates the CosmWasm smart contracting platform built for the Cosmos Ecosystem. The primary programing language used in this module is Rust for building secure and multichain smart contracts, yet any language that can be compiled into WASM can be supported as they become available.

- + \ No newline at end of file diff --git a/docs/protocol/p-o-p.html b/docs/protocol/p-o-p.html index ea76abf..7cd0d45 100644 --- a/docs/protocol/p-o-p.html +++ b/docs/protocol/p-o-p.html @@ -5,13 +5,13 @@ Jackal Proof-of-Persistence | Jackal Chain Docs - +

Jackal Proof-of-Persistence

Jackal Storage functions by a Proof-of-Storage algorithm we call Proof-of-Persistence. The Jackal Proof-of-Persistence (JPOP) works 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. Storage Providers are responsible for posting Merkle Proofs within a challenge window determined by the blockchain. These challenge windows require the provider to post the raw chunk of data corresponding to the index of the challenge window alongside the required Merkle Hashes to prove the data belongs to the Merkle Root stored on the contract. These challenge indexes are chosen at random by the blockchain using a block-hash-based random number generator paired with a random data oracle.

If a Storage Provider successfully posts a Merkle Proof within the challenge window for the contract and the data is verified by the Validators to be valid Merkle Proofs for the challenge index, the Storage Provider is paid out. Storage Provider rewards are proportional to the file size the contract is associated with relative to every other active contract on the network. If a Storage Provider fails to provide a valid proof within the allotted time frame, the contract is struck with a missed proof. After X missed proofs, the contract is burned, and the User is alerted the next time they query the contract. For every contract burned through missing proofs, the Storage Provider is struck with a penalty that remains on their record for a period of time adjustable through governance.

Building the Trees

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.

File Tree

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.

Merkle Roots

In the diagram above, displays how each file is hashed together to create a single root node.

Proving Data Availability

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.

Merkle Roots Graphed

- + \ No newline at end of file diff --git a/docs/protocol/storageproviders/casual-build.html b/docs/protocol/storageproviders/casual-build.html index 82dbd26..9afcb4e 100644 --- a/docs/protocol/storageproviders/casual-build.html +++ b/docs/protocol/storageproviders/casual-build.html @@ -5,13 +5,13 @@ Casual Storage Build | Jackal Chain Docs - +

Casual Storage Build

You may be successful contributing to the network with an old computer you may have. If you are looking to purpose build a machine- here are the recommendations for casual a storage provider.

ComponentRecommendationUnits
CPUAMD Ryzen 5 5600G 3.9 GHz 6-Core Processor.1
MotherboardMSI B450 Tomahawk Max ATX AM4 Motherboard.1
MemoryG.Skill Ripjaws V 32 GB (2 x 16 GB) DDR4-3200 CL 16 Memory1
StorageSeagate EXOS Enterprise 14 TB 3.5 7200 RPM Internal Hard Drive2
StorageKingston NV1 1 TB M.2-2280 NVME Solid State Drive1
CaseCooler Master HAF XB EVO ATX Desktop Case1
Power SupplyEVGA SuperNOVA GA 650 W 80+ Gold Certified Fully Modular ATX Power Supply1
Total Cost Estimate$1061.92 USD
- + \ No newline at end of file diff --git a/docs/protocol/storageproviders/diy-serious copy.html b/docs/protocol/storageproviders/diy-serious copy.html index 8927bfa..4f29641 100644 --- a/docs/protocol/storageproviders/diy-serious copy.html +++ b/docs/protocol/storageproviders/diy-serious copy.html @@ -5,13 +5,13 @@ DIY Serious Build | Jackal Chain Docs - +

DIY Serious Build

For DIY individuals looking to power web3 infrastructure and increase your ROI- here is the recommended system for serious individual storage providers.

ComponentRecommendationUnits
CPUAMD Ryzen 7 5700G 3.8 GHz 8-Core Processor1
MotherboardMSI B450 TOMAHAWK MAX II ATX AM4 Motherboard1
MemoryG.Skill Ripjaws V 64 GB (2 x 32 GB) DDR4-2666 CL18 Memory1
StorageKingston A400 960 GB 2.5" Solid State Drive1
StorageSeagate EXOS Enterprise 14 TB 3.5" 7200RPM Internal Hard Drive5
CaseCooler Master N400 ATX Mid Tower Case1
Power SupplyCorsair HX750 Platinum 750 W 80+ Platinum Certified Fully Modular ATX Power Supply1
Case FanNoctua S12B redux-700 33.49 CFM 120 mm Fan2
Total Cost Estimate$1814.08 USD
- + \ No newline at end of file diff --git a/docs/protocol/storageproviders/enterprise.html b/docs/protocol/storageproviders/enterprise.html index a8af56f..b8155f9 100644 --- a/docs/protocol/storageproviders/enterprise.html +++ b/docs/protocol/storageproviders/enterprise.html @@ -5,13 +5,13 @@ Enterprise Build | Jackal Chain Docs - +

Enterprise Build

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:

  • Power
  • Internet
  • HVAC
  • Professionals

Those looking to build an enterprise storage provider, reach out to the team for recommendations and support.

- + \ No newline at end of file diff --git a/docs/protocol/storageproviders/overview.html b/docs/protocol/storageproviders/overview.html index a85fec2..fc8b7ac 100644 --- a/docs/protocol/storageproviders/overview.html +++ b/docs/protocol/storageproviders/overview.html @@ -5,13 +5,13 @@ Overview | Jackal Chain Docs - +

Overview

Want to power the storage infrastructure for web3?

A Jackal Storage Provider is a dedicated web server optimized for data storage that accepts incoming files from users and creates contracts for the users to approve. These contracts last until the user either cancels them or the provider itself goes offline.

- + \ No newline at end of file diff --git a/docs/protocol/tokens.html b/docs/protocol/tokens.html index 37c727a..0293bb0 100644 --- a/docs/protocol/tokens.html +++ b/docs/protocol/tokens.html @@ -5,13 +5,13 @@ Tokens | Jackal Chain Docs - +

Tokens

JKL or Jackal

JKL is an inflationary token that powers the Jackal Protocol. The JKL Token has many use cases. Some of these use cases are below.

  • dApps - 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.

  • Securing the Network - 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.

  • Transaction Fees - Transactions on the Jackal Protocol must be paid for using JKL. As the protocol is PoS, the cost of transactions is inexpensive.

  • Governance - Staked tokens grant on-chain governance participation within the Jackal Protocol to vote on text, software, spend, and other governance proposals.

  • Collateral - The JKL token can act as collateral for validators, storage providers, and other smart contract use cases.

  • Liquidity Provision - JKL can be allocated into a liquidity pool to earn rewards.

JWL or Jewel

JWL is an L1 store-of-value token native to the Canine Blockchain. JWL tokens are immutable, meaning they can never be created, changed or destroyed. There is a finite amount of JWL that will be minted at the chain's genesis. Currently, there is no utility for the JWL token and it should be treated as such.

- + \ No newline at end of file diff --git a/docs/protocol/validators.html b/docs/protocol/validators.html index 1f4fbed..f57ca1b 100644 --- a/docs/protocol/validators.html +++ b/docs/protocol/validators.html @@ -5,13 +5,13 @@ Validators | Jackal Chain Docs - +

Validators

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.

To set up a validator and become a contributing part of the network, read the installation instructions here

- + \ No newline at end of file diff --git a/docs/using-jackal/dashboard.html b/docs/using-jackal/dashboard.html index 35cfc8a..0eeae48 100644 --- a/docs/using-jackal/dashboard.html +++ b/docs/using-jackal/dashboard.html @@ -5,13 +5,13 @@ Jackal Dashboard | Jackal Chain Docs - +

Jackal Dashboard

What is the Jackal Dashboard?

The Jackal Dashboard is your unified experience with the Jackal and Cosmos ecosystem. From the Jackal Dashboard, users can;

  • Upload, download, and share files.
  • Access the Jackal Swap interface to swap Cosmos native tokens.
  • Register RNS names.
  • Use the RNS marketplace.
  • Host static websites.
  • Participate in Governance.
  • Delegate tokens to validators.
  • More to come!

TODO: JACKAL DASHBOARD IMAGES AND HOW-TO

- + \ No newline at end of file diff --git a/docs/using-jackal/delegate.html b/docs/using-jackal/delegate.html index 3895b92..4068dbd 100644 --- a/docs/using-jackal/delegate.html +++ b/docs/using-jackal/delegate.html @@ -5,13 +5,13 @@ Staking | Jackal Chain Docs - + - + \ No newline at end of file diff --git a/docs/using-jackal/fund.html b/docs/using-jackal/fund.html index 88d3df7..011eaf0 100644 --- a/docs/using-jackal/fund.html +++ b/docs/using-jackal/fund.html @@ -5,13 +5,13 @@ Funding your Account | Jackal Chain Docs - + - + \ No newline at end of file diff --git a/docs/using-jackal/wallet/jackalwallet.html b/docs/using-jackal/wallet/jackalwallet.html index b246070..3c3fb8a 100644 --- a/docs/using-jackal/wallet/jackalwallet.html +++ b/docs/using-jackal/wallet/jackalwallet.html @@ -5,13 +5,13 @@ Jackal Wallet | Jackal Chain Docs - + - + \ No newline at end of file diff --git a/docs/using-jackal/wallet/keplr.html b/docs/using-jackal/wallet/keplr.html index 461628c..1d0413b 100644 --- a/docs/using-jackal/wallet/keplr.html +++ b/docs/using-jackal/wallet/keplr.html @@ -5,14 +5,14 @@ Keplr Wallet | Jackal Chain Docs - +

Keplr Wallet

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.

To use Jackal applications with a high privacy and security posture, create a new Jackal Wallet or import private keys into a Jackal Wallet.

Set up Keplr

More information about setting up a Keplr wallet can be found in the official Keplr Documentation.

Open the Keplr extension on your browser. If you are setting up Keplr for the first time, you can either create a new account or import an existing account.

Create a new account

There are two ways to create a new Keplr account:

Most Secure

  • Mnemonic/seed phrase.

Easiest

  • One-click login.

Create an account with a Seed Phrase

  1. In the initial pop-up window, choose Create New Account

    • If you have used Keplr before, click on the silhouette in the upper-right corner, then the blue box labeled Add Account, and select Create New Account.
  2. Choose to have a seed/mnemonic phrase of 24 words, and save the phrase.

  3. Enter a name for your account. This can be changed later.

  4. Once you have transcribed your 24 word seed/mnemonic phrase, click on Next

  5. 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 Register.

  6. If you have not used Keplr before, set a password for the Keplr extension, and click Confirm.

Import an existing account

There are several ways to import an existing account:

  • via a mnemonic/seed phrase/private key.
  • via ledger.

Import with a Seed Phrase

  1. In the initial pop-up window, choose Import Existing Account If you have used Keplr before, click on the silhouette in the upper-right corner, then the blue box labeled Add Account, and select Import Existing Account.

  2. 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.

  3. Make sure you have imported the account with the correct derivation path, viewable by clicking on Advanced.

    • Normally, the derivation path should be m/44'/…’/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.

    • If this is the case, you just have to start the process over, and replace the last 0 with 1

    • Learn more in the Keplr FAQ

  4. If you have not used Keplr before, set a password for the Keplr extension, and click Confirm.

Import with Ledger

  1. In the initial pop-up window, choose Import Ledger.

    • If you have used Keplr before, click on the silhouette in the upper-right corner, then the blue box labeled Add Account, and select Import Ledger.
  2. 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 here.

  3. If you have not used Keplr before, set a password for the Keplr extension, and click Confirm.

Connecting Keplr to the Jackal Protocol

Once you are signed in to the Keplr extension, you can connect the wallet with the Jackal Protocol. Once on the Jackal Dashboard you will be prompted to connect your Keplr wallet.

- + \ No newline at end of file diff --git a/index.html b/index.html index e188020..f3b50b5 100644 --- a/index.html +++ b/index.html @@ -5,13 +5,13 @@ Jackal Chain Docs | Jackal Chain Docs - + - + \ No newline at end of file diff --git a/markdown-page.html b/markdown-page.html index b555562..e21fb77 100644 --- a/markdown-page.html +++ b/markdown-page.html @@ -5,13 +5,13 @@ Markdown page example | Jackal Chain Docs - +

Markdown page example

You don't need React to write simple standalone pages.

- + \ No newline at end of file