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.
diff --git a/404.html b/404.html index b658504f9..a47546987 100644 --- a/404.html +++ b/404.html @@ -1,17 +1,14 @@ - +
- -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.
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.
["'])(?.*?)\1/,h=/\{(? [\d,-]+)\}/,y={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}};function b(e,t){const n=e.map((e=>{const{start:n,end:o}=y[e];return`(?:${n}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${o})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function v(e,t){let n=e.replace(/\n$/,"");const{language:o,magicComments:a,metastring:r}=t;if(r&&h.test(r)){const e=r.match(h).groups.range;if(0===a.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${r}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=a[0].className,o=f()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(o),code:n}}if(void 0===o)return{lineClassNames:{},code:n};const c=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return b(["js","jsBlock"],t);case"jsx":case"tsx":return b(["js","jsBlock","jsx"],t);case"html":return b(["js","jsBlock","html"],t);case"python":case"py":case"bash":return b(["bash"],t);case"markdown":case"md":return b(["html","jsx","bash"],t);default:return b(Object.keys(y),t)}}(o,a),l=n.split("\n"),i=Object.fromEntries(a.map((e=>[e.className,{start:0,range:""}]))),s=Object.fromEntries(a.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),u=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),m=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let p=0;p void 0!==e));s[t]?i[s[t]].range+=`${p},`:u[t]?i[u[t]].start=p:m[t]&&(i[m[t]].range+=`${i[m[t]].start}-${p-1},`),l.splice(p,1)}n=l.join("\n");const d={};return Object.entries(i).forEach((e=>{let[t,{range:n}]=e;f()(n).forEach((e=>{d[e]??=[],d[e].push(t)}))})),{lineClassNames:d,code:n}}const E={codeBlockContainer:"codeBlockContainer_Ckt0"};function k(e){let{as:t,...n}=e;const a=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[o,a]=e;const r=t[o];r&&"string"==typeof a&&(n[r]=a)})),n}(m());return o.createElement(t,(0,r.Z)({},n,{style:a,className:(0,i.Z)(n.className,E.codeBlockContainer,d.k.common.codeBlock)}))}const N={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function C(e){let{children:t,className:n}=e;return o.createElement(k,{as:"pre",tabIndex:0,className:(0,i.Z)(N.codeBlockStandalone,"thin-scrollbar",n)},o.createElement("code",{className:N.codeBlockLines},t))}var w=n(3768);const B={attributes:!0,characterData:!0,childList:!0,subtree:!0};function Z(e,t){const[n,a]=(0,o.useState)(),r=(0,o.useCallback)((()=>{a(e.current?.closest("[role=tabpanel][hidden]"))}),[e,a]);(0,o.useEffect)((()=>{r()}),[r]),function(e,t,n){void 0===n&&(n=B);const a=(0,w.zX)(t),r=(0,w.Ql)(n);(0,o.useEffect)((()=>{const t=new MutationObserver(a);return e&&t.observe(e,r),()=>t.disconnect()}),[e,a,r])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),r())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}const T={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]};var L={Prism:n(7410).Z,theme:T};function _(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function j(){return j=Object.assign||function(e){for(var t=1;t 0&&e[n-1]===t?e:e.concat(t)};function P(e,t){var n={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&-1===t.indexOf(o)&&(n[o]=e[o]);return n}var z=function(e){function t(){for(var t=this,n=[],o=arguments.length;o--;)n[o]=arguments[o];e.apply(this,n),_(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var n=e.theme?function(e,t){var n=e.plain,o=Object.create(null),a=e.styles.reduce((function(e,n){var o=n.languages,a=n.style;return o&&!o.includes(t)||n.types.forEach((function(t){var n=j({},e[t],a);e[t]=n})),e}),o);return a.root=n,a.plain=j({},n,{backgroundColor:null}),a}(e.theme,e.language):void 0;return t.themeDict=n})),_(this,"getLineProps",(function(e){var n=e.key,o=e.className,a=e.style,r=j({},P(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),c=t.getThemeDict(t.props);return void 0!==c&&(r.style=c.plain),void 0!==a&&(r.style=void 0!==r.style?j({},r.style,a):a),void 0!==n&&(r.key=n),o&&(r.className+=" "+o),r})),_(this,"getStyleForToken",(function(e){var n=e.types,o=e.empty,a=n.length,r=t.getThemeDict(t.props);if(void 0!==r){if(1===a&&"plain"===n[0])return o?{display:"inline-block"}:void 0;if(1===a&&!o)return r[n[0]];var c=o?{display:"inline-block"}:{},l=n.map((function(e){return r[e]}));return Object.assign.apply(Object,[c].concat(l))}})),_(this,"getTokenProps",(function(e){var n=e.key,o=e.className,a=e.style,r=e.token,c=j({},P(e,["key","className","style","token"]),{className:"token "+r.types.join(" "),children:r.content,style:t.getStyleForToken(r),key:void 0});return void 0!==a&&(c.style=void 0!==c.style?j({},c.style,a):a),void 0!==n&&(c.key=n),o&&(c.className+=" "+o),c})),_(this,"tokenize",(function(e,t,n,o){var a={code:t,grammar:n,language:o,tokens:[]};e.hooks.run("before-tokenize",a);var r=a.tokens=e.tokenize(a.code,a.grammar,a.language);return e.hooks.run("after-tokenize",a),r}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,n=e.language,o=e.code,a=e.children,r=this.getThemeDict(this.props),c=t.languages[n];return a({tokens:function(e){for(var t=[[]],n=[e],o=[0],a=[e.length],r=0,c=0,l=[],i=[l];c>-1;){for(;(r=o[c]++)0?u:["plain"],s=m):(u=S(u,m.type),m.alias&&(u=S(u,m.alias)),s=m.content),"string"==typeof s){var d=s.split(x),p=d.length;l.push({types:u,content:d[0]});for(var f=1;f o.createElement("span",(0,r.Z)({key:t},l({token:e,key:t})))));return o.createElement("span",s,a?o.createElement(o.Fragment,null,o.createElement("span",{className:I.codeLineNumber}),o.createElement("span",{className:I.codeLineContent},u)):u,o.createElement("br",null))}var M=n(7325);function H(e){return o.createElement("svg",(0,r.Z)({viewBox:"0 0 24 24"},e),o.createElement("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"}))}function D(e){return o.createElement("svg",(0,r.Z)({viewBox:"0 0 24 24"},e),o.createElement("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}))}const V={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function R(e){let{code:t,className:n}=e;const[a,r]=(0,o.useState)(!1),c=(0,o.useRef)(void 0),l=(0,o.useCallback)((()=>{!function(e,t){let{target:n=document.body}=void 0===t?{}:t;if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const o=document.createElement("textarea"),a=document.activeElement;o.value=e,o.setAttribute("readonly",""),o.style.contain="strict",o.style.position="absolute",o.style.left="-9999px",o.style.fontSize="12pt";const r=document.getSelection(),c=r.rangeCount>0&&r.getRangeAt(0);n.append(o),o.select(),o.selectionStart=0,o.selectionEnd=e.length;let l=!1;try{l=document.execCommand("copy")}catch{}o.remove(),c&&(r.removeAllRanges(),r.addRange(c)),a&&a.focus()}(t),r(!0),c.current=window.setTimeout((()=>{r(!1)}),1e3)}),[t]);return(0,o.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),o.createElement("button",{type:"button","aria-label":a?(0,M.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,M.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,M.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,V.copyButton,a&&V.copyButtonCopied),onClick:l},o.createElement("span",{className:V.copyButtonIcons,"aria-hidden":"true"},o.createElement(H,{className:V.copyButtonIcon}),o.createElement(D,{className:V.copyButtonSuccessIcon})))}function $(e){return o.createElement("svg",(0,r.Z)({viewBox:"0 0 24 24"},e),o.createElement("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"}))}const F={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function q(e){let{className:t,onClick:n,isEnabled:a}=e;const r=(0,M.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return o.createElement("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",t,a&&F.wordWrapButtonEnabled),"aria-label":r,title:r},o.createElement($,{className:F.wordWrapButtonIcon,"aria-hidden":"true"}))}function G(e){let{children:t,className:n="",metastring:a,title:c,showLineNumbers:l,language:s}=e;const{prism:{defaultLanguage:d,magicComments:p}}=(0,u.L)(),f=s??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return t?.replace(/language-/,"")}(n)??d,h=m(),y=function(){const[e,t]=(0,o.useState)(!1),[n,a]=(0,o.useState)(!1),r=(0,o.useRef)(null),c=(0,o.useCallback)((()=>{const n=r.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[r,e]),l=(0,o.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=r.current,n=e>t||r.current.querySelector("code").hasAttribute("style");a(n)}),[r]);return Z(r,l),(0,o.useEffect)((()=>{l()}),[e,l]),(0,o.useEffect)((()=>(window.addEventListener("resize",l,{passive:!0}),()=>{window.removeEventListener("resize",l)})),[l]),{codeBlockRef:r,isEnabled:e,isCodeScrollable:n,toggle:c}}(),b=function(e){return e?.match(g)?.groups.title??""}(a)||c,{lineClassNames:E,code:C}=v(t,{metastring:a,language:f,magicComments:p}),w=l??function(e){return Boolean(e?.includes("showLineNumbers"))}(a);return o.createElement(k,{as:"div",className:(0,i.Z)(n,f&&!n.includes(`language-${f}`)&&`language-${f}`)},b&&o.createElement("div",{className:N.codeBlockTitle},b),o.createElement("div",{className:N.codeBlockContent},o.createElement(A,(0,r.Z)({},L,{theme:h,code:C,language:f??"text"}),(e=>{let{className:t,tokens:n,getLineProps:a,getTokenProps:r}=e;return o.createElement("pre",{tabIndex:0,ref:y.codeBlockRef,className:(0,i.Z)(t,N.codeBlock,"thin-scrollbar")},o.createElement("code",{className:(0,i.Z)(N.codeBlockLines,w&&N.codeBlockLinesWithNumbering)},n.map(((e,t)=>o.createElement(W,{key:t,line:e,getLineProps:a,getTokenProps:r,classNames:E[t],showLineNumbers:w})))))})),o.createElement("div",{className:N.buttonGroup},(y.isEnabled||y.isCodeScrollable)&&o.createElement(q,{className:N.codeButton,onClick:()=>y.toggle(),isEnabled:y.isEnabled}),o.createElement(R,{className:N.codeButton,code:C}))))}function U(e){let{children:t,...n}=e;const a=(0,l.Z)(),c=function(e){return o.Children.toArray(e).some((e=>(0,o.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),i="string"==typeof c?G:C;return o.createElement(i,(0,r.Z)({key:String(a)},n),c)}var Q=n(3699);var X=n(4639);const Y={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function J(e){return!!e&&("SUMMARY"===e.tagName||J(e.parentElement))}function K(e,t){return!!e&&(e===t||K(e.parentElement,t))}function ee(e){let{summary:t,children:n,...a}=e;const c=(0,l.Z)(),s=(0,o.useRef)(null),{collapsed:u,setCollapsed:m}=(0,X.u)({initialState:!a.open}),[d,p]=(0,o.useState)(a.open),f=o.isValidElement(t)?t:o.createElement("summary",null,t??"Details");return o.createElement("details",(0,r.Z)({},a,{ref:s,open:d,"data-collapsed":u,className:(0,i.Z)(Y.details,c&&Y.isBrowser,a.className),onMouseDown:e=>{J(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;J(t)&&K(t,s.current)&&(e.preventDefault(),u?(m(!1),p(!0)):m(!0))}}),f,o.createElement(X.z,{lazy:!1,collapsed:u,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{m(e),p(!e)}},o.createElement("div",{className:Y.collapsibleContent},n)))}const te={details:"details_b_Ee"},ne="alert alert--info";function oe(e){let{...t}=e;return o.createElement(ee,(0,r.Z)({},t,{className:(0,i.Z)(ne,te.details,t.className)}))}var ae=n(3899);function re(e){return o.createElement(ae.Z,e)}const ce={containsTaskList:"containsTaskList_mC6p"};const le={img:"img_ev3q"};const ie="admonition_LlT9",se="admonitionHeading_tbUL",ue="admonitionIcon_kALy",me="admonitionContent_S0QG";const de={note:{infimaClassName:"secondary",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 14 16"},o.createElement("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"}))},label:o.createElement(M.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:"success",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 12 16"},o.createElement("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))},label:o.createElement(M.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:"danger",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 12 16"},o.createElement("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"}))},label:o.createElement(M.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:"info",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 14 16"},o.createElement("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))},label:o.createElement(M.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:"warning",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 16 16"},o.createElement("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))},label:o.createElement(M.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},pe={secondary:"note",important:"info",success:"tip",warning:"danger"};function fe(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=o.Children.toArray(e),n=t.find((e=>o.isValidElement(e)&&"mdxAdmonitionTitle"===e.props?.mdxType)),a=o.createElement(o.Fragment,null,t.filter((e=>e!==n)));return{mdxAdmonitionTitle:n,rest:a}}(e.children);return{...e,title:e.title??t,children:n}}const ge={head:function(e){const t=o.Children.map(e.children,(e=>o.isValidElement(e)?function(e){if(e.props?.mdxType&&e.props.originalType){const{mdxType:t,originalType:n,...a}=e.props;return o.createElement(e.props.originalType,a)}return e}(e):e));return o.createElement(c.Z,e,t)},code:function(e){const t=["a","abbr","b","br","button","cite","code","del","dfn","em","i","img","input","ins","kbd","label","object","output","q","ruby","s","small","span","strong","sub","sup","time","u","var","wbr"];return o.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")||(0,o.isValidElement)(e)&&t.includes(e.props?.mdxType)))?o.createElement("code",e):o.createElement(U,e)},a:function(e){return o.createElement(Q.Z,e)},pre:function(e){return o.createElement(U,(0,o.isValidElement)(e.children)&&"code"===e.children.props?.originalType?e.children.props:{...e})},details:function(e){const t=o.Children.toArray(e.children),n=t.find((e=>o.isValidElement(e)&&"summary"===e.props?.mdxType)),a=o.createElement(o.Fragment,null,t.filter((e=>e!==n)));return o.createElement(oe,(0,r.Z)({},e,{summary:n}),a)},ul:function(e){return o.createElement("ul",(0,r.Z)({},e,{className:(t=e.className,(0,i.Z)(t,t?.includes("contains-task-list")&&ce.containsTaskList))}));var t},img:function(e){return o.createElement("img",(0,r.Z)({loading:"lazy"},e,{className:(t=e.className,(0,i.Z)(t,le.img))}));var t},h1:e=>o.createElement(re,(0,r.Z)({as:"h1"},e)),h2:e=>o.createElement(re,(0,r.Z)({as:"h2"},e)),h3:e=>o.createElement(re,(0,r.Z)({as:"h3"},e)),h4:e=>o.createElement(re,(0,r.Z)({as:"h4"},e)),h5:e=>o.createElement(re,(0,r.Z)({as:"h5"},e)),h6:e=>o.createElement(re,(0,r.Z)({as:"h6"},e)),admonition:function(e){const{children:t,type:n,title:a,icon:r}=fe(e),c=function(e){const t=pe[e]??e,n=de[t];return n||(console.warn(`No admonition config found for admonition type "${t}". Using Info as fallback.`),de.info)}(n),l=a??c.label,{iconComponent:s}=c,u=r??o.createElement(s,null);return o.createElement("div",{className:(0,i.Z)(d.k.common.admonition,d.k.common.admonitionType(e.type),"alert",`alert--${c.infimaClassName}`,ie)},o.createElement("div",{className:se},o.createElement("span",{className:ue},u),l),o.createElement("div",{className:me},t))},mermaid:()=>null};function he(e){let{children:t}=e;return o.createElement(a.Zo,{components:ge},t)}},3672:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var o=n(7294),a=n(6010),r=n(3699);function c(e){const{permalink:t,title:n,subLabel:c,isNext:l}=e;return o.createElement(r.Z,{className:(0,a.Z)("pagination-nav__link",l?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t},c&&o.createElement("div",{className:"pagination-nav__sublabel"},c),o.createElement("div",{className:"pagination-nav__label"},n))}},3852:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var o=n(7294),a=n(6010),r=n(3699);const c={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function l(e){let{permalink:t,label:n,count:l}=e;return o.createElement(r.Z,{href:t,className:(0,a.Z)(c.tag,l?c.tagWithCount:c.tagRegular)},n,l&&o.createElement("span",null,l))}},4597:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var o=n(7294),a=n(6010),r=n(7325),c=n(3852);const l={tags:"tags_jXut",tag:"tag_QGVx"};function i(e){let{tags:t}=e;return o.createElement(o.Fragment,null,o.createElement("b",null,o.createElement(r.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),o.createElement("ul",{className:(0,a.Z)(l.tags,"padding--none","margin-left--sm")},t.map((e=>{let{label:t,permalink:n}=e;return o.createElement("li",{key:n,className:l.tag},o.createElement(c.Z,{label:t,permalink:n}))}))))}},7594:(e,t)=>{function n(e){let t,n=[];for(let o of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(o))n.push(parseInt(o,10));else if(t=o.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,o,a,r]=t;if(o&&r){o=parseInt(o),r=parseInt(r);const e=o
{n.d(t,{Zo:()=>p,kt:()=>k});var i=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function o(e){for(var t=1;t =0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=i.createContext({}),c=function(e){var t=i.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=c(e.components);return i.createElement(s.Provider,{value:t},e.children)},m="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},d=i.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),m=c(n),d=a,k=m["".concat(s,".").concat(d)]||m[d]||u[d]||r;return n?i.createElement(k,o(o({ref:t},p),{},{components:n})):i.createElement(k,o({ref:t},p))}));function k(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,o=new Array(r);o[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[m]="string"==typeof e?e:a,o[1]=l;for(var c=2;c {n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var i=n(7462),a=(n(7294),n(4137));const r={},o="Metrics Collected by Ethical Metrics",l={unversionedId:"user/ethical-metrics/metrics",id:"user/ethical-metrics/metrics",title:"Metrics Collected by Ethical Metrics",description:"Dappnode has absolutely no hidden telemetry and is completely private by design. We were reluctant of setting up a monitoring service because we did NOT want to collect any data from our users. Because of our community's continuous requests to offer alerts, we came up with a solution that doesn't compromise your privacy.",source:"@site/docs/user/ethical-metrics/metrics.md",sourceDirName:"user/ethical-metrics",slug:"/user/ethical-metrics/metrics",permalink:"/docs/user/ethical-metrics/metrics",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/ethical-metrics/metrics.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Setting up Ethical Metrics",permalink:"/docs/user/ethical-metrics/setup"},next:{title:"Troubleshooting",permalink:"/docs/user/ethical-metrics/troubleshooting"}},s={},c=[{value:"Dappnode host metrics",id:"dappnode-host-metrics",level:2},{value:"Dappmanager metrics",id:"dappmanager-metrics",level:2},{value:"Staking Metrics",id:"staking-metrics",level:2}],p={toc:c},m="wrapper";function u(e){let{components:t,...n}=e;return(0,a.kt)(m,(0,i.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"metrics-collected-by-ethical-metrics"},"Metrics Collected by Ethical Metrics"),(0,a.kt)("p",null,"Dappnode has absolutely no hidden telemetry and is completely private by design. We were reluctant of setting up a monitoring service because we did NOT want to collect any data from our users. Because of our community's continuous requests to offer alerts, we came up with a solution that doesn't compromise your privacy."),(0,a.kt)("p",null,"Even if we can't link the metrics from your Dappnode to your identity, ",(0,a.kt)("strong",{parentName:"p"},"we are fully committed to maintain total transparency about the metrics we collect from your Dappnode when using Ethical Metrics"),". We want you to have a clear understanding of the information that is being monitored. The metrics we collect fall into several categories. Here's an overview of the metrics we gather."),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"These metrics also help us better allocate resources by knowing what our users are running on their Dappnodes. This way, we can better understand which packages are the most popular and which ones need improvement.")),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},"Ethical Metrics is one of our newest packages and it is still under constant improvement. This section will be updated as we add or remove metrics.")),(0,a.kt)("h2",{id:"dappnode-host-metrics"},"Dappnode host metrics"),(0,a.kt)("p",null,"These are all the metrics related directly to the host machine running your Dappnode. All of these metrics are collected by the Dappnode Exporter package."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"node_cpu_seconds_total"),": Total CPU usage in seconds by the node."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"container_memory_usage_bytes"),": Memory usage in bytes by containers."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"container_memory_cache"),": Memory cache usage by containers."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"node_memory_MemTotal_bytes"),": Total memory available in bytes on the node."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"node_memory_MemFree_bytes"),": Free memory in bytes on the node."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"node_memory_Buffers_bytes"),": Memory used for buffers in bytes on the node."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"node_memory_Cached_bytes"),": Cached memory in bytes on the node."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"node_disk_io_time_seconds_total"),": Total disk I/O time in seconds on the node."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"node_disk_reads_completed_total"),": Total completed disk reads on the node."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"node_disk_writes_completed_total"),": Total completed disk writes on the node."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"container_fs_usage_bytes"),": Filesystem usage by containers in bytes."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"node_filesystem_size_bytes"),": Total size of the filesystem in bytes on the node."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"node_filesystem_free_bytes"),": Free space in the filesystem in bytes on the node."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"container_last_seen"),": Timestamp of the last seen container."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"cadvisor_version_info"),": Information about the cAdvisor version."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"container_cpu_usage_seconds_total"),": Total CPU usage in seconds by containers.")),(0,a.kt)("h2",{id:"dappmanager-metrics"},"Dappmanager metrics"),(0,a.kt)("p",null,"The following are all the metrics related to your Dappnode's configuration. These are all stored in your Dappmanager."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"dappmmanager_staker_config"),": Your current staking package."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"dappmanager_ipfs_client_target_local"),": Wether IPFS client is in local or remote mode."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"dappmanager_eth_fallback_enabled"),": Wether the ethereum fallback client is enabled."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"dappmanager_eth_client_target_local"),": Wether ethereum client is in local or remote mode."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"dappmanager_auto_updates_user_packages"),": Wether auto updates for user packages is enabled."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"dappmanager_auto_updates_system_packages"),": Wether auto updates for system packages is enabled."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"dappmanager_host_info"),": Details including Docker and Docker Compose versions, kernel version, operating system version, and architecture type.")),(0,a.kt)("h2",{id:"staking-metrics"},"Staking Metrics"),(0,a.kt)("p",null,"The following metrics are all related directly to the staking packages, including Web3Signer."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"eth2_slashingprotection_prevented_signings"),": Number of prevented slashing signings."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"signing_signers_loaded_count"),": Count of loaded validators signing in web3signer."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"signing_bls_signing_duration"),": Duration of BLS signing."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"signing_bls_signing_duration_count"),": Count of BLS signing durations."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"signing_bls_signing_duration_sum"),": Sum of BLS signing durations."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"signing_bls_missing_identifier_count"),": Count of missing BLS identifier."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"api_rpc_cons_peers"),": Number of connected peers to your staking execution clients."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"api_rpc_exec_peers"),": Number of connected peers to your staking consensus clients."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"api_rpc_cons_syncing"),": Wether your staking execution clients are syncing."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"api_rpc_exec_syncing"),": Wether your staking consensus clients are syncing.")),(0,a.kt)("p",null,"To sum it up, the metrics we collect give us a peek into how your Dappnode is doing overall, how it allocates resources, memory, disk, and even info related to staking performance."),(0,a.kt)("p",null,"Your privacy is of utmost importance to us. Remember that all this data transmission occurs through the TOR network to protect your privacy."),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},"For any questions or concerns about the metrics collected by Ethical Metrics, feel free to reach out to our support team.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/25229465.91651391.js b/assets/js/25229465.91651391.js new file mode 100644 index 000000000..265a6235c --- /dev/null +++ b/assets/js/25229465.91651391.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4952],{6639:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var i=s(5893),t=s(1151);const o={},r="Metrics Collected by Ethical Metrics",c={id:"user/ethical-metrics/metrics",title:"Metrics Collected by Ethical Metrics",description:"Dappnode has absolutely no hidden telemetry and is completely private by design. We were reluctant of setting up a monitoring service because we did NOT want to collect any data from our users. Because of our community's continuous requests to offer alerts, we came up with a solution that doesn't compromise your privacy.",source:"@site/docs/user/ethical-metrics/metrics.md",sourceDirName:"user/ethical-metrics",slug:"/user/ethical-metrics/metrics",permalink:"/docs/user/ethical-metrics/metrics",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/ethical-metrics/metrics.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Setting up Ethical Metrics",permalink:"/docs/user/ethical-metrics/setup"},next:{title:"Troubleshooting",permalink:"/docs/user/ethical-metrics/troubleshooting"}},a={},l=[{value:"Dappnode host metrics",id:"dappnode-host-metrics",level:2},{value:"Dappmanager metrics",id:"dappmanager-metrics",level:2},{value:"Staking Metrics",id:"staking-metrics",level:2}];function d(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"metrics-collected-by-ethical-metrics",children:"Metrics Collected by Ethical Metrics"}),"\n",(0,i.jsx)(n.p,{children:"Dappnode has absolutely no hidden telemetry and is completely private by design. We were reluctant of setting up a monitoring service because we did NOT want to collect any data from our users. Because of our community's continuous requests to offer alerts, we came up with a solution that doesn't compromise your privacy."}),"\n",(0,i.jsxs)(n.p,{children:["Even if we can't link the metrics from your Dappnode to your identity, ",(0,i.jsx)(n.strong,{children:"we are fully committed to maintain total transparency about the metrics we collect from your Dappnode when using Ethical Metrics"}),". We want you to have a clear understanding of the information that is being monitored. The metrics we collect fall into several categories. Here's an overview of the metrics we gather."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"These metrics also help us better allocate resources by knowing what our users are running on their Dappnodes. This way, we can better understand which packages are the most popular and which ones need improvement."})}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"Ethical Metrics is one of our newest packages and it is still under constant improvement. This section will be updated as we add or remove metrics."})}),"\n",(0,i.jsx)(n.h2,{id:"dappnode-host-metrics",children:"Dappnode host metrics"}),"\n",(0,i.jsx)(n.p,{children:"These are all the metrics related directly to the host machine running your Dappnode. All of these metrics are collected by the Dappnode Exporter package."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"node_cpu_seconds_total"}),": Total CPU usage in seconds by the node."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"container_memory_usage_bytes"}),": Memory usage in bytes by containers."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"container_memory_cache"}),": Memory cache usage by containers."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"node_memory_MemTotal_bytes"}),": Total memory available in bytes on the node."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"node_memory_MemFree_bytes"}),": Free memory in bytes on the node."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"node_memory_Buffers_bytes"}),": Memory used for buffers in bytes on the node."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"node_memory_Cached_bytes"}),": Cached memory in bytes on the node."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"node_disk_io_time_seconds_total"}),": Total disk I/O time in seconds on the node."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"node_disk_reads_completed_total"}),": Total completed disk reads on the node."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"node_disk_writes_completed_total"}),": Total completed disk writes on the node."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"container_fs_usage_bytes"}),": Filesystem usage by containers in bytes."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"node_filesystem_size_bytes"}),": Total size of the filesystem in bytes on the node."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"node_filesystem_free_bytes"}),": Free space in the filesystem in bytes on the node."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"container_last_seen"}),": Timestamp of the last seen container."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"cadvisor_version_info"}),": Information about the cAdvisor version."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"container_cpu_usage_seconds_total"}),": Total CPU usage in seconds by containers."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"dappmanager-metrics",children:"Dappmanager metrics"}),"\n",(0,i.jsx)(n.p,{children:"The following are all the metrics related to your Dappnode's configuration. These are all stored in your Dappmanager."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"dappmmanager_staker_config"}),": Your current staking package."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"dappmanager_ipfs_client_target_local"}),": Wether IPFS client is in local or remote mode."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"dappmanager_eth_fallback_enabled"}),": Wether the ethereum fallback client is enabled."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"dappmanager_eth_client_target_local"}),": Wether ethereum client is in local or remote mode."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"dappmanager_auto_updates_user_packages"}),": Wether auto updates for user packages is enabled."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"dappmanager_auto_updates_system_packages"}),": Wether auto updates for system packages is enabled."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"dappmanager_host_info"}),": Details including Docker and Docker Compose versions, kernel version, operating system version, and architecture type."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"staking-metrics",children:"Staking Metrics"}),"\n",(0,i.jsx)(n.p,{children:"The following metrics are all related directly to the staking packages, including Web3Signer."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"eth2_slashingprotection_prevented_signings"}),": Number of prevented slashing signings."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"signing_signers_loaded_count"}),": Count of loaded validators signing in web3signer."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"signing_bls_signing_duration"}),": Duration of BLS signing."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"signing_bls_signing_duration_count"}),": Count of BLS signing durations."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"signing_bls_signing_duration_sum"}),": Sum of BLS signing durations."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"signing_bls_missing_identifier_count"}),": Count of missing BLS identifier."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"api_rpc_cons_peers"}),": Number of connected peers to your staking execution clients."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"api_rpc_exec_peers"}),": Number of connected peers to your staking consensus clients."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"api_rpc_cons_syncing"}),": Wether your staking execution clients are syncing."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"api_rpc_exec_syncing"}),": Wether your staking consensus clients are syncing."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"To sum it up, the metrics we collect give us a peek into how your Dappnode is doing overall, how it allocates resources, memory, disk, and even info related to staking performance."}),"\n",(0,i.jsx)(n.p,{children:"Your privacy is of utmost importance to us. Remember that all this data transmission occurs through the TOR network to protect your privacy."}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"For any questions or concerns about the metrics collected by Ethical Metrics, feel free to reach out to our support team."})})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>r});var i=s(7294);const t={},o=i.createContext(t);function r(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2a82f816.85cb16f8.js b/assets/js/2a82f816.85cb16f8.js new file mode 100644 index 000000000..14ad7bb6f --- /dev/null +++ b/assets/js/2a82f816.85cb16f8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[437],{1469:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>t,contentTitle:()=>d,default:()=>o,frontMatter:()=>l,metadata:()=>c,toc:()=>h});var i=s(5893),r=s(1151);const l={},d="Dappnode Package (DNP) manifest",c={id:"dev/references/manifest",title:"Dappnode Package (DNP) manifest",description:"The Dappnode Package manifest defines all the necessary information for a Dappnode to understand this package:",source:"@site/docs/dev/references/manifest.md",sourceDirName:"dev/references",slug:"/dev/references/manifest",permalink:"/docs/dev/references/manifest",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/references/manifest.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"Docker compose file",permalink:"/docs/dev/references/docker-compose"},next:{title:"Wizard Reference",permalink:"/docs/dev/references/setup-wizard"}},t={},h=[{value:"Example",id:"example",level:2},{value:"Properties reference",id:"properties-reference",level:2},{value:"name",id:"name",level:3},{value:"version",id:"version",level:3},{value:"upstreamVersion",id:"upstreamversion",level:3},{value:"shortDescription",id:"shortdescription",level:3},{value:"description",id:"description",level:3},{value:"type",id:"type",level:3},{value:"chain",id:"chain",level:3},{value:"mainService",id:"mainservice",level:3},{value:"dockerTimeout",id:"dockertimeout",level:3},{value:"dependencies",id:"dependencies",level:3},{value:"requirements",id:"requirements",level:3},{value:"minimumDappnodeVersion",id:"minimumdappnodeversion",level:4},{value:"globalEnvs",id:"globalenvs",level:3},{value:"all",id:"all",level:4},{value:"architectures",id:"architectures",level:3},{value:"backup",id:"backup",level:3},{value:"name",id:"name-1",level:4},{value:"path",id:"path",level:4},{value:"service",id:"service",level:4},{value:"changelog",id:"changelog",level:3},{value:"warnings",id:"warnings",level:3},{value:"onInstall",id:"oninstall",level:4},{value:"onUpdate",id:"onupdate",level:4},{value:"onReset",id:"onreset",level:4},{value:"onRemove",id:"onremove",level:4},{value:"updateAlerts",id:"updatealerts",level:3},{value:"from",id:"from",level:4},{value:"to",id:"to",level:4},{value:"message",id:"message",level:4},{value:"disclaimer",id:"disclaimer",level:3},{value:"message",id:"message-1",level:4},{value:"style",id:"style",level:3},{value:"featuredBackground",id:"featuredbackground",level:4},{value:"featuredColor",id:"featuredcolor",level:4},{value:"featuredAvatarFilter",id:"featuredavatarfilter",level:4},{value:"exposable",id:"exposable",level:3},{value:"name",id:"name-2",level:4},{value:"description",id:"description-1",level:4},{value:"serviceName",id:"servicename",level:4},{value:"port",id:"port",level:4},{value:"author",id:"author",level:3},{value:"contributors",id:"contributors",level:3},{value:"categories",id:"categories",level:3},{value:"keywords",id:"keywords",level:3},{value:"links",id:"links",level:3},{value:"homepage",id:"homepage",level:4},{value:"ui",id:"ui",level:4},{value:"api",id:"api",level:4},{value:"gateway",id:"gateway",level:4},{value:"repository",id:"repository",level:3},{value:"type",id:"type-1",level:4},{value:"url",id:"url",level:4},{value:"directory",id:"directory",level:4},{value:"bugs",id:"bugs",level:3},{value:"url",id:"url-1",level:4},{value:"license",id:"license",level:3}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"dappnode-package-dnp-manifest",children:"Dappnode Package (DNP) manifest"}),"\n",(0,i.jsx)(n.p,{children:"The Dappnode Package manifest defines all the necessary information for a Dappnode to understand this package:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"IPFS of BZZ hashes to download its docker image"}),"\n",(0,i.jsx)(n.li,{children:"Docker related data to configure and run its container"}),"\n",(0,i.jsx)(n.li,{children:"Metadata to control how the package is shown in the admin UI."}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "name": "ipfs.dnp.dappnode.eth",\n "version": "0.2.0",\n "upstreamVersion": "2.6.0-beta",\n "shortDescription": "Distributed file system for storing and accessing data.",\n "description": "Welcome! IPFS is a distributed system for storing and accessing files, websites, applications, and data. If you\u2019re new to IPFS, check our [introductory page](https://ipfs.io/#why) for an easy overview. \\n\\nWith this node you can upload and download files from IPFS using it own fancy web console at [http://ipfs.dappnode:5001/webui](http://ipfs.dappnode:5001/webui). Other Dappnode Packages and external applications can use its API at the endpoint `http://ipfs.dappnode:5001/api`. Go to the [IPFS HTTP API full reference](https://docs.ipfs.io/reference/api/http/) to check all the features of the API.",\n "type": "service",\n "chain": "ethereum",\n "mainService": "webserver",\n "dockerTimeout": "5min",\n "dependencies": {\n "bitcoin.dnp.dappnode.eth": "^0.1.2",\n "swarm.dnp.dappnode.eth": "latest"\n },\n "requirements": {\n "minimumDappnodeVersion": "0.2.0"\n },\n "globalEnvs": {\n "all": "true"\n },\n "architectures": ["linux/amd64", "linux/arm64"],\n "backup": [\n {\n "name": "keystore",\n "path": "/root/.raiden/secret/keystore",\n "service": "validator"\n }\n ],\n "changelog": "Brief summary of the most relevant changes that the user must known before installing",\n "warnings": {\n "onInstall": "You must set the PASSWORD ENV before installing the Dappnode Package in order for the setup to work correctly.",\n "onUpdate": "Your VPN connection will be lost when the VPN finalizes updating. Leave 1-2 minutes after executing the update and then reconnect and refresh this site.",\n "onReset": "You MUST properly close your open channels before resetting this Dappnode Package or you may lose your funds.",\n "onRemove": "You MUST properly close your open channels before removing this Dappnode Package or you may lose your funds."\n },\n "updateAlerts": [\n {\n "from": "0.1.x",\n "to": "0.1.x",\n "message": "Major update to OpenVPN: This update breaks compatibility with the last VPN version. Please read the migration guide: https://migration020.dappnode.io"\n }\n ],\n "disclaimer": {\n "message": "This software is experimental, presented \u201cas is\u201d and inherently carries risks."\n },\n "style": {\n "featuredBackground": "linear-gradient(to right, #323131, #395353)",\n "featuredColor": "white",\n "featuredAvatarFilter": "invert(1)"\n },\n "exposable": [\n {\n "name": "Geth JSON RPC",\n "description": "JSON RPC endpoint for Geth mainnet",\n "serviceName": "beacon_chain",\n "port": 80\n }\n ],\n "author": "Dappnode Association (https://github.com/dappnode)",\n "contributors": [\n "Michael First (https://github.com/developerHanlder)",\n "Michael Second (https://github.com/developerHanlder)"\n ],\n "categories": ["Developer tools", "Blockchain"],\n "keywords": ["DappnodeCore"],\n "links": {\n "homepage": "https://github.com/dappnode/DNP_IPFS#readme",\n "ui": "http://ipfs.dappnode:5001/webui",\n "api": "http://ipfs.dappnode:5001/api/v0",\n "gateway": "http://ipfs.dappnode:8080/ipfs"\n },\n "repository": {\n "type": "git",\n "url": "https://github.com/dappnode/DNP_IPFS.git",\n "directory": "packages/react-dom"\n },\n "bugs": {\n "url": "https://github.com/dappnode/DNP_IPFS/issues"\n },\n "license": "GPL-3.0"\n}\n'})}),"\n",(0,i.jsx)(n.h2,{id:"properties-reference",children:"Properties reference"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#name",children:"name"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#version",children:"version"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#upstreamversion",children:"upstreamVersion"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#shortdescription",children:"shortDescription"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#description",children:"description"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#type",children:"type"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"enum"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#chain",children:"chain"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"enum"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#mainservice",children:"mainService"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#dockertimeout",children:"dockerTimeout"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#dependencies",children:"dependencies"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#requirements",children:"requirements"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#globalenvs",children:"globalEnvs"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#architectures",children:"architectures"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"enum[]"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#backup",children:"backup"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object[]"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#changelog",children:"changelog"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#warnings",children:"warnings"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#updatealerts",children:"updateAlerts"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object[]"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#disclaimer",children:"disclaimer"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#style",children:"style"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#exposable",children:"exposable"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object[]"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#author",children:"author"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#contributors",children:"contributors"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string[]"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#categories",children:"categories"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"enum[]"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#keywords",children:"keywords"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string[]"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#links",children:"links"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#repository",children:"repository"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#bugs",children:"bugs"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#license",children:"license"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]})]})]}),"\n",(0,i.jsx)(n.h3,{id:"name",children:"name"}),"\n",(0,i.jsx)(n.p,{children:"Dappnode Package ENS name."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"ipfs.dnp.dappnode.eth"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"version",children:"version"}),"\n",(0,i.jsx)(n.p,{children:"Dappnode Package semantic version (semver)."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"All instances must conform to this regular expression"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-regex",children:"^((([0-9]+).([0-9]+).([0-9]+)))$\n"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["test example:\n",(0,i.jsx)(n.a,{href:"https://regexr.com/?expression=%5E(((%5B0-9%5D%2B).(%5B0-9%5D%2B).(%5B0-9%5D%2B)))%24&text=0.2.0",children:"0.2.0"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"0.2.0"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"upstreamversion",children:"upstreamVersion"}),"\n",(0,i.jsxs)(n.p,{children:["For Dappnode Packages that only wrap existing software (i.e. Bitcoin node, Ethereum node), the underlying software\nversion can be specified here. It will be shown in the admin UI alongside the field ",(0,i.jsx)(n.code,{children:"version"}),"."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"2.6.0-beta"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"any-text"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"shortdescription",children:"shortDescription"}),"\n",(0,i.jsx)(n.p,{children:"Short Dappnode Package description, 6-8 words sentence briefly describing the purpose of this Dappnode Package. The\npurpose is to quickly grab users' attention and clearly define its purpose. Markdown is discouraged as it will NOT be\nrendered on the Dappnode Package store view."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"Distributed file system for storing and accessing data."\n'})}),"\n",(0,i.jsx)(n.h3,{id:"description",children:"description"}),"\n",(0,i.jsx)(n.p,{children:"Dappnode Package description. Markdown and links are allowed and ecouraged to give users the option to read more\ninformation about this Dappnode Package."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"Welcome! IPFS is a distributed system for storing and accessing files, websites, applications, and data. If you\u2019re new to IPFS, check our [introductory page](https://ipfs.io/#why) for an easy overview. \\n\\nWith this node you can upload and download files from IPFS using it own fancy web console at [http://ipfs.dappnode:5001/webui](http://ipfs.dappnode:5001/webui). Other Dappnode Packages and external applications can use its API at the endpoint `http://ipfs.dappnode:5001/api`. Go to the [IPFS HTTP API full reference](https://docs.ipfs.io/reference/api/http/) to check all the features of the API."\n'})}),"\n",(0,i.jsx)(n.h3,{id:"type",children:"type"}),"\n",(0,i.jsx)(n.p,{children:"Type of this Dappnode Package. It is used to trigger some special features such as core functionality."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["default: ",(0,i.jsx)(n.code,{children:'"service"'})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["The value of this property ",(0,i.jsx)(n.strong,{children:"must"})," be equal to one of the known values below."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Value"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"service"})}),(0,i.jsx)(n.td,{children:"Can have ENVs a depend on library Dappnode Packages"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"library"})}),(0,i.jsx)(n.td,{children:"Should not have ENVs and cannot depend on service Dappnode Packages"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"dncore"})}),(0,i.jsx)(n.td,{children:"Dappnode Packages that are part of the Dappnode core and have special permissions"})]})]})]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"service"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"dncore"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"chain",children:"chain"}),"\n",(0,i.jsx)(n.p,{children:"Indicate that this Dappnode Package is a blockchain node so the admin UI shows its syncing status"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["The value of this property ",(0,i.jsx)(n.strong,{children:"must"})," be equal to one of the known values below."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Value"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"ethereum"})}),(0,i.jsx)(n.td,{children:"Must have an Ethereum JSON RPC exposed internally at port 8545"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"bitcoin"})}),(0,i.jsxs)(n.td,{children:["Must have a standard Bitcoin JSON API exposed at the default port (8332). Uses the NPM package ",(0,i.jsx)(n.code,{children:"bitcoin-core"})]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"monero"})}),(0,i.jsxs)(n.td,{children:["Must have a Monero API exposed internally at port 18081. Uses the NPM package ",(0,i.jsx)(n.code,{children:"monero-rpc"})]})]})]})]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"ethereum"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"bitcoin"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"monero"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"mainservice",children:"mainService"}),"\n",(0,i.jsx)(n.p,{children:"For multi-service packages, indicate which service is the main one. The root ENS domain of this package will be mapped\nto this service IP."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"webserver"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"backend"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"service1"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"dockertimeout",children:"dockerTimeout"}),"\n",(0,i.jsxs)(n.p,{children:["Modify the default Docker timeout of 10 seconds. It affects package updates, removals, container restarts, start and\nstop, updating config environments and port mappings. You can either pass a numerical value in seconds or a string\nrepresentation parsed with ",(0,i.jsx)(n.a,{href:"http://npmjs.com/package/timestring",children:"timestring"}),". Available from DAPPMANAGER v0.2.36"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"5min"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"60"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"dependencies",children:"dependencies"}),"\n",(0,i.jsxs)(n.p,{children:["Dappnode Package dependencies. Must be an object where the keys are the Dappnode Package's ENS. The values must be a\nsemantic range, i.e. ",(0,i.jsx)(n.code,{children:"'0.2.0'"}),", ",(0,i.jsx)(n.code,{children:"'^0.2.1'"}),", ",(0,i.jsx)(n.code,{children:"'*'"}),", ",(0,i.jsx)(n.code,{children:"'latest'"}),",\n",(0,i.jsx)(n.code,{children:"'/ipfs/QmWwMb3XhuCH6JnCF6m6EQzA4mW9pHHtg7rqAfhDr2ofi8'"}),"."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,i.jsx)(n.table,{children:(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})})}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "bitcoin.dnp.dappnode.eth": "^0.1.2",\n "swarm.dnp.dappnode.eth": "latest"\n}\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "only-for-dev-1.dappnode.eth": "/ipfs/QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o",\n "only-for-dev-2.dappnode.eth": "/ipfs/zdj7WWeQ43G6JJvLWQWZpyHuAMq6uYWRjkBXFad11vE2LHhQ7"\n}\n'})}),"\n",(0,i.jsx)(n.h3,{id:"requirements",children:"requirements"}),"\n",(0,i.jsx)(n.p,{children:"Specify requirements to be met before allowing users to install this Dappnode Package."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})}),(0,i.jsx)(n.tbody,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"minimumDappnodeVersion"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]})})]}),"\n",(0,i.jsx)(n.h4,{id:"minimumdappnodeversion",children:"minimumDappnodeVersion"}),"\n",(0,i.jsx)(n.p,{children:"Minimum Dappnode version that includes all the features necessary to run this Dappnode Package."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"All instances must conform to this regular expression"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-regex",children:"^((([0-9]+).([0-9]+).([0-9]+)))$\n"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["test example:\n",(0,i.jsx)(n.a,{href:"https://regexr.com/?expression=%5E(((%5B0-9%5D%2B).(%5B0-9%5D%2B).(%5B0-9%5D%2B)))%24&text=0.2.0",children:"0.2.0"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"0.2.0"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"globalenvs",children:"globalEnvs"}),"\n",(0,i.jsx)(n.p,{children:"Request the DAPPMANAGER to inject global ENVs to this package's containers"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})}),(0,i.jsx)(n.tbody,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"all"})}),(0,i.jsx)(n.td,{children:"boolean"}),(0,i.jsx)(n.td,{children:"Optional"})]})})]}),"\n",(0,i.jsx)(n.h4,{id:"all",children:"all"}),"\n",(0,i.jsx)(n.p,{children:"Request the DAPPMANAGER to inject all available global ENVs"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"boolean"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"true"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"architectures",children:"architectures"}),"\n",(0,i.jsxs)(n.p,{children:["Build and distribute this package in multiple architectures using\n",(0,i.jsx)(n.a,{href:"https://docs.docker.com/buildx/working-with-buildx/",children:"Docker's buildx plugin"})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: Array type: ",(0,i.jsx)(n.code,{children:"enum[]"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["All items must be of the type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsxs)(n.p,{children:["The value of this property ",(0,i.jsx)(n.strong,{children:"must"})," be equal to one of the known values below."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Value"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"linux/amd64"})}),(0,i.jsx)(n.td,{children:"Default architecture, x86-64"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"linux/arm64"})}),(0,i.jsx)(n.td,{children:"ARM architecture"})]})]})]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'["linux/amd64", "linux/arm64"]\n'})}),"\n",(0,i.jsx)(n.h3,{id:"backup",children:"backup"}),"\n",(0,i.jsxs)(n.p,{children:["Allows users to download and restore a backup of key files of this package. If this property is non-empty array, a new\nview will be available in the admin UI for this Dappnode Package. The files or directories specified in the array will\nbe bundled in a tarball. As long as the name properties stay the same, their associated paths can change in future\nversions. Then, when restoring an old backup, the new paths will be associated to files stored under the same name\nkeys. ",(0,i.jsx)(n.strong,{children:"Note:"})," it is recommended to only backup lightweight files such as configs, keys or passwords."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: Array type: ",(0,i.jsx)(n.code,{children:"object[]"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["All items must be of the type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"name"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"path"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"service"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]})]})]}),"\n",(0,i.jsx)(n.h4,{id:"name-1",children:"name"}),"\n",(0,i.jsx)(n.p,{children:"A key identifier of this file or directory. Its purpose is to allow the path to change in the future."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"keystore"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"config"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"keys"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"path",children:"path"}),"\n",(0,i.jsxs)(n.p,{children:["Path to the file or directory to backup. It ",(0,i.jsx)(n.strong,{children:"MUST"})," be an absolute path (do not use the ",(0,i.jsx)(n.code,{children:"~"})," character) for the backup\ntool to work correctly."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"/root/.raiden/secret/keystore"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"/usr/src/app/config.json"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"service",children:"service"}),"\n",(0,i.jsx)(n.p,{children:"Service to which the path belongs to. Must be equal to the name used in the docker-compose services object"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"validator"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"service1"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"changelog",children:"changelog"}),"\n",(0,i.jsx)(n.p,{children:"Description of relevant changes of this specific version. Supports markdown and links."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"Brief summary of the most relevant changes that the user must known before installing"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"warnings",children:"warnings"}),"\n",(0,i.jsx)(n.p,{children:"Very relevant information that MUST be shown to the user BEFORE executing a specific action in the Dappnode Package's\nlifecycle."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"onInstall"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"onUpdate"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"onReset"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"onRemove"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]})]})]}),"\n",(0,i.jsx)(n.h4,{id:"oninstall",children:"onInstall"}),"\n",(0,i.jsx)(n.p,{children:"Will be shown before installing the Dappnode Package."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"You must set the PASSWORD ENV before installing the Dappnode Package in order for the setup to work correctly."\n'})}),"\n",(0,i.jsx)(n.h4,{id:"onupdate",children:"onUpdate"}),"\n",(0,i.jsx)(n.p,{children:"Will be shown before updating the Dappnode Package, not in the first installation."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"Your VPN connection will be lost when the VPN finalizes updating. Leave 1-2 minutes after executing the update and then reconnect and refresh this site."\n'})}),"\n",(0,i.jsx)(n.h4,{id:"onreset",children:"onReset"}),"\n",(0,i.jsx)(n.p,{children:"Will be shown before resetting the Dappnode Package."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"You MUST properly close your open channels before resetting this Dappnode Package or you may lose your funds."\n'})}),"\n",(0,i.jsx)(n.h4,{id:"onremove",children:"onRemove"}),"\n",(0,i.jsx)(n.p,{children:"Will be shown before removing the Dappnode Package."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"You MUST properly close your open channels before removing this Dappnode Package or you may lose your funds."\n'})}),"\n",(0,i.jsx)(n.h3,{id:"updatealerts",children:"updateAlerts"}),"\n",(0,i.jsx)(n.p,{children:"Alerts targeted to a specific update jump."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: Array type: ",(0,i.jsx)(n.code,{children:"object[]"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["All items must be of the type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"}),(0,i.jsx)(n.th,{children:"Default"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"from"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})}),(0,i.jsx)(n.td,{})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"to"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:'"*"'})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"message"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})}),(0,i.jsx)(n.td,{})]})]})]}),"\n",(0,i.jsx)(n.h4,{id:"from",children:"from"}),"\n",(0,i.jsx)(n.p,{children:"Semver range, show this message when a user updates this Dappnode Package FROM a version that satisfies this range."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"0.1.x"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"^0.2.0"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"to",children:"to"}),"\n",(0,i.jsx)(n.p,{children:"Semver range, show this message when a user updates this Dappnode Package TO a version that satisfies this range."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["default: ",(0,i.jsx)(n.code,{children:'"*"'})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"0.1.x"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"^0.2.0"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"*"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"message",children:"message"}),"\n",(0,i.jsxs)(n.p,{children:["Alert message to be shown when ",(0,i.jsx)(n.code,{children:"from"})," and ",(0,i.jsx)(n.code,{children:"to"})," ranges are satisfied."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"Major update to OpenVPN: This update breaks compatibility with the last VPN version. Please read the migration guide: https://migration020.dappnode.io"\n'})}),"\n",(0,i.jsx)(n.p,{children:"Specific update jump alert."}),"\n",(0,i.jsx)(n.h3,{id:"disclaimer",children:"disclaimer"}),"\n",(0,i.jsx)(n.p,{children:"Disclaimer to be shown to the user on install, and will require the user to approve it."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})}),(0,i.jsx)(n.tbody,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"message"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]})})]}),"\n",(0,i.jsx)(n.h4,{id:"message-1",children:"message"}),"\n",(0,i.jsx)(n.p,{children:"The message shown in the pop-up. Markdown and links are allowed."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"This software is experimental, presented \u201cas is\u201d and inherently carries risks."\n'})}),"\n",(0,i.jsx)(n.h3,{id:"style",children:"style"}),"\n",(0,i.jsx)(n.p,{children:"Graphic information to control the appearance of Dappnode Package related items in the admin UI."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"featuredBackground"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"featuredColor"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"featuredAvatarFilter"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]})]})]}),"\n",(0,i.jsx)(n.h4,{id:"featuredbackground",children:"featuredBackground"}),"\n",(0,i.jsxs)(n.p,{children:["CSS background property to be applied to the Dappnode Package card in the Dappnode Package store if featured. Go to the\n",(0,i.jsx)(n.a,{href:"https://developer.mozilla.org/docs/Web/CSS/background",children:"Mozilla CSS background reference"})," for valid values."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"linear-gradient(to right, #323131, #395353)"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"black"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"featuredcolor",children:"featuredColor"}),"\n",(0,i.jsxs)(n.p,{children:["CSS color property to be applied to the Dappnode Package card in the Dappnode Package store if featured. Go to the\n",(0,i.jsx)(n.a,{href:"https://developer.mozilla.org/docs/Web/CSS/color",children:"Mozilla CSS color reference"})," for valid values."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"white"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"#fff"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"featuredavatarfilter",children:"featuredAvatarFilter"}),"\n",(0,i.jsxs)(n.p,{children:["CSS filter property to be applied to ",(0,i.jsx)(n.code,{children:""})," component (avatar) of the Dappnode Package card in the Dappnode Package\nstore if featured. Go to the ",(0,i.jsx)(n.a,{href:"https://developer.mozilla.org/docs/Web/CSS/filter",children:"Mozilla CSS filter reference"})," for\nvalid values."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"invert(1)"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"grayscale(80%);"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"exposable",children:"exposable"}),"\n",(0,i.jsx)(n.p,{children:"Exposable services safe to be in the public internet"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: Array type: ",(0,i.jsx)(n.code,{children:"object[]"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["All items must be of the type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"name"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"description"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"serviceName"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"port"})}),(0,i.jsx)(n.td,{children:"number"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"fromSubdomain"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]})]})]}),"\n",(0,i.jsx)(n.h4,{id:"name-2",children:"name"}),"\n",(0,i.jsx)(n.p,{children:"Short human readable name of this exposable service"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"Geth JSON RPC"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"description-1",children:"description"}),"\n",(0,i.jsx)(n.p,{children:"Description of this exposable service"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"JSON RPC endpoint for Geth mainnet"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"servicename",children:"serviceName"}),"\n",(0,i.jsx)(n.p,{children:"Docker compose service this exposable service belongs to. Defaults to the first service."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"beacon_chain"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"port",children:"port"}),"\n",(0,i.jsx)(n.p,{children:"Port this exposable service listens to"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"number"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"80\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"5001\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"8545\n"})}),"\n",(0,i.jsx)(n.p,{children:"Single exposable service item"}),"\n",(0,i.jsx)(n.h3,{id:"author",children:"author"}),"\n",(0,i.jsxs)(n.p,{children:["Main author of this Dappnode Package. Must follow the structure ",(0,i.jsx)(n.code,{children:"${name} <${email}> (${githubUserLink})"}),"."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"Dappnode Association (https://github.com/dappnode)"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"contributors",children:"contributors"}),"\n",(0,i.jsx)(n.p,{children:"Contributing authors of this Dappnode Package."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: Array type: ",(0,i.jsx)(n.code,{children:"string[]"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["All items must be of the type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Contributor author. Must follow the structure ",(0,i.jsx)(n.code,{children:"${name} <${email}> (${githubUserLink})"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'[\n "Michael First (https://github.com/developerHanlder)",\n "Michael Second (https://github.com/developerHanlder)"\n]\n'})}),"\n",(0,i.jsx)(n.h3,{id:"categories",children:"categories"}),"\n",(0,i.jsxs)(n.p,{children:["Categories to organize and group Dappnode Packages in the Dappnode Package store. Only one or two categories maximum\nshould be specified per package. If you feel that any of the current categories represent the nature of your package,\nplease open an issue requesting a new category ",(0,i.jsx)(n.a,{href:"https://github.com/dappnode/dnp-manifest/issues/new",children:"https://github.com/dappnode/dnp-manifest/issues/new"})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: Array type: ",(0,i.jsx)(n.code,{children:"enum[]"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["All items must be of the type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsxs)(n.p,{children:["The value of this property ",(0,i.jsx)(n.strong,{children:"must"})," be equal to one of the known values below."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Value"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Blockchain"})}),(0,i.jsx)(n.td,{children:"Blockchain nodes, i.e. Bitcoin, Monero"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Communications"})}),(0,i.jsx)(n.td,{children:"Decentralized networking or chat solutions, i.e. Swarm"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Developer tools"})}),(0,i.jsx)(n.td,{children:"Packages that their main purpose is to aid in developing, i.e. testnets"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"ETH2.0"})}),(0,i.jsx)(n.td,{children:"Packages to participate or use the Eth2.0 network"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Economic incentive"})}),(0,i.jsx)(n.td,{children:"Packages that offer an economic incentive or reward to the admin that runs it, i.e. Lightning Network"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Monitoring"})}),(0,i.jsx)(n.td,{children:"Packages that track metrics"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Payment channels"})}),(0,i.jsx)(n.td,{children:"Packages whose main purpose is to manage or control payment channels, i.e. Raiden"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Storage"})}),(0,i.jsx)(n.td,{children:"Decentralized storage solutions, i.e. Swarm"})]})]})]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'["Developer tools", "Blockchain"]\n'})}),"\n",(0,i.jsx)(n.h3,{id:"keywords",children:"keywords"}),"\n",(0,i.jsx)(n.p,{children:"Keywords, relevant and descriptive of this Dappnode Package. They will be shown in the admin UI Dappnode Package store."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: Array type: ",(0,i.jsx)(n.code,{children:"string[]"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["All items must be of the type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Single keyword."}),"\n",(0,i.jsx)(n.h3,{id:"links",children:"links"}),"\n",(0,i.jsx)(n.p,{children:"Various links (URLs) useful for the user of this package. All links will be shown in the dedicated view of this package\nin the admin UI. The predefined links properties below will be shown with concept related icons. Other links will be\nshown as well but with their plain name instead of an icon."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"homepage"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"ui"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"api"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"gateway"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]})]})]}),"\n",(0,i.jsx)(n.h4,{id:"homepage",children:"homepage"}),"\n",(0,i.jsx)(n.p,{children:"Url to an informative homepage for this Dappnode Package. Should be a README or landing website."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"https://github.com/dappnode/DNP_IPFS#readme"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"ui",children:"ui"}),"\n",(0,i.jsx)(n.p,{children:"Url to this DNP's Dappnode local UI."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"http://ipfs.dappnode:5001/webui"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"api",children:"api"}),"\n",(0,i.jsx)(n.p,{children:"Url to this DNP's Dappnode local HTTP API endpoint."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"http://ipfs.dappnode:5001/api/v0"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"gateway",children:"gateway"}),"\n",(0,i.jsx)(n.p,{children:"Url to this DNP's Dappnode local gateway."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"http://ipfs.dappnode:8080/ipfs"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"repository",children:"repository"}),"\n",(0,i.jsx)(n.p,{children:"Dappnode Package's repository. Must be a publicly available url that can be handed directly to a VCS program."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"type"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"url"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"directory"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]})]})]}),"\n",(0,i.jsx)(n.h4,{id:"type-1",children:"type"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"git"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"url",children:"url"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"https://github.com/dappnode/DNP_IPFS.git"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"directory",children:"directory"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"packages/react-dom"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"bugs",children:"bugs"}),"\n",(0,i.jsx)(n.p,{children:"Url to your project\u2019s issue tracker."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})}),(0,i.jsx)(n.tbody,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"url"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]})})]}),"\n",(0,i.jsx)(n.h4,{id:"url-1",children:"url"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"https://github.com/dappnode/DNP_IPFS/issues"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"license",children:"license"}),"\n",(0,i.jsx)(n.p,{children:"Dappnode Package's License."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"GPL-3.0"\n'})})]})}function o(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>d});var i=s(7294);const r={},l=i.createContext(r);function d(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:d(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2a82f816.ddd74d96.js b/assets/js/2a82f816.ddd74d96.js deleted file mode 100644 index 653f237e8..000000000 --- a/assets/js/2a82f816.ddd74d96.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[437],{4137:(e,t,a)=>{a.d(t,{Zo:()=>s,kt:()=>N});var n=a(7294);function l(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t =0||(l[a]=e[a]);return l}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,a)&&(l[a]=e[a])}return l}var o=n.createContext({}),d=function(e){var t=n.useContext(o),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},s=function(e){var t=d(e.components);return n.createElement(o.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var a=e.components,l=e.mdxType,r=e.originalType,o=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),u=d(a),k=l,N=u["".concat(o,".").concat(k)]||u[k]||m[k]||r;return a?n.createElement(N,i(i({ref:t},s),{},{components:a})):n.createElement(N,i({ref:t},s))}));function N(e,t){var a=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var r=a.length,i=new Array(r);i[0]=k;var p={};for(var o in t)hasOwnProperty.call(t,o)&&(p[o]=t[o]);p.originalType=e,p[u]="string"==typeof e?e:l,i[1]=p;for(var d=2;d {a.r(t),a.d(t,{assets:()=>o,contentTitle:()=>i,default:()=>m,frontMatter:()=>r,metadata:()=>p,toc:()=>d});var n=a(7462),l=(a(7294),a(4137));const r={},i="Dappnode Package (DNP) manifest",p={unversionedId:"dev/references/manifest",id:"dev/references/manifest",title:"Dappnode Package (DNP) manifest",description:"The Dappnode Package manifest defines all the necessary information for a Dappnode to understand this package:",source:"@site/docs/dev/references/manifest.md",sourceDirName:"dev/references",slug:"/dev/references/manifest",permalink:"/docs/dev/references/manifest",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/references/manifest.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"Docker compose file",permalink:"/docs/dev/references/docker-compose"},next:{title:"Wizard Reference",permalink:"/docs/dev/references/setup-wizard"}},o={},d=[{value:"Example",id:"example",level:2},{value:"Properties reference",id:"properties-reference",level:2},{value:"name",id:"name",level:3},{value:"version",id:"version",level:3},{value:"upstreamVersion",id:"upstreamversion",level:3},{value:"shortDescription",id:"shortdescription",level:3},{value:"description",id:"description",level:3},{value:"type",id:"type",level:3},{value:"chain",id:"chain",level:3},{value:"mainService",id:"mainservice",level:3},{value:"dockerTimeout",id:"dockertimeout",level:3},{value:"dependencies",id:"dependencies",level:3},{value:"requirements",id:"requirements",level:3},{value:"minimumDappnodeVersion",id:"minimumdappnodeversion",level:4},{value:"globalEnvs",id:"globalenvs",level:3},{value:"all",id:"all",level:4},{value:"architectures",id:"architectures",level:3},{value:"backup",id:"backup",level:3},{value:"name",id:"name-1",level:4},{value:"path",id:"path",level:4},{value:"service",id:"service",level:4},{value:"changelog",id:"changelog",level:3},{value:"warnings",id:"warnings",level:3},{value:"onInstall",id:"oninstall",level:4},{value:"onUpdate",id:"onupdate",level:4},{value:"onReset",id:"onreset",level:4},{value:"onRemove",id:"onremove",level:4},{value:"updateAlerts",id:"updatealerts",level:3},{value:"from",id:"from",level:4},{value:"to",id:"to",level:4},{value:"message",id:"message",level:4},{value:"disclaimer",id:"disclaimer",level:3},{value:"message",id:"message-1",level:4},{value:"style",id:"style",level:3},{value:"featuredBackground",id:"featuredbackground",level:4},{value:"featuredColor",id:"featuredcolor",level:4},{value:"featuredAvatarFilter",id:"featuredavatarfilter",level:4},{value:"exposable",id:"exposable",level:3},{value:"name",id:"name-2",level:4},{value:"description",id:"description-1",level:4},{value:"serviceName",id:"servicename",level:4},{value:"port",id:"port",level:4},{value:"author",id:"author",level:3},{value:"contributors",id:"contributors",level:3},{value:"categories",id:"categories",level:3},{value:"keywords",id:"keywords",level:3},{value:"links",id:"links",level:3},{value:"homepage",id:"homepage",level:4},{value:"ui",id:"ui",level:4},{value:"api",id:"api",level:4},{value:"gateway",id:"gateway",level:4},{value:"repository",id:"repository",level:3},{value:"type",id:"type-1",level:4},{value:"url",id:"url",level:4},{value:"directory",id:"directory",level:4},{value:"bugs",id:"bugs",level:3},{value:"url",id:"url-1",level:4},{value:"license",id:"license",level:3}],s={toc:d},u="wrapper";function m(e){let{components:t,...a}=e;return(0,l.kt)(u,(0,n.Z)({},s,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"dappnode-package-dnp-manifest"},"Dappnode Package (DNP) manifest"),(0,l.kt)("p",null,"The Dappnode Package manifest defines all the necessary information for a Dappnode to understand this package:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"IPFS of BZZ hashes to download its docker image"),(0,l.kt)("li",{parentName:"ul"},"Docker related data to configure and run its container"),(0,l.kt)("li",{parentName:"ul"},"Metadata to control how the package is shown in the admin UI.")),(0,l.kt)("h2",{id:"example"},"Example"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'{\n "name": "ipfs.dnp.dappnode.eth",\n "version": "0.2.0",\n "upstreamVersion": "2.6.0-beta",\n "shortDescription": "Distributed file system for storing and accessing data.",\n "description": "Welcome! IPFS is a distributed system for storing and accessing files, websites, applications, and data. If you\u2019re new to IPFS, check our [introductory page](https://ipfs.io/#why) for an easy overview. \\n\\nWith this node you can upload and download files from IPFS using it own fancy web console at [http://ipfs.dappnode:5001/webui](http://ipfs.dappnode:5001/webui). Other Dappnode Packages and external applications can use its API at the endpoint `http://ipfs.dappnode:5001/api`. Go to the [IPFS HTTP API full reference](https://docs.ipfs.io/reference/api/http/) to check all the features of the API.",\n "type": "service",\n "chain": "ethereum",\n "mainService": "webserver",\n "dockerTimeout": "5min",\n "dependencies": {\n "bitcoin.dnp.dappnode.eth": "^0.1.2",\n "swarm.dnp.dappnode.eth": "latest"\n },\n "requirements": {\n "minimumDappnodeVersion": "0.2.0"\n },\n "globalEnvs": {\n "all": "true"\n },\n "architectures": ["linux/amd64", "linux/arm64"],\n "backup": [\n {\n "name": "keystore",\n "path": "/root/.raiden/secret/keystore",\n "service": "validator"\n }\n ],\n "changelog": "Brief summary of the most relevant changes that the user must known before installing",\n "warnings": {\n "onInstall": "You must set the PASSWORD ENV before installing the Dappnode Package in order for the setup to work correctly.",\n "onUpdate": "Your VPN connection will be lost when the VPN finalizes updating. Leave 1-2 minutes after executing the update and then reconnect and refresh this site.",\n "onReset": "You MUST properly close your open channels before resetting this Dappnode Package or you may lose your funds.",\n "onRemove": "You MUST properly close your open channels before removing this Dappnode Package or you may lose your funds."\n },\n "updateAlerts": [\n {\n "from": "0.1.x",\n "to": "0.1.x",\n "message": "Major update to OpenVPN: This update breaks compatibility with the last VPN version. Please read the migration guide: https://migration020.dappnode.io"\n }\n ],\n "disclaimer": {\n "message": "This software is experimental, presented \u201cas is\u201d and inherently carries risks."\n },\n "style": {\n "featuredBackground": "linear-gradient(to right, #323131, #395353)",\n "featuredColor": "white",\n "featuredAvatarFilter": "invert(1)"\n },\n "exposable": [\n {\n "name": "Geth JSON RPC",\n "description": "JSON RPC endpoint for Geth mainnet",\n "serviceName": "beacon_chain",\n "port": 80\n }\n ],\n "author": "Dappnode Association (https://github.com/dappnode)",\n "contributors": [\n "Michael First (https://github.com/developerHanlder)",\n "Michael Second (https://github.com/developerHanlder)"\n ],\n "categories": ["Developer tools", "Blockchain"],\n "keywords": ["DappnodeCore"],\n "links": {\n "homepage": "https://github.com/dappnode/DNP_IPFS#readme",\n "ui": "http://ipfs.dappnode:5001/webui",\n "api": "http://ipfs.dappnode:5001/api/v0",\n "gateway": "http://ipfs.dappnode:8080/ipfs"\n },\n "repository": {\n "type": "git",\n "url": "https://github.com/dappnode/DNP_IPFS.git",\n "directory": "packages/react-dom"\n },\n "bugs": {\n "url": "https://github.com/dappnode/DNP_IPFS/issues"\n },\n "license": "GPL-3.0"\n}\n')),(0,l.kt)("h2",{id:"properties-reference"},"Properties reference"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#name"},"name")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#version"},"version")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#upstreamversion"},"upstreamVersion")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#shortdescription"},"shortDescription")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#description"},"description")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#type"},"type")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"enum")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#chain"},"chain")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"enum")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#mainservice"},"mainService")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#dockertimeout"},"dockerTimeout")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#dependencies"},"dependencies")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#requirements"},"requirements")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#globalenvs"},"globalEnvs")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#architectures"},"architectures")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"enum[]")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#backup"},"backup")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object[]")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#changelog"},"changelog")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#warnings"},"warnings")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#updatealerts"},"updateAlerts")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object[]")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#disclaimer"},"disclaimer")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#style"},"style")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#exposable"},"exposable")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object[]")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#author"},"author")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#contributors"},"contributors")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string[]")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#categories"},"categories")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"enum[]")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#keywords"},"keywords")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string[]")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#links"},"links")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#repository"},"repository")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#bugs"},"bugs")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#license"},"license")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))))),(0,l.kt)("h3",{id:"name"},"name"),(0,l.kt)("p",null,"Dappnode Package ENS name."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"ipfs.dnp.dappnode.eth"\n')),(0,l.kt)("h3",{id:"version"},"version"),(0,l.kt)("p",null,"Dappnode Package semantic version (semver)."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"All instances must conform to this regular expression"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-regex"},"^((([0-9]+).([0-9]+).([0-9]+)))$\n")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"test example:\n",(0,l.kt)("a",{parentName:"li",href:"https://regexr.com/?expression=%5E(((%5B0-9%5D%2B).(%5B0-9%5D%2B).(%5B0-9%5D%2B)))%24&text=0.2.0"},"0.2.0"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"0.2.0"\n')),(0,l.kt)("h3",{id:"upstreamversion"},"upstreamVersion"),(0,l.kt)("p",null,"For Dappnode Packages that only wrap existing software (i.e. Bitcoin node, Ethereum node), the underlying software\nversion can be specified here. It will be shown in the admin UI alongside the field ",(0,l.kt)("inlineCode",{parentName:"p"},"version"),"."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"2.6.0-beta"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"any-text"\n')),(0,l.kt)("h3",{id:"shortdescription"},"shortDescription"),(0,l.kt)("p",null,"Short Dappnode Package description, 6-8 words sentence briefly describing the purpose of this Dappnode Package. The\npurpose is to quickly grab users' attention and clearly define its purpose. Markdown is discouraged as it will NOT be\nrendered on the Dappnode Package store view."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"Distributed file system for storing and accessing data."\n')),(0,l.kt)("h3",{id:"description"},"description"),(0,l.kt)("p",null,"Dappnode Package description. Markdown and links are allowed and ecouraged to give users the option to read more\ninformation about this Dappnode Package."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"Welcome! IPFS is a distributed system for storing and accessing files, websites, applications, and data. If you\u2019re new to IPFS, check our [introductory page](https://ipfs.io/#why) for an easy overview. \\n\\nWith this node you can upload and download files from IPFS using it own fancy web console at [http://ipfs.dappnode:5001/webui](http://ipfs.dappnode:5001/webui). Other Dappnode Packages and external applications can use its API at the endpoint `http://ipfs.dappnode:5001/api`. Go to the [IPFS HTTP API full reference](https://docs.ipfs.io/reference/api/http/) to check all the features of the API."\n')),(0,l.kt)("h3",{id:"type"},"type"),(0,l.kt)("p",null,"Type of this Dappnode Package. It is used to trigger some special features such as core functionality."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"default: ",(0,l.kt)("inlineCode",{parentName:"li"},'"service"')),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"The value of this property ",(0,l.kt)("strong",{parentName:"p"},"must")," be equal to one of the known values below."),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Value"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"service")),(0,l.kt)("td",{parentName:"tr",align:null},"Can have ENVs a depend on library Dappnode Packages")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"library")),(0,l.kt)("td",{parentName:"tr",align:null},"Should not have ENVs and cannot depend on service Dappnode Packages")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"dncore")),(0,l.kt)("td",{parentName:"tr",align:null},"Dappnode Packages that are part of the Dappnode core and have special permissions")))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"service"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"dncore"\n')),(0,l.kt)("h3",{id:"chain"},"chain"),(0,l.kt)("p",null,"Indicate that this Dappnode Package is a blockchain node so the admin UI shows its syncing status"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"The value of this property ",(0,l.kt)("strong",{parentName:"p"},"must")," be equal to one of the known values below."),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Value"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"ethereum")),(0,l.kt)("td",{parentName:"tr",align:null},"Must have an Ethereum JSON RPC exposed internally at port 8545")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"bitcoin")),(0,l.kt)("td",{parentName:"tr",align:null},"Must have a standard Bitcoin JSON API exposed at the default port (8332). Uses the NPM package ",(0,l.kt)("inlineCode",{parentName:"td"},"bitcoin-core"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"monero")),(0,l.kt)("td",{parentName:"tr",align:null},"Must have a Monero API exposed internally at port 18081. Uses the NPM package ",(0,l.kt)("inlineCode",{parentName:"td"},"monero-rpc"))))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"ethereum"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"bitcoin"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"monero"\n')),(0,l.kt)("h3",{id:"mainservice"},"mainService"),(0,l.kt)("p",null,"For multi-service packages, indicate which service is the main one. The root ENS domain of this package will be mapped\nto this service IP."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"webserver"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"backend"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"service1"\n')),(0,l.kt)("h3",{id:"dockertimeout"},"dockerTimeout"),(0,l.kt)("p",null,"Modify the default Docker timeout of 10 seconds. It affects package updates, removals, container restarts, start and\nstop, updating config environments and port mappings. You can either pass a numerical value in seconds or a string\nrepresentation parsed with ",(0,l.kt)("a",{parentName:"p",href:"http://npmjs.com/package/timestring"},"timestring"),". Available from DAPPMANAGER v0.2.36"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"5min"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"60"\n')),(0,l.kt)("h3",{id:"dependencies"},"dependencies"),(0,l.kt)("p",null,"Dappnode Package dependencies. Must be an object where the keys are the Dappnode Package's ENS. The values must be a\nsemantic range, i.e. ",(0,l.kt)("inlineCode",{parentName:"p"},"'0.2.0'"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"'^0.2.1'"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"'*'"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"'latest'"),",\n",(0,l.kt)("inlineCode",{parentName:"p"},"'/ipfs/QmWwMb3XhuCH6JnCF6m6EQzA4mW9pHHtg7rqAfhDr2ofi8'"),"."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," with the following properties:")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required")))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'{\n "bitcoin.dnp.dappnode.eth": "^0.1.2",\n "swarm.dnp.dappnode.eth": "latest"\n}\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'{\n "only-for-dev-1.dappnode.eth": "/ipfs/QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o",\n "only-for-dev-2.dappnode.eth": "/ipfs/zdj7WWeQ43G6JJvLWQWZpyHuAMq6uYWRjkBXFad11vE2LHhQ7"\n}\n')),(0,l.kt)("h3",{id:"requirements"},"requirements"),(0,l.kt)("p",null,"Specify requirements to be met before allowing users to install this Dappnode Package."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," with the following properties:")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"minimumDappnodeVersion")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")))),(0,l.kt)("h4",{id:"minimumdappnodeversion"},"minimumDappnodeVersion"),(0,l.kt)("p",null,"Minimum Dappnode version that includes all the features necessary to run this Dappnode Package."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"All instances must conform to this regular expression"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-regex"},"^((([0-9]+).([0-9]+).([0-9]+)))$\n")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"test example:\n",(0,l.kt)("a",{parentName:"li",href:"https://regexr.com/?expression=%5E(((%5B0-9%5D%2B).(%5B0-9%5D%2B).(%5B0-9%5D%2B)))%24&text=0.2.0"},"0.2.0"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"0.2.0"\n')),(0,l.kt)("h3",{id:"globalenvs"},"globalEnvs"),(0,l.kt)("p",null,"Request the DAPPMANAGER to inject global ENVs to this package's containers"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," with the following properties:")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"all")),(0,l.kt)("td",{parentName:"tr",align:null},"boolean"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")))),(0,l.kt)("h4",{id:"all"},"all"),(0,l.kt)("p",null,"Request the DAPPMANAGER to inject all available global ENVs"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"boolean"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"true"\n')),(0,l.kt)("h3",{id:"architectures"},"architectures"),(0,l.kt)("p",null,"Build and distribute this package in multiple architectures using\n",(0,l.kt)("a",{parentName:"p",href:"https://docs.docker.com/buildx/working-with-buildx/"},"Docker's buildx plugin")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: Array type: ",(0,l.kt)("inlineCode",{parentName:"li"},"enum[]"))),(0,l.kt)("p",null,"All items must be of the type: ",(0,l.kt)("inlineCode",{parentName:"p"},"string")),(0,l.kt)("p",null,"The value of this property ",(0,l.kt)("strong",{parentName:"p"},"must")," be equal to one of the known values below."),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Value"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"linux/amd64")),(0,l.kt)("td",{parentName:"tr",align:null},"Default architecture, x86-64")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"linux/arm64")),(0,l.kt)("td",{parentName:"tr",align:null},"ARM architecture")))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'["linux/amd64", "linux/arm64"]\n')),(0,l.kt)("h3",{id:"backup"},"backup"),(0,l.kt)("p",null,"Allows users to download and restore a backup of key files of this package. If this property is non-empty array, a new\nview will be available in the admin UI for this Dappnode Package. The files or directories specified in the array will\nbe bundled in a tarball. As long as the name properties stay the same, their associated paths can change in future\nversions. Then, when restoring an old backup, the new paths will be associated to files stored under the same name\nkeys. ",(0,l.kt)("strong",{parentName:"p"},"Note:")," it is recommended to only backup lightweight files such as configs, keys or passwords."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: Array type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object[]"))),(0,l.kt)("p",null,"All items must be of the type: ",(0,l.kt)("inlineCode",{parentName:"p"},"object")," with the following properties:"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"name")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"path")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"service")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")))),(0,l.kt)("h4",{id:"name-1"},"name"),(0,l.kt)("p",null,"A key identifier of this file or directory. Its purpose is to allow the path to change in the future."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"keystore"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"config"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"keys"\n')),(0,l.kt)("h4",{id:"path"},"path"),(0,l.kt)("p",null,"Path to the file or directory to backup. It ",(0,l.kt)("strong",{parentName:"p"},"MUST")," be an absolute path (do not use the ",(0,l.kt)("inlineCode",{parentName:"p"},"~")," character) for the backup\ntool to work correctly."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"/root/.raiden/secret/keystore"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"/usr/src/app/config.json"\n')),(0,l.kt)("h4",{id:"service"},"service"),(0,l.kt)("p",null,"Service to which the path belongs to. Must be equal to the name used in the docker-compose services object"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"validator"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"service1"\n')),(0,l.kt)("h3",{id:"changelog"},"changelog"),(0,l.kt)("p",null,"Description of relevant changes of this specific version. Supports markdown and links."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"Brief summary of the most relevant changes that the user must known before installing"\n')),(0,l.kt)("h3",{id:"warnings"},"warnings"),(0,l.kt)("p",null,"Very relevant information that MUST be shown to the user BEFORE executing a specific action in the Dappnode Package's\nlifecycle."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," with the following properties:")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"onInstall")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"onUpdate")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"onReset")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"onRemove")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")))),(0,l.kt)("h4",{id:"oninstall"},"onInstall"),(0,l.kt)("p",null,"Will be shown before installing the Dappnode Package."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"You must set the PASSWORD ENV before installing the Dappnode Package in order for the setup to work correctly."\n')),(0,l.kt)("h4",{id:"onupdate"},"onUpdate"),(0,l.kt)("p",null,"Will be shown before updating the Dappnode Package, not in the first installation."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"Your VPN connection will be lost when the VPN finalizes updating. Leave 1-2 minutes after executing the update and then reconnect and refresh this site."\n')),(0,l.kt)("h4",{id:"onreset"},"onReset"),(0,l.kt)("p",null,"Will be shown before resetting the Dappnode Package."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"You MUST properly close your open channels before resetting this Dappnode Package or you may lose your funds."\n')),(0,l.kt)("h4",{id:"onremove"},"onRemove"),(0,l.kt)("p",null,"Will be shown before removing the Dappnode Package."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"You MUST properly close your open channels before removing this Dappnode Package or you may lose your funds."\n')),(0,l.kt)("h3",{id:"updatealerts"},"updateAlerts"),(0,l.kt)("p",null,"Alerts targeted to a specific update jump."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: Array type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object[]"))),(0,l.kt)("p",null,"All items must be of the type: ",(0,l.kt)("inlineCode",{parentName:"p"},"object")," with the following properties:"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"from")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required")),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"to")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},'"*"'))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"message")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required")),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("h4",{id:"from"},"from"),(0,l.kt)("p",null,"Semver range, show this message when a user updates this Dappnode Package FROM a version that satisfies this range."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"0.1.x"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"^0.2.0"\n')),(0,l.kt)("h4",{id:"to"},"to"),(0,l.kt)("p",null,"Semver range, show this message when a user updates this Dappnode Package TO a version that satisfies this range."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"default: ",(0,l.kt)("inlineCode",{parentName:"li"},'"*"')),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"0.1.x"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"^0.2.0"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"*"\n')),(0,l.kt)("h4",{id:"message"},"message"),(0,l.kt)("p",null,"Alert message to be shown when ",(0,l.kt)("inlineCode",{parentName:"p"},"from")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"to")," ranges are satisfied."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"Major update to OpenVPN: This update breaks compatibility with the last VPN version. Please read the migration guide: https://migration020.dappnode.io"\n')),(0,l.kt)("p",null,"Specific update jump alert."),(0,l.kt)("h3",{id:"disclaimer"},"disclaimer"),(0,l.kt)("p",null,"Disclaimer to be shown to the user on install, and will require the user to approve it."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," with the following properties:")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"message")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))))),(0,l.kt)("h4",{id:"message-1"},"message"),(0,l.kt)("p",null,"The message shown in the pop-up. Markdown and links are allowed."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"This software is experimental, presented \u201cas is\u201d and inherently carries risks."\n')),(0,l.kt)("h3",{id:"style"},"style"),(0,l.kt)("p",null,"Graphic information to control the appearance of Dappnode Package related items in the admin UI."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," with the following properties:")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"featuredBackground")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"featuredColor")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"featuredAvatarFilter")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")))),(0,l.kt)("h4",{id:"featuredbackground"},"featuredBackground"),(0,l.kt)("p",null,"CSS background property to be applied to the Dappnode Package card in the Dappnode Package store if featured. Go to the\n",(0,l.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/docs/Web/CSS/background"},"Mozilla CSS background reference")," for valid values."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"linear-gradient(to right, #323131, #395353)"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"black"\n')),(0,l.kt)("h4",{id:"featuredcolor"},"featuredColor"),(0,l.kt)("p",null,"CSS color property to be applied to the Dappnode Package card in the Dappnode Package store if featured. Go to the\n",(0,l.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/docs/Web/CSS/color"},"Mozilla CSS color reference")," for valid values."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"white"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"#fff"\n')),(0,l.kt)("h4",{id:"featuredavatarfilter"},"featuredAvatarFilter"),(0,l.kt)("p",null,"CSS filter property to be applied to ",(0,l.kt)("inlineCode",{parentName:"p"},"")," component (avatar) of the Dappnode Package card in the Dappnode Package\nstore if featured. Go to the ",(0,l.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/docs/Web/CSS/filter"},"Mozilla CSS filter reference")," for\nvalid values."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"invert(1)"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"grayscale(80%);"\n')),(0,l.kt)("h3",{id:"exposable"},"exposable"),(0,l.kt)("p",null,"Exposable services safe to be in the public internet"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: Array type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object[]"))),(0,l.kt)("p",null,"All items must be of the type: ",(0,l.kt)("inlineCode",{parentName:"p"},"object")," with the following properties:"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"name")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"description")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"serviceName")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"port")),(0,l.kt)("td",{parentName:"tr",align:null},"number"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"fromSubdomain")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")))),(0,l.kt)("h4",{id:"name-2"},"name"),(0,l.kt)("p",null,"Short human readable name of this exposable service"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"Geth JSON RPC"\n')),(0,l.kt)("h4",{id:"description-1"},"description"),(0,l.kt)("p",null,"Description of this exposable service"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"JSON RPC endpoint for Geth mainnet"\n')),(0,l.kt)("h4",{id:"servicename"},"serviceName"),(0,l.kt)("p",null,"Docker compose service this exposable service belongs to. Defaults to the first service."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"beacon_chain"\n')),(0,l.kt)("h4",{id:"port"},"port"),(0,l.kt)("p",null,"Port this exposable service listens to"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"number"))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"80\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"5001\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"8545\n")),(0,l.kt)("p",null,"Single exposable service item"),(0,l.kt)("h3",{id:"author"},"author"),(0,l.kt)("p",null,"Main author of this Dappnode Package. Must follow the structure ",(0,l.kt)("inlineCode",{parentName:"p"},"${name} <${email}> (${githubUserLink})"),"."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"Dappnode Association (https://github.com/dappnode)"\n')),(0,l.kt)("h3",{id:"contributors"},"contributors"),(0,l.kt)("p",null,"Contributing authors of this Dappnode Package."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: Array type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string[]"))),(0,l.kt)("p",null,"All items must be of the type: ",(0,l.kt)("inlineCode",{parentName:"p"},"string")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Contributor author. Must follow the structure ",(0,l.kt)("inlineCode",{parentName:"p"},"${name} <${email}> (${githubUserLink})"),"."),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'[\n "Michael First (https://github.com/developerHanlder)",\n "Michael Second (https://github.com/developerHanlder)"\n]\n')),(0,l.kt)("h3",{id:"categories"},"categories"),(0,l.kt)("p",null,"Categories to organize and group Dappnode Packages in the Dappnode Package store. Only one or two categories maximum\nshould be specified per package. If you feel that any of the current categories represent the nature of your package,\nplease open an issue requesting a new category ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/dappnode/dnp-manifest/issues/new"},"https://github.com/dappnode/dnp-manifest/issues/new")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: Array type: ",(0,l.kt)("inlineCode",{parentName:"li"},"enum[]"))),(0,l.kt)("p",null,"All items must be of the type: ",(0,l.kt)("inlineCode",{parentName:"p"},"string")),(0,l.kt)("p",null,"The value of this property ",(0,l.kt)("strong",{parentName:"p"},"must")," be equal to one of the known values below."),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Value"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Blockchain")),(0,l.kt)("td",{parentName:"tr",align:null},"Blockchain nodes, i.e. Bitcoin, Monero")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Communications")),(0,l.kt)("td",{parentName:"tr",align:null},"Decentralized networking or chat solutions, i.e. Swarm")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Developer tools")),(0,l.kt)("td",{parentName:"tr",align:null},"Packages that their main purpose is to aid in developing, i.e. testnets")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"ETH2.0")),(0,l.kt)("td",{parentName:"tr",align:null},"Packages to participate or use the Eth2.0 network")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Economic incentive")),(0,l.kt)("td",{parentName:"tr",align:null},"Packages that offer an economic incentive or reward to the admin that runs it, i.e. Lightning Network")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Monitoring")),(0,l.kt)("td",{parentName:"tr",align:null},"Packages that track metrics")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Payment channels")),(0,l.kt)("td",{parentName:"tr",align:null},"Packages whose main purpose is to manage or control payment channels, i.e. Raiden")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Storage")),(0,l.kt)("td",{parentName:"tr",align:null},"Decentralized storage solutions, i.e. Swarm")))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'["Developer tools", "Blockchain"]\n')),(0,l.kt)("h3",{id:"keywords"},"keywords"),(0,l.kt)("p",null,"Keywords, relevant and descriptive of this Dappnode Package. They will be shown in the admin UI Dappnode Package store."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: Array type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string[]"))),(0,l.kt)("p",null,"All items must be of the type: ",(0,l.kt)("inlineCode",{parentName:"p"},"string")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Single keyword."),(0,l.kt)("h3",{id:"links"},"links"),(0,l.kt)("p",null,"Various links (URLs) useful for the user of this package. All links will be shown in the dedicated view of this package\nin the admin UI. The predefined links properties below will be shown with concept related icons. Other links will be\nshown as well but with their plain name instead of an icon."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," with the following properties:")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"homepage")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"ui")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"api")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"gateway")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")))),(0,l.kt)("h4",{id:"homepage"},"homepage"),(0,l.kt)("p",null,"Url to an informative homepage for this Dappnode Package. Should be a README or landing website."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"https://github.com/dappnode/DNP_IPFS#readme"\n')),(0,l.kt)("h4",{id:"ui"},"ui"),(0,l.kt)("p",null,"Url to this DNP's Dappnode local UI."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"http://ipfs.dappnode:5001/webui"\n')),(0,l.kt)("h4",{id:"api"},"api"),(0,l.kt)("p",null,"Url to this DNP's Dappnode local HTTP API endpoint."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"http://ipfs.dappnode:5001/api/v0"\n')),(0,l.kt)("h4",{id:"gateway"},"gateway"),(0,l.kt)("p",null,"Url to this DNP's Dappnode local gateway."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"http://ipfs.dappnode:8080/ipfs"\n')),(0,l.kt)("h3",{id:"repository"},"repository"),(0,l.kt)("p",null,"Dappnode Package's repository. Must be a publicly available url that can be handed directly to a VCS program."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," with the following properties:")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"type")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"url")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"directory")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")))),(0,l.kt)("h4",{id:"type-1"},"type"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"git"\n')),(0,l.kt)("h4",{id:"url"},"url"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"https://github.com/dappnode/DNP_IPFS.git"\n')),(0,l.kt)("h4",{id:"directory"},"directory"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"packages/react-dom"\n')),(0,l.kt)("h3",{id:"bugs"},"bugs"),(0,l.kt)("p",null,"Url to your project\u2019s issue tracker."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," with the following properties:")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"url")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))))),(0,l.kt)("h4",{id:"url-1"},"url"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"https://github.com/dappnode/DNP_IPFS/issues"\n')),(0,l.kt)("h3",{id:"license"},"license"),(0,l.kt)("p",null,"Dappnode Package's License."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"GPL-3.0"\n')))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2c509ddc.7435ed98.js b/assets/js/2c509ddc.7435ed98.js new file mode 100644 index 000000000..5f90d57a2 --- /dev/null +++ b/assets/js/2c509ddc.7435ed98.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4840],{4550:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>d,contentTitle:()=>a,default:()=>l,frontMatter:()=>r,metadata:()=>n,toc:()=>h});var i=o(5893),s=o(1151);const r={},a="Manual Subscription",n={id:"smooth/subscribe-to-smooth/manual",title:"Manual Subscription",description:"Would you rather not wait until your next proposed block to subscribe and begin earning rewards? You can take a proactive step and opt for manual subscription right away. During this process, you'll change your validator's fee recipient to Smooth's address, just like in the automatic subscription. However, instead of waiting for your next proposed block, you'll immediately start accumulating rewards from Smooth.",source:"@site/docs/smooth/subscribe-to-smooth/manual.md",sourceDirName:"smooth/subscribe-to-smooth",slug:"/smooth/subscribe-to-smooth/manual",permalink:"/docs/smooth/subscribe-to-smooth/manual",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/subscribe-to-smooth/manual.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Automatic Subscription",permalink:"/docs/smooth/subscribe-to-smooth/automatic"},next:{title:"Unsubscribing from Smooth.",permalink:"/docs/smooth/unsubscribe-from-smooth"}},d={},h=[{value:"Step 1: Change your fee recipient to Smooth's address.",id:"step-1-change-your-fee-recipient-to-smooths-address",level:3},{value:"Step 2: Log in to Smooth's website.",id:"step-2-log-in-to-smooths-website",level:3},{value:"Step 3: Select your validator.",id:"step-3-select-your-validator",level:3},{value:"Scenario 1: Validator is not registered to any MEV relay.",id:"scenario-1-validator-is-not-registered-to-any-mev-relay",level:4},{value:"Scenario 2: Validator registered to MEV relays but without Smooth's address as fee recipient in any relay.",id:"scenario-2-validator-registered-to-mev-relays-but-without-smooths-address-as-fee-recipient-in-any-relay",level:4},{value:"Scenario 3: Validator does not have the Smooth's address as fee recipient in some relays.",id:"scenario-3-validator-does-not-have-the-smooths-address-as-fee-recipient-in-some-relays",level:4},{value:"Scenario 4: Validator is registered to at least one MEV relay and has the correct fee recipient set.",id:"scenario-4-validator-is-registered-to-at-least-one-mev-relay-and-has-the-correct-fee-recipient-set",level:4},{value:"Step 4: Confirm Relays check.",id:"step-4-confirm-relays-check",level:3},{value:"Step 5: Make the deposit and subscribe!",id:"step-5-make-the-deposit-and-subscribe",level:3},{value:"Troubleshooting.",id:"troubleshooting",level:2}];function c(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",p:"p",strong:"strong",...(0,s.a)(),...e.components},{Details:r}=t;return r||function(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"manual-subscription",children:"Manual Subscription"}),"\n",(0,i.jsxs)(t.p,{children:["Would you rather not wait until your next proposed block to subscribe and begin earning rewards? You can take a proactive step and opt for manual subscription right away. During this process, you'll change your validator's fee recipient to Smooth's address, just like in the automatic subscription. However, instead of waiting for your next proposed block, you'll immediately start accumulating rewards from ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),"."]}),"\n",(0,i.jsxs)(t.p,{children:["The manual subscription is done through ",(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth's website"})}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"step-1-change-your-fee-recipient-to-smooths-address",children:"Step 1: Change your fee recipient to Smooth's address."}),"\n",(0,i.jsxs)(t.p,{children:["Change the fee recipient of your validator to Smooth's address, just as if you were subscribing automatically. In Dappnode, this process is as simple as changing the fee recipient in your ",(0,i.jsx)(t.a,{href:"http://brain.web3signer.dappnode/",children:"staking brain"}),"."]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"fee_recipient",src:o(4257).Z+"",width:"2728",height:"552"})}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"This step is extremely important"}),". Make sure you're changing the fee recipient of the validators you are going to manually subscribe and that the fee recipient is correctly set to Smooth's address (",(0,i.jsx)(t.code,{children:"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"}),"). If a subscribed validator proposes a block with an incorrect fee recipient, it will be banned from ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," and will not be able to participate in it again."]}),"\n",(0,i.jsx)(t.admonition,{title:"Keep the fee recipient set to Smooth's address!",type:"danger",children:(0,i.jsxs)(t.p,{children:["It is crucial that you keep the fee recipient of your validator set to Smooth's address (",(0,i.jsx)(t.code,{children:"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"}),") as long as it is subscribed to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". If, at any point, you change the fee recipient of your validator and propose a block without unsubscribing first, you will be banned from ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," and will not be able to participate in it again."]})}),"\n",(0,i.jsx)(t.h3,{id:"step-2-log-in-to-smooths-website",children:"Step 2: Log in to Smooth's website."}),"\n",(0,i.jsxs)(t.p,{children:["Go to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth's website"})," and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear."]}),"\n",(0,i.jsx)(t.h3,{id:"step-3-select-your-validator",children:"Step 3: Select your validator."}),"\n",(0,i.jsxs)(t.p,{children:["Select the validator you want to subscribe to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),' by clicking on the "Subscribe" button.\n',(0,i.jsx)(t.img,{alt:"my_validators",src:o(2824).Z+"",width:"1033",height:"393"})]}),"\n",(0,i.jsxs)(t.p,{children:['When clicking on the "Subscribe" button, ',(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," will check if your validator is registered to any MEV relay. If it is, it will also check if the fee recipient of your validator is set to Smooth's address in each relay. ",(0,i.jsx)(t.strong,{children:"Four different dialogs can appear"}),", depending on the state of your validator and the MEV relays it is registered to."]}),"\n",(0,i.jsx)(t.h4,{id:"scenario-1-validator-is-not-registered-to-any-mev-relay",children:"Scenario 1: Validator is not registered to any MEV relay."}),"\n",(0,i.jsx)("p",{align:"center",children:(0,i.jsx)("img",{src:"/img/smooth_no_relays.png",alt:"no_relays",width:"400"})}),"\n",(0,i.jsxs)(t.p,{children:['When doing a manual subscription, it is obligatory to be registered in at least one MEV relay. In Dappnode, registering and using a relay is as simple as selecting the desired relay in the "MEV Boost" Card at the ',(0,i.jsx)(t.a,{href:"http://my.dappnode/stakers/ethereum/",children:"Stakers UI"}),". Once you have selected at least one relay, you can go back to the ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),' website and click on the "Subscribe" button again.']}),"\n",(0,i.jsx)(t.h4,{id:"scenario-2-validator-registered-to-mev-relays-but-without-smooths-address-as-fee-recipient-in-any-relay",children:"Scenario 2: Validator registered to MEV relays but without Smooth's address as fee recipient in any relay."}),"\n",(0,i.jsx)("p",{align:"center",children:(0,i.jsx)("img",{src:"/img/smooth_subscription_norelays.png",alt:"incorrect_fee_recipient",width:"400"})}),"\n",(0,i.jsx)(t.p,{children:"Please make sure that you have correctly done the first step of this guide! This dialog means that not a single relay has reflected your fee recipient change to Smooth's address. If running a dappnode, make sure your MEV boost package is running!"}),"\n",(0,i.jsx)(t.admonition,{type:"info",children:(0,i.jsx)(t.p,{children:'It can take up to a few minutes for relays to reflect your fee recipient change. If you have already changed your fee recipient but this alert still appears, please check the "Troubleshooting" section down below for more information.'})}),"\n",(0,i.jsx)(t.h4,{id:"scenario-3-validator-does-not-have-the-smooths-address-as-fee-recipient-in-some-relays",children:"Scenario 3: Validator does not have the Smooth's address as fee recipient in some relays."}),"\n",(0,i.jsx)("p",{align:"center",children:(0,i.jsx)("img",{src:"/img/smooth_incorrect_fee_recipient.png",alt:"incorrect_fee_recipient",width:"400"})}),"\n",(0,i.jsxs)(t.p,{children:["If this dialog appears, it means that your validator's fee recipient is set to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," in some relays while also being set to an incorrect address in others. This situation likely arises because your validator was registered in a relay it no longer uses, and the fee recipient in that specific relay wasn't updated accordingly."]}),"\n",(0,i.jsx)(t.admonition,{type:"info",children:(0,i.jsx)(t.p,{children:'Relays that you no longer use won\'t reflect the fee recipient changes you did for each validator in your staking brain. If you have already changed your fee recipient but the warning still appears, please check the "Troubleshooting" section down below for more information.'})}),"\n",(0,i.jsx)(t.h4,{id:"scenario-4-validator-is-registered-to-at-least-one-mev-relay-and-has-the-correct-fee-recipient-set",children:"Scenario 4: Validator is registered to at least one MEV relay and has the correct fee recipient set."}),"\n",(0,i.jsx)("p",{align:"center",children:(0,i.jsx)("img",{src:"/img/smooth_correct_fee_recipient.png",alt:"correct_fee_recipient",width:"400"})}),"\n",(0,i.jsxs)(t.p,{children:["This is the dialog you want to see! If you see this dialog, it means that your validator is registered to at least one MEV relay, and that the fee recipient of your validator is set to Smooth's address in all relays it has been registered to. In other words, this means that your validator is ready to subscribe to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),"!"]}),"\n",(0,i.jsx)(t.h3,{id:"step-4-confirm-relays-check",children:"Step 4: Confirm Relays check."}),"\n",(0,i.jsx)("p",{align:"center",children:(0,i.jsx)("img",{src:"/img/smooth_mev_blocks.png",alt:"mev_blocks",width:"400"})}),"\n",(0,i.jsx)(t.p,{children:'This step is just a confirmation of the relays your validator has the correct fee recipient set in. Click on "Next" to continue the subscription process, we\'re almost there!'}),"\n",(0,i.jsx)(t.h3,{id:"step-5-make-the-deposit-and-subscribe",children:"Step 5: Make the deposit and subscribe!"}),"\n",(0,i.jsx)("p",{align:"center",children:(0,i.jsx)("img",{src:"/img/smooth_make_deposit.png",alt:"deposit",width:"400"})}),"\n",(0,i.jsxs)(t.p,{children:["This is the last step! Here, you will make the deposit to subscribe your validator to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". The deposit is a one-time upfront payment that will be returned to you as Claimable rewards when proposing your first block to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". The deposit is 0.01 ETH, and it is used to prevent spam and malicious validators from subscribing to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),"."]}),"\n",(0,i.jsxs)(t.p,{children:["Once the deposit transaction is processed by the chain, your validator will be subscribed to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," and you will start receiving rewards from other members of the pool!"]}),"\n",(0,i.jsx)("p",{align:"center",children:(0,i.jsx)("img",{src:"/img/smooth_subscribe_success.png",alt:"subscription_success",width:"400"})}),"\n",(0,i.jsx)(t.admonition,{type:"caution",children:(0,i.jsxs)(t.p,{children:['Since the Oracle operates with only finalized data, it will take up to 35 minutes to process your subscription. Your "My Validator" table will be updated instantly, but it may take a while to see how "Total Subscribers" counter increases. To know more, visit the ',(0,i.jsx)(t.a,{href:"/docs/smooth/deep-dive-into-smooth/overview",children:"Deep Dive into Smooth"})," section."]})}),"\n",(0,i.jsx)(t.h2,{id:"troubleshooting",children:"Troubleshooting."}),"\n",(0,i.jsxs)(r,{children:[(0,i.jsx)("summary",{children:(0,i.jsxs)("strong",{children:["I have changed my fee recipient but the ",(0,i.jsx)("i",{children:'"Fee recipient warning"'})," warning still appears!"]})}),(0,i.jsxs)(t.p,{children:["If you have changed your fee recipient to Smooth's address (",(0,i.jsx)("code",{children:"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"}),") but this warning still appears, it could be because of two reasons:"]}),(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"The relays you are registered to are not reflecting the change in the fee recipient yet. It can take up to a few minutes for the relays to reflect your fee recipient update. This is something that is out of Smooth's control. We recommend you to wait a few minutes and try again."}),(0,i.jsxs)("li",{children:["The fee recipient is only updated in your current ",(0,i.jsx)("strong",{children:"active"})," relays. This means that if you used to be registered to a relay, but you are not using it anymore, the fee recipient of your validator will not be updated in that relay. This is something expected and that it wont affect your validator's subscription to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". If you want to update the fee recipient in the relays you are no longer registered to, you can quickly register and unregister again to the outdated relays to force an update the fee recipient there."]})]}),(0,i.jsxs)(t.p,{children:["To clarify: As long as the fee recipient of your validator is set to Smooth's address in your ",(0,i.jsx)("a",{href:"http://brain.web3signer.dappnode/",children:"staking brain"}),", you can continue the subscription process normally."]})]})]})}function l(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},4257:(e,t,o)=>{o.d(t,{Z:()=>i});const i=o.p+"assets/images/smooth_fee_recipient-9a97308ed0c601ccc84b0295efe34cd4.png"},2824:(e,t,o)=>{o.d(t,{Z:()=>i});const i=o.p+"assets/images/smooth_my_validators-72848a79b68c9a1ab67d754537f6e2c9.png"},1151:(e,t,o)=>{o.d(t,{Z:()=>n,a:()=>a});var i=o(7294);const s={},r=i.createContext(s);function a(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function n(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2c509ddc.b72b7b21.js b/assets/js/2c509ddc.b72b7b21.js deleted file mode 100644 index 7ae089431..000000000 --- a/assets/js/2c509ddc.b72b7b21.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4840],{4137:(e,t,o)=>{o.d(t,{Zo:()=>c,kt:()=>m});var a=o(7294);function i(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function r(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,a)}return o}function s(e){for(var t=1;t =0||(i[o]=e[o]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a =0||Object.prototype.propertyIsEnumerable.call(e,o)&&(i[o]=e[o])}return i}var l=a.createContext({}),p=function(e){var t=a.useContext(l),o=t;return e&&(o="function"==typeof e?e(t):s(s({},t),e)),o},c=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},d="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var o=e.components,i=e.mdxType,r=e.originalType,l=e.parentName,c=n(e,["components","mdxType","originalType","parentName"]),d=p(o),u=i,m=d["".concat(l,".").concat(u)]||d[u]||h[u]||r;return o?a.createElement(m,s(s({ref:t},c),{},{components:o})):a.createElement(m,s({ref:t},c))}));function m(e,t){var o=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=o.length,s=new Array(r);s[0]=u;var n={};for(var l in t)hasOwnProperty.call(t,l)&&(n[l]=t[l]);n.originalType=e,n[d]="string"==typeof e?e:i,s[1]=n;for(var p=2;p {o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>n,toc:()=>p});var a=o(7462),i=(o(7294),o(4137));const r={},s="Manual Subscription",n={unversionedId:"smooth/subscribe-to-smooth/manual",id:"smooth/subscribe-to-smooth/manual",title:"Manual Subscription",description:"Would you rather not wait until your next proposed block to subscribe and begin earning rewards? You can take a proactive step and opt for manual subscription right away. During this process, you'll change your validator's fee recipient to Smooth's address, just like in the automatic subscription. However, instead of waiting for your next proposed block, you'll immediately start accumulating rewards from Smooth.",source:"@site/docs/smooth/subscribe-to-smooth/manual.md",sourceDirName:"smooth/subscribe-to-smooth",slug:"/smooth/subscribe-to-smooth/manual",permalink:"/docs/smooth/subscribe-to-smooth/manual",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/subscribe-to-smooth/manual.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Automatic Subscription",permalink:"/docs/smooth/subscribe-to-smooth/automatic"},next:{title:"Unsubscribing from Smooth.",permalink:"/docs/smooth/unsubscribe-from-smooth"}},l={},p=[{value:"Step 1: Change your fee recipient to Smooth's address.",id:"step-1-change-your-fee-recipient-to-smooths-address",level:3},{value:"Step 2: Log in to Smooth's website.",id:"step-2-log-in-to-smooths-website",level:3},{value:"Step 3: Select your validator.",id:"step-3-select-your-validator",level:3},{value:"Scenario 1: Validator is not registered to any MEV relay.",id:"scenario-1-validator-is-not-registered-to-any-mev-relay",level:4},{value:"Scenario 2: Validator registered to MEV relays but without Smooth's address as fee recipient in any relay.",id:"scenario-2-validator-registered-to-mev-relays-but-without-smooths-address-as-fee-recipient-in-any-relay",level:4},{value:"Scenario 3: Validator does not have the Smooth's address as fee recipient in some relays.",id:"scenario-3-validator-does-not-have-the-smooths-address-as-fee-recipient-in-some-relays",level:4},{value:"Scenario 4: Validator is registered to at least one MEV relay and has the correct fee recipient set.",id:"scenario-4-validator-is-registered-to-at-least-one-mev-relay-and-has-the-correct-fee-recipient-set",level:4},{value:"Step 4: Confirm Relays check.",id:"step-4-confirm-relays-check",level:3},{value:"Step 5: Make the deposit and subscribe!",id:"step-5-make-the-deposit-and-subscribe",level:3},{value:"Troubleshooting.",id:"troubleshooting",level:2}],c={toc:p},d="wrapper";function h(e){let{components:t,...r}=e;return(0,i.kt)(d,(0,a.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"manual-subscription"},"Manual Subscription"),(0,i.kt)("p",null,"Would you rather not wait until your next proposed block to subscribe and begin earning rewards? You can take a proactive step and opt for manual subscription right away. During this process, you'll change your validator's fee recipient to Smooth's address, just like in the automatic subscription. However, instead of waiting for your next proposed block, you'll immediately start accumulating rewards from ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),"."),(0,i.kt)("p",null,"The manual subscription is done through ",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("a",{parentName:"strong",href:"https://smooth.dappnode.io/"},"Smooth's website")),". "),(0,i.kt)("h3",{id:"step-1-change-your-fee-recipient-to-smooths-address"},"Step 1: Change your fee recipient to Smooth's address."),(0,i.kt)("p",null,"Change the fee recipient of your validator to Smooth's address, just as if you were subscribing automatically. In Dappnode, this process is as simple as changing the fee recipient in your ",(0,i.kt)("a",{parentName:"p",href:"http://brain.web3signer.dappnode/"},"staking brain"),"."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"fee_recipient",src:o(4257).Z,width:"2728",height:"552"})),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"This step is extremely important"),". Make sure you're changing the fee recipient of the validators you are going to manually subscribe and that the fee recipient is correctly set to Smooth's address (",(0,i.kt)("inlineCode",{parentName:"p"},"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"),"). If a subscribed validator proposes a block with an incorrect fee recipient, it will be banned from ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," and will not be able to participate in it again."),(0,i.kt)("admonition",{title:"Keep the fee recipient set to Smooth's address!",type:"danger"},(0,i.kt)("p",{parentName:"admonition"},"It is crucial that you keep the fee recipient of your validator set to Smooth's address (",(0,i.kt)("inlineCode",{parentName:"p"},"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"),") as long as it is subscribed to ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". If, at any point, you change the fee recipient of your validator and propose a block without unsubscribing first, you will be banned from ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," and will not be able to participate in it again.")),(0,i.kt)("h3",{id:"step-2-log-in-to-smooths-website"},"Step 2: Log in to Smooth's website."),(0,i.kt)("p",null,"Go to ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth's website")," and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear."),(0,i.kt)("h3",{id:"step-3-select-your-validator"},"Step 3: Select your validator."),(0,i.kt)("p",null,"Select the validator you want to subscribe to ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),' by clicking on the "Subscribe" button.\n',(0,i.kt)("img",{alt:"my_validators",src:o(2824).Z,width:"1033",height:"393"})),(0,i.kt)("p",null,'When clicking on the "Subscribe" button, ',(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," will check if your validator is registered to any MEV relay. If it is, it will also check if the fee recipient of your validator is set to Smooth's address in each relay. ",(0,i.kt)("strong",{parentName:"p"},"Four different dialogs can appear"),", depending on the state of your validator and the MEV relays it is registered to."),(0,i.kt)("h4",{id:"scenario-1-validator-is-not-registered-to-any-mev-relay"},"Scenario 1: Validator is not registered to any MEV relay."),(0,i.kt)("p",{align:"center"},(0,i.kt)("img",{src:"/img/smooth_no_relays.png",alt:"no_relays",width:"400"})),(0,i.kt)("p",null,'When doing a manual subscription, it is obligatory to be registered in at least one MEV relay. In Dappnode, registering and using a relay is as simple as selecting the desired relay in the "MEV Boost" Card at the ',(0,i.kt)("a",{parentName:"p",href:"http://my.dappnode/stakers/ethereum/"},"Stakers UI"),". Once you have selected at least one relay, you can go back to the ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),' website and click on the "Subscribe" button again.'),(0,i.kt)("h4",{id:"scenario-2-validator-registered-to-mev-relays-but-without-smooths-address-as-fee-recipient-in-any-relay"},"Scenario 2: Validator registered to MEV relays but without Smooth's address as fee recipient in any relay."),(0,i.kt)("p",{align:"center"},(0,i.kt)("img",{src:"/img/smooth_subscription_norelays.png",alt:"incorrect_fee_recipient",width:"400"})),(0,i.kt)("p",null,"Please make sure that you have correctly done the first step of this guide! This dialog means that not a single relay has reflected your fee recipient change to Smooth's address. If running a dappnode, make sure your MEV boost package is running!"),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},'It can take up to a few minutes for relays to reflect your fee recipient change. If you have already changed your fee recipient but this alert still appears, please check the "Troubleshooting" section down below for more information.')),(0,i.kt)("h4",{id:"scenario-3-validator-does-not-have-the-smooths-address-as-fee-recipient-in-some-relays"},"Scenario 3: Validator does not have the Smooth's address as fee recipient in some relays."),(0,i.kt)("p",{align:"center"},(0,i.kt)("img",{src:"/img/smooth_incorrect_fee_recipient.png",alt:"incorrect_fee_recipient",width:"400"})),(0,i.kt)("p",null,"If this dialog appears, it means that your validator's fee recipient is set to ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," in some relays while also being set to an incorrect address in others. This situation likely arises because your validator was registered in a relay it no longer uses, and the fee recipient in that specific relay wasn't updated accordingly."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},'Relays that you no longer use won\'t reflect the fee recipient changes you did for each validator in your staking brain. If you have already changed your fee recipient but the warning still appears, please check the "Troubleshooting" section down below for more information.')),(0,i.kt)("h4",{id:"scenario-4-validator-is-registered-to-at-least-one-mev-relay-and-has-the-correct-fee-recipient-set"},"Scenario 4: Validator is registered to at least one MEV relay and has the correct fee recipient set."),(0,i.kt)("p",{align:"center"},(0,i.kt)("img",{src:"/img/smooth_correct_fee_recipient.png",alt:"correct_fee_recipient",width:"400"})),(0,i.kt)("p",null,"This is the dialog you want to see! If you see this dialog, it means that your validator is registered to at least one MEV relay, and that the fee recipient of your validator is set to Smooth's address in all relays it has been registered to. In other words, this means that your validator is ready to subscribe to ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),"!"),(0,i.kt)("h3",{id:"step-4-confirm-relays-check"},"Step 4: Confirm Relays check."),(0,i.kt)("p",{align:"center"},(0,i.kt)("img",{src:"/img/smooth_mev_blocks.png",alt:"mev_blocks",width:"400"})),(0,i.kt)("p",null,'This step is just a confirmation of the relays your validator has the correct fee recipient set in. Click on "Next" to continue the subscription process, we\'re almost there!'),(0,i.kt)("h3",{id:"step-5-make-the-deposit-and-subscribe"},"Step 5: Make the deposit and subscribe!"),(0,i.kt)("p",{align:"center"},(0,i.kt)("img",{src:"/img/smooth_make_deposit.png",alt:"deposit",width:"400"})),(0,i.kt)("p",null,"This is the last step! Here, you will make the deposit to subscribe your validator to ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". The deposit is a one-time upfront payment that will be returned to you as Claimable rewards when proposing your first block to ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". The deposit is 0.01 ETH, and it is used to prevent spam and malicious validators from subscribing to ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),"."),(0,i.kt)("p",null,"Once the deposit transaction is processed by the chain, your validator will be subscribed to ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," and you will start receiving rewards from other members of the pool!"),(0,i.kt)("p",{align:"center"},(0,i.kt)("img",{src:"/img/smooth_subscribe_success.png",alt:"subscription_success",width:"400"})),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("p",{parentName:"admonition"},'Since the Oracle operates with only finalized data, it will take up to 35 minutes to process your subscription. Your "My Validator" table will be updated instantly, but it may take a while to see how "Total Subscribers" counter increases. To know more, visit the ',(0,i.kt)("a",{parentName:"p",href:"/docs/smooth/deep-dive-into-smooth/overview"},"Deep Dive into Smooth")," section.")),(0,i.kt)("h2",{id:"troubleshooting"},"Troubleshooting."),(0,i.kt)("details",null,(0,i.kt)("summary",null,(0,i.kt)("strong",null,"I have changed my fee recipient but the ",(0,i.kt)("i",null,'"Fee recipient warning"')," warning still appears!")),"If you have changed your fee recipient to Smooth's address (",(0,i.kt)("code",null,"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"),") but this warning still appears, it could be because of two reasons:",(0,i.kt)("ul",null,(0,i.kt)("li",null,"The relays you are registered to are not reflecting the change in the fee recipient yet. It can take up to a few minutes for the relays to reflect your fee recipient update. This is something that is out of Smooth's control. We recommend you to wait a few minutes and try again."),(0,i.kt)("li",null,"The fee recipient is only updated in your current ",(0,i.kt)("strong",null,"active")," relays. This means that if you used to be registered to a relay, but you are not using it anymore, the fee recipient of your validator will not be updated in that relay. This is something expected and that it wont affect your validator's subscription to [Smooth](https://smooth.dappnode.io/). If you want to update the fee recipient in the relays you are no longer registered to, you can quickly register and unregister again to the outdated relays to force an update the fee recipient there.")),"To clarify: As long as the fee recipient of your validator is set to Smooth's address in your ",(0,i.kt)("a",{href:"http://brain.web3signer.dappnode/"},"staking brain"),", you can continue the subscription process normally."))}h.isMDXComponent=!0},4257:(e,t,o)=>{o.d(t,{Z:()=>a});const a=o.p+"assets/images/smooth_fee_recipient-9a97308ed0c601ccc84b0295efe34cd4.png"},2824:(e,t,o)=>{o.d(t,{Z:()=>a});const a=o.p+"assets/images/smooth_my_validators-72848a79b68c9a1ab67d754537f6e2c9.png"}}]); \ No newline at end of file diff --git a/assets/js/3093fe32.4c5bc10e.js b/assets/js/3093fe32.4c5bc10e.js new file mode 100644 index 000000000..ea3cd5ccc --- /dev/null +++ b/assets/js/3093fe32.4c5bc10e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[641],{9024:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var t=n(5893),i=n(1151);const a={},r="What is Dappnode Cloud?",s={id:"user/dappnode-cloud/overview",title:"What is Dappnode Cloud?",description:"Dappnode Cloud is a service that allows users to deploy a Dappnode in a cloud provider so it can be tested without the need for physical hardware. We provide easy pre-configured instances for the main cloud providers (AWS for now, more to come later) to continue to make the deployment of web3 infrastructrure accessible and hassle-free for everyone. It consists of a Dappnode image deployed on a machine instance from a cloud provider, eliminating the need to invest in hardware in order to test Dappnode.",source:"@site/docs/user/dappnode-cloud/overview.md",sourceDirName:"user/dappnode-cloud",slug:"/user/dappnode-cloud/overview",permalink:"/docs/user/dappnode-cloud/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/dappnode-cloud/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Troubleshooting",permalink:"/docs/user/ethical-metrics/troubleshooting"},next:{title:"AWS",permalink:"/docs/user/dappnode-cloud/providers/aws/overview"}},d={},l=[{value:"Why using Dappnode Cloud?",id:"why-using-dappnode-cloud",level:2},{value:"No Initial Hardware Investment \ud83d\udcb0",id:"no-initial-hardware-investment-",level:3},{value:"Stop when you want \ud83e\uddd1\u200d\ud83d\udd27\ufe0f",id:"stop-when-you-want-\ufe0f",level:3},{value:"Scalability \ud83d\udcc8",id:"scalability-",level:3},{value:"Physical or Cloud?",id:"physical-or-cloud",level:2},{value:"1. Economics \ud83d\udcb2",id:"1-economics-",level:3},{value:"2. Decentralization \ud83d\uddfd",id:"2-decentralization-",level:3},{value:"Use cases",id:"use-cases",level:2},{value:"Blockchain participation & Solo Staking \u26d3\ufe0f",id:"blockchain-participation--solo-staking-\ufe0f",level:3},{value:"Testing \ud83e\uddea",id:"testing-",level:3},{value:"Developing \ud83e\uddd1\u200d\ud83d\udcbb\ufe0f",id:"developing-\ufe0f",level:3}];function c(e){const o={admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",p:"p",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h1,{id:"what-is-dappnode-cloud",children:"What is Dappnode Cloud?"}),"\n",(0,t.jsx)(o.p,{children:"Dappnode Cloud is a service that allows users to deploy a Dappnode in a cloud provider so it can be tested without the need for physical hardware. We provide easy pre-configured instances for the main cloud providers (AWS for now, more to come later) to continue to make the deployment of web3 infrastructrure accessible and hassle-free for everyone. It consists of a Dappnode image deployed on a machine instance from a cloud provider, eliminating the need to invest in hardware in order to test Dappnode."}),"\n",(0,t.jsx)(o.admonition,{type:"tip",children:(0,t.jsx)(o.p,{children:"This allows you to run your decentralized applications more efficiently and cost-effectively, as you can customize your hardware specifications to meet your needs."})}),"\n",(0,t.jsx)(o.h2,{id:"why-using-dappnode-cloud",children:"Why using Dappnode Cloud?"}),"\n",(0,t.jsx)(o.p,{children:"Dappnode Cloud offers numerous advantages over traditional hardware-based setups. By leveraging cloud infrastructure, you can bypass the complexities and limitations associated with physical hardware. Here are the key benefits that make Dappnode Cloud an attractive option:"}),"\n",(0,t.jsx)(o.h3,{id:"no-initial-hardware-investment-",children:"No Initial Hardware Investment \ud83d\udcb0"}),"\n",(0,t.jsx)(o.p,{children:"With Dappnode Cloud, there is no need to purchase an entire new machine every time you need a new Dappnode. This significantly reduces the initial cost barrier, allowing you to test Dappnode before you decide to install it in a physical machine or to quickly deploy a new Dappnode without having to purchase a new machine."}),"\n",(0,t.jsx)(o.h3,{id:"stop-when-you-want-\ufe0f",children:"Stop when you want \ud83e\uddd1\u200d\ud83d\udd27\ufe0f"}),"\n",(0,t.jsx)(o.p,{children:"For short stints, Dappnode Cloud allows you to deploy and also to stop running your Dappnode as soon as you have performed the tasks you wanted to do, with no electronic waste or an unallocated physical machine on your side."}),"\n",(0,t.jsx)(o.h3,{id:"scalability-",children:"Scalability \ud83d\udcc8"}),"\n",(0,t.jsx)(o.p,{children:"With Dappnode Cloud, you can easily scale your resources up or down based on your current needs. Whether you're experiencing a lack of storage or you need a few more nodes quickly, you can adjust your cloud resources accordingly without the constraints of physical hardware limitations."}),"\n",(0,t.jsx)(o.h2,{id:"physical-or-cloud",children:"Physical or Cloud?"}),"\n",(0,t.jsx)(o.p,{children:"It is much better to run a physical Dappnode at your place for these 2 main reasons:"}),"\n",(0,t.jsx)(o.h3,{id:"1-economics-",children:"1. Economics \ud83d\udcb2"}),"\n",(0,t.jsx)(o.p,{children:"A physical machine has a higher initial cost, but leverages your existing internet connection and consumes less energy than your fridge. This initial cost is pretty much the only cost you will have for the lifetime of the hardware you use.\nCloud servers have monthly costs associated with it that never go away, resulting in higher cost in the long term."}),"\n",(0,t.jsx)(o.p,{children:"In summary, you will be better off with a physical machine if you plan to use your Dappnode for a long time, and better off with a Dappnode Cloud if you only want to use the instance for a short period of time."}),"\n",(0,t.jsx)(o.h3,{id:"2-decentralization-",children:"2. Decentralization \ud83d\uddfd"}),"\n",(0,t.jsx)(o.p,{children:"The networks you will run on your Dapppnode become more resilient to corporate capture, government interference and localized events the more decentralized their nodes are. By running a Node in the cloud it is very likely that there is already a node of that network in the same data center, therefore adding no extra value to the decentralization of the network.\nIf instead you run the same node in a home setup from your home, you are adding a node that is much harder to censor, block, locate and subjugate than a node controlled by a big infrastructure corporation."}),"\n",(0,t.jsx)(o.p,{children:'Remember, "The Cloud" is just someone else\'s computer.'}),"\n",(0,t.jsx)(o.h2,{id:"use-cases",children:"Use cases"}),"\n",(0,t.jsx)(o.p,{children:"Dappnode Cloud offers versatile solutions for various users, providing the flexibility and reliability needed to meet your goals. Here are some of the primary use cases:"}),"\n",(0,t.jsx)(o.h3,{id:"blockchain-participation--solo-staking-\ufe0f",children:"Blockchain participation & Solo Staking \u26d3\ufe0f"}),"\n",(0,t.jsx)(o.p,{children:"If obtaining hardware is not an option, Dappnode Cloud allows you to run a full node or even host your Ethereum or Gnosis validators without worrying about hardware requirements, internet connectivity, or power outages. This ensures continuous participation in the blockchain network with minimal hassle."}),"\n",(0,t.jsx)(o.h3,{id:"testing-",children:"Testing \ud83e\uddea"}),"\n",(0,t.jsx)(o.p,{children:"For those considering purchasing their own Dappnode but still uncertain, Dappnode Cloud provides an excellent opportunity to run a temporary Dappnode. This allows you to demo the system without facing the initial cost barrier, helping you make an informed decision."}),"\n",(0,t.jsx)(o.h3,{id:"developing-\ufe0f",children:"Developing \ud83e\uddd1\u200d\ud83d\udcbb\ufe0f"}),"\n",(0,t.jsx)(o.p,{children:"Dappnode Cloud is an excellent choice for developers who need a reliable and scalable environment to test and deploy dApps. Without the constraints of local hardware, developers can quickly iterate and deploy their applications, leveraging the power of cloud computing to simulate real-world conditions."})]})}function p(e={}){const{wrapper:o}={...(0,i.a)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},1151:(e,o,n)=>{n.d(o,{Z:()=>s,a:()=>r});var t=n(7294);const i={},a=t.createContext(i);function r(e){const o=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function s(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(a.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3093fe32.b5b7438e.js b/assets/js/3093fe32.b5b7438e.js deleted file mode 100644 index e50b47401..000000000 --- a/assets/js/3093fe32.b5b7438e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[641],{4137:(e,o,t)=>{t.d(o,{Zo:()=>c,kt:()=>y});var n=t(7294);function a(e,o,t){return o in e?Object.defineProperty(e,o,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[o]=t,e}function r(e,o){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);o&&(n=n.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),t.push.apply(t,n)}return t}function i(e){for(var o=1;o =0||(a[t]=e[t]);return a}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=n.createContext({}),d=function(e){var o=n.useContext(s),t=o;return e&&(t="function"==typeof e?e(o):i(i({},o),e)),t},c=function(e){var o=d(e.components);return n.createElement(s.Provider,{value:o},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var o=e.children;return n.createElement(n.Fragment,{},o)}},h=n.forwardRef((function(e,o){var t=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=d(t),h=a,y=u["".concat(s,".").concat(h)]||u[h]||p[h]||r;return t?n.createElement(y,i(i({ref:o},c),{},{components:t})):n.createElement(y,i({ref:o},c))}));function y(e,o){var t=arguments,a=o&&o.mdxType;if("string"==typeof e||a){var r=t.length,i=new Array(r);i[0]=h;var l={};for(var s in o)hasOwnProperty.call(o,s)&&(l[s]=o[s]);l.originalType=e,l[u]="string"==typeof e?e:a,i[1]=l;for(var d=2;d {t.r(o),t.d(o,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var n=t(7462),a=(t(7294),t(4137));const r={},i="What is Dappnode Cloud?",l={unversionedId:"user/dappnode-cloud/overview",id:"user/dappnode-cloud/overview",title:"What is Dappnode Cloud?",description:"Dappnode Cloud is a service that allows users to deploy a Dappnode in a cloud provider so it can be tested without the need for physical hardware. We provide easy pre-configured instances for the main cloud providers (AWS for now, more to come later) to continue to make the deployment of web3 infrastructrure accessible and hassle-free for everyone. It consists of a Dappnode image deployed on a machine instance from a cloud provider, eliminating the need to invest in hardware in order to test Dappnode.",source:"@site/docs/user/dappnode-cloud/overview.md",sourceDirName:"user/dappnode-cloud",slug:"/user/dappnode-cloud/overview",permalink:"/docs/user/dappnode-cloud/overview",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/dappnode-cloud/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Troubleshooting",permalink:"/docs/user/ethical-metrics/troubleshooting"},next:{title:"AWS",permalink:"/docs/user/dappnode-cloud/providers/aws/overview"}},s={},d=[{value:"Why using Dappnode Cloud?",id:"why-using-dappnode-cloud",level:2},{value:"No Initial Hardware Investment \ud83d\udcb0",id:"no-initial-hardware-investment-",level:3},{value:"Stop when you want \ud83e\uddd1\u200d\ud83d\udd27\ufe0f",id:"stop-when-you-want-\ufe0f",level:3},{value:"Scalability \ud83d\udcc8",id:"scalability-",level:3},{value:"Physical or Cloud?",id:"physical-or-cloud",level:2},{value:"1. Economics \ud83d\udcb2",id:"1-economics-",level:3},{value:"2. Decentralization \ud83d\uddfd",id:"2-decentralization-",level:3},{value:"Use cases",id:"use-cases",level:2},{value:"Blockchain participation & Solo Staking \u26d3\ufe0f",id:"blockchain-participation--solo-staking-\ufe0f",level:3},{value:"Testing \ud83e\uddea",id:"testing-",level:3},{value:"Developing \ud83e\uddd1\u200d\ud83d\udcbb\ufe0f",id:"developing-\ufe0f",level:3}],c={toc:d},u="wrapper";function p(e){let{components:o,...t}=e;return(0,a.kt)(u,(0,n.Z)({},c,t,{components:o,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"what-is-dappnode-cloud"},"What is Dappnode Cloud?"),(0,a.kt)("p",null,"Dappnode Cloud is a service that allows users to deploy a Dappnode in a cloud provider so it can be tested without the need for physical hardware. We provide easy pre-configured instances for the main cloud providers (AWS for now, more to come later) to continue to make the deployment of web3 infrastructrure accessible and hassle-free for everyone. It consists of a Dappnode image deployed on a machine instance from a cloud provider, eliminating the need to invest in hardware in order to test Dappnode."),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"This allows you to run your decentralized applications more efficiently and cost-effectively, as you can customize your hardware specifications to meet your needs.")),(0,a.kt)("h2",{id:"why-using-dappnode-cloud"},"Why using Dappnode Cloud?"),(0,a.kt)("p",null,"Dappnode Cloud offers numerous advantages over traditional hardware-based setups. By leveraging cloud infrastructure, you can bypass the complexities and limitations associated with physical hardware. Here are the key benefits that make Dappnode Cloud an attractive option:"),(0,a.kt)("h3",{id:"no-initial-hardware-investment-"},"No Initial Hardware Investment \ud83d\udcb0"),(0,a.kt)("p",null,"With Dappnode Cloud, there is no need to purchase an entire new machine every time you need a new Dappnode. This significantly reduces the initial cost barrier, allowing you to test Dappnode before you decide to install it in a physical machine or to quickly deploy a new Dappnode without having to purchase a new machine."),(0,a.kt)("h3",{id:"stop-when-you-want-\ufe0f"},"Stop when you want \ud83e\uddd1\u200d\ud83d\udd27\ufe0f"),(0,a.kt)("p",null,"For short stints, Dappnode Cloud allows you to deploy and also to stop running your Dappnode as soon as you have performed the tasks you wanted to do, with no electronic waste or an unallocated physical machine on your side."),(0,a.kt)("h3",{id:"scalability-"},"Scalability \ud83d\udcc8"),(0,a.kt)("p",null,"With Dappnode Cloud, you can easily scale your resources up or down based on your current needs. Whether you're experiencing a lack of storage or you need a few more nodes quickly, you can adjust your cloud resources accordingly without the constraints of physical hardware limitations."),(0,a.kt)("h2",{id:"physical-or-cloud"},"Physical or Cloud?"),(0,a.kt)("p",null,"It is much better to run a physical Dappnode at your place for these 2 main reasons:"),(0,a.kt)("h3",{id:"1-economics-"},"1. Economics \ud83d\udcb2"),(0,a.kt)("p",null,"A physical machine has a higher initial cost, but leverages your existing internet connection and consumes less energy than your fridge. This initial cost is pretty much the only cost you will have for the lifetime of the hardware you use.\nCloud servers have monthly costs associated with it that never go away, resulting in higher cost in the long term."),(0,a.kt)("p",null,"In summary, you will be better off with a physical machine if you plan to use your Dappnode for a long time, and better off with a Dappnode Cloud if you only want to use the instance for a short period of time."),(0,a.kt)("h3",{id:"2-decentralization-"},"2. Decentralization \ud83d\uddfd"),(0,a.kt)("p",null,"The networks you will run on your Dapppnode become more resilient to corporate capture, government interference and localized events the more decentralized their nodes are. By running a Node in the cloud it is very likely that there is already a node of that network in the same data center, therefore adding no extra value to the decentralization of the network.\nIf instead you run the same node in a home setup from your home, you are adding a node that is much harder to censor, block, locate and subjugate than a node controlled by a big infrastructure corporation."),(0,a.kt)("p",null,'Remember, "The Cloud" is just someone else\'s computer.'),(0,a.kt)("h2",{id:"use-cases"},"Use cases"),(0,a.kt)("p",null,"Dappnode Cloud offers versatile solutions for various users, providing the flexibility and reliability needed to meet your goals. Here are some of the primary use cases:"),(0,a.kt)("h3",{id:"blockchain-participation--solo-staking-\ufe0f"},"Blockchain participation & Solo Staking \u26d3\ufe0f"),(0,a.kt)("p",null,"If obtaining hardware is not an option, Dappnode Cloud allows you to run a full node or even host your Ethereum or Gnosis validators without worrying about hardware requirements, internet connectivity, or power outages. This ensures continuous participation in the blockchain network with minimal hassle."),(0,a.kt)("h3",{id:"testing-"},"Testing \ud83e\uddea"),(0,a.kt)("p",null,"For those considering purchasing their own Dappnode but still uncertain, Dappnode Cloud provides an excellent opportunity to run a temporary Dappnode. This allows you to demo the system without facing the initial cost barrier, helping you make an informed decision."),(0,a.kt)("h3",{id:"developing-\ufe0f"},"Developing \ud83e\uddd1\u200d\ud83d\udcbb\ufe0f"),(0,a.kt)("p",null,"Dappnode Cloud is an excellent choice for developers who need a reliable and scalable environment to test and deploy dApps. Without the constraints of local hardware, developers can quickly iterate and deploy their applications, leveraging the power of cloud computing to simulate real-world conditions."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/30a24c52.3d4809d1.js b/assets/js/30a24c52.8b6b1c0f.js similarity index 80% rename from assets/js/30a24c52.3d4809d1.js rename to assets/js/30a24c52.8b6b1c0f.js index 8dfaed534..1192bebdd 100644 --- a/assets/js/30a24c52.3d4809d1.js +++ b/assets/js/30a24c52.8b6b1c0f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[453],{8605:e=>{e.exports=JSON.parse('{"label":"hello","permalink":"/blog/tags/hello","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[453],{8605:e=>{e.exports=JSON.parse('{"label":"hello","permalink":"/blog/tags/hello","allTagsPath":"/blog/tags","count":2,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/34d45c9f.3de4b327.js b/assets/js/34d45c9f.3de4b327.js deleted file mode 100644 index c7af73b08..000000000 --- a/assets/js/34d45c9f.3de4b327.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7089],{4137:(e,t,o)=>{o.d(t,{Zo:()=>p,kt:()=>u});var n=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var t=1;t =0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var l=n.createContext({}),h=function(e){var t=n.useContext(l),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},p=function(e){var t=h(e.components);return n.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=h(o),m=r,u=c["".concat(l,".").concat(m)]||c[m]||d[m]||a;return o?n.createElement(u,i(i({ref:t},p),{},{components:o})):n.createElement(u,i({ref:t},p))}));function u(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=o.length,i=new Array(a);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var h=2;h{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>h});var n=o(7462),r=(o(7294),o(4137));const a={title:"Smooth",description:"Smooth introduction"},i="Welcome to Smooth, Dappnode's MEV Smoothing Pool!",s={unversionedId:"smooth",id:"smooth",title:"Smooth",description:"Smooth introduction",source:"@site/docs/smooth.md",sourceDirName:".",slug:"/smooth",permalink:"/docs/smooth",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth.md",tags:[],version:"current",frontMatter:{title:"Smooth",description:"Smooth introduction"},sidebar:"smoothSidebar",next:{title:"Deep Dive into Smooth!",permalink:"/docs/smooth/deep-dive-into-smooth/overview"}},l={},h=[{value:"What is Smooth and why should you join it?",id:"what-is-smooth-and-why-should-you-join-it",level:2},{value:"\ud83c\udfb0 Stop Depending on Luck!",id:"-stop-depending-on-luck",level:3},{value:"\ud83d\ude80 Don't miss high fee seasons!",id:"-dont-miss-high-fee-seasons",level:3},{value:"\ud83d\udcb0 Hitting MEV Lottery Blocks",id:"-hitting-mev-lottery-blocks",level:3}],p={toc:h},c="wrapper";function d(e){let{components:t,...o}=e;return(0,r.kt)(c,(0,n.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"welcome-to-smooth-dappnodes-mev-smoothing-pool"},"Welcome to Smooth, Dappnode's MEV Smoothing Pool!"),(0,r.kt)("p",null,"Welcome to the Smooth Documentation! Here, you'll find detailed insights and essential information to navigate and maximize your experience with Smooth, an MEV Smoothing Pool designed to enhance rewards for Solo Stakers in the Ethereum network. "),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Interested in Smooth? Check out ",(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("a",{parentName:"strong",href:"/docs/smooth/deep-dive-into-smooth/overview"},"Deep Dive into Smooth"))," to get a general idea of how Smooth works, or check the ",(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("a",{parentName:"strong",href:"/docs/smooth/subscribe-to-smooth/overview"},"subscription guides"))," to learn how to join!")),(0,r.kt)("h2",{id:"what-is-smooth-and-why-should-you-join-it"},"What is Smooth and why should you join it?"),(0,r.kt)("p",null,"Smooth is a MEV Smoothing Pool designed to elevate the Ethereum solo staking experience. By pooling MEV rewards, ",(0,r.kt)("strong",{parentName:"p"},"Smooth offers Solo Stakers the unique opportunity to earn higher rewards consistently"),", reducing reliance on luck and maximizing the potential of every staked ether. Join Smooth and take your solo staking experience to the next level!"),(0,r.kt)("h3",{id:"-stop-depending-on-luck"},"\ud83c\udfb0 Stop Depending on Luck!"),(0,r.kt)("p",null,"Currently, luck plays a big role in every Solo Staker when it comes to earning rewards. While the average validator will propose 3 blocks per year, some will propose more, some less. A Solo Staker does not have any control over this, and can only hope to get lucky and propose as much blocks as possible to maximize their rewards. "),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Smooth changes this by pooling together the block proposals of all its members, so that every member gets a share of the rewards of every block proposed by the pool"),". This way, you can stop worrying about luck and start earning rewards consistently! "),(0,r.kt)("h3",{id:"-dont-miss-high-fee-seasons"},"\ud83d\ude80 Don't miss high fee seasons!"),(0,r.kt)("p",null,"With an average of only 3 block proposals per year, how likely are you to catch a period of high fees? How much does it hurt to see a NFT sale, or a peak in activity and not catch any of the action? "),(0,r.kt)("p",null,"In Smooth, block proposals are constant, so ",(0,r.kt)("strong",{parentName:"p"},"no matter what happens in the network, you will always be there to get your share of it!")),(0,r.kt)("h3",{id:"-hitting-mev-lottery-blocks"},"\ud83d\udcb0 Hitting MEV Lottery Blocks"),(0,r.kt)("p",null,"Ever since they arrived, MEV rewards are distributed very unevenly. The vast majority of blocks have very low MEV rewards, while only very few blocks have very high rewards. As a Solo Staker, you have a ",(0,r.kt)("em",{parentName:"p"},"very")," low chance of hitting one of these high-reward blocks. The median MEV typically hovers around 0.05 ETH, but certain lottery blocks can reach up to 30, 90, or even 300 ETH!"),(0,r.kt)("p",null,"By adding together all our chances of hitting a lottery block, we have a much higher chance of proposing one! ",(0,r.kt)("strong",{parentName:"p"},"In ",(0,r.kt)("a",{parentName:"strong",href:"https://github.com/htimsk/SPanalysis"},"backtesting simulations"),", rewards of a Smoothing Pool participant are up to 60% higher than those of a Solo Staker!")," "),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"For a detailed comparison between Solo Stakers and Smoothing Pool participants' rewards, explore this ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/htimsk/SPanalysis"},"Smoothing Pool analysis"))),(0,r.kt)("p",null,"Lido, Centralized Exchanges and other pools with lots of validators consistently hit lottery blocks because of the sheer numbers of validators they have. They naturally split these rewards between all their validators, effectively being at an advantage vs the average Solo Staker."),(0,r.kt)("p",null,"This is a centralizing force, as the rich become richer and bigger operations get bigger rewards. ",(0,r.kt)("strong",{parentName:"p"},"Now, Solo Stakers with few validators don't depend on luck to be at par with the big guys!")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/34d45c9f.b2e41baf.js b/assets/js/34d45c9f.b2e41baf.js new file mode 100644 index 000000000..66aac3993 --- /dev/null +++ b/assets/js/34d45c9f.b2e41baf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7089],{1598:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>h,contentTitle:()=>r,default:()=>c,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var n=t(5893),s=t(1151);const i={title:"Smooth",description:"Smooth introduction"},r="Welcome to Smooth, Dappnode's MEV Smoothing Pool!",a={id:"smooth",title:"Smooth",description:"Smooth introduction",source:"@site/docs/smooth.md",sourceDirName:".",slug:"/smooth",permalink:"/docs/smooth",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth.md",tags:[],version:"current",frontMatter:{title:"Smooth",description:"Smooth introduction"},sidebar:"smoothSidebar",next:{title:"Deep Dive into Smooth!",permalink:"/docs/smooth/deep-dive-into-smooth/overview"}},h={},l=[{value:"What is Smooth and why should you join it?",id:"what-is-smooth-and-why-should-you-join-it",level:2},{value:"\ud83c\udfb0 Stop Depending on Luck!",id:"slot_machine-stop-depending-on-luck",level:3},{value:"\ud83d\ude80 Don't miss high fee seasons!",id:"rocket-dont-miss-high-fee-seasons",level:3},{value:"\ud83d\udcb0 Hitting MEV Lottery Blocks",id:"moneybag-hitting-mev-lottery-blocks",level:3}];function d(e){const o={a:"a",admonition:"admonition",em:"em",h1:"h1",h2:"h2",h3:"h3",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",strong:"strong",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.h1,{id:"welcome-to-smooth-dappnodes-mev-smoothing-pool",children:"Welcome to Smooth, Dappnode's MEV Smoothing Pool!"}),"\n",(0,n.jsx)(o.p,{children:"Welcome to the Smooth Documentation! Here, you'll find detailed insights and essential information to navigate and maximize your experience with Smooth, an MEV Smoothing Pool designed to enhance rewards for Solo Stakers in the Ethereum network."}),"\n",(0,n.jsx)(o.admonition,{type:"info",children:(0,n.jsxs)(o.p,{children:["Interested in Smooth? Check out ",(0,n.jsx)(o.strong,{children:(0,n.jsx)(o.a,{href:"/docs/smooth/deep-dive-into-smooth/overview",children:"Deep Dive into Smooth"})})," to get a general idea of how Smooth works, or check the ",(0,n.jsx)(o.strong,{children:(0,n.jsx)(o.a,{href:"/docs/smooth/subscribe-to-smooth/overview",children:"subscription guides"})})," to learn how to join!"]})}),"\n",(0,n.jsx)(o.h2,{id:"what-is-smooth-and-why-should-you-join-it",children:"What is Smooth and why should you join it?"}),"\n",(0,n.jsxs)(o.p,{children:["Smooth is a MEV Smoothing Pool designed to elevate the Ethereum solo staking experience. By pooling MEV rewards, ",(0,n.jsx)(o.strong,{children:"Smooth offers Solo Stakers the unique opportunity to earn higher rewards consistently"}),", reducing reliance on luck and maximizing the potential of every staked ether. Join Smooth and take your solo staking experience to the next level!"]}),"\n",(0,n.jsxs)(o.h3,{id:"slot_machine-stop-depending-on-luck",children:["\ud83c\udfb0"," Stop Depending on Luck!"]}),"\n",(0,n.jsx)(o.p,{children:"Currently, luck plays a big role in every Solo Staker when it comes to earning rewards. While the average validator will propose 3 blocks per year, some will propose more, some less. A Solo Staker does not have any control over this, and can only hope to get lucky and propose as much blocks as possible to maximize their rewards."}),"\n",(0,n.jsxs)(o.p,{children:[(0,n.jsx)(o.strong,{children:"Smooth changes this by pooling together the block proposals of all its members, so that every member gets a share of the rewards of every block proposed by the pool"}),". This way, you can stop worrying about luck and start earning rewards consistently!"]}),"\n",(0,n.jsxs)(o.h3,{id:"rocket-dont-miss-high-fee-seasons",children:["\ud83d\ude80"," Don't miss high fee seasons!"]}),"\n",(0,n.jsx)(o.p,{children:"With an average of only 3 block proposals per year, how likely are you to catch a period of high fees? How much does it hurt to see a NFT sale, or a peak in activity and not catch any of the action?"}),"\n",(0,n.jsxs)(o.p,{children:["In Smooth, block proposals are constant, so ",(0,n.jsx)(o.strong,{children:"no matter what happens in the network, you will always be there to get your share of it!"})]}),"\n",(0,n.jsxs)(o.h3,{id:"moneybag-hitting-mev-lottery-blocks",children:["\ud83d\udcb0"," Hitting MEV Lottery Blocks"]}),"\n",(0,n.jsxs)(o.p,{children:["Ever since they arrived, MEV rewards are distributed very unevenly. The vast majority of blocks have very low MEV rewards, while only very few blocks have very high rewards. As a Solo Staker, you have a ",(0,n.jsx)(o.em,{children:"very"})," low chance of hitting one of these high-reward blocks. The median MEV typically hovers around 0.05 ETH, but certain lottery blocks can reach up to 30, 90, or even 300 ETH!"]}),"\n",(0,n.jsxs)(o.p,{children:["By adding together all our chances of hitting a lottery block, we have a much higher chance of proposing one! ",(0,n.jsxs)(o.strong,{children:["In ",(0,n.jsx)(o.a,{href:"https://github.com/htimsk/SPanalysis",children:"backtesting simulations"}),", rewards of a Smoothing Pool participant are up to 60% higher than those of a Solo Staker!"]})]}),"\n",(0,n.jsxs)(o.admonition,{type:"tip",children:[(0,n.jsx)(o.mdxAdmonitionTitle,{}),(0,n.jsxs)(o.p,{children:["For a detailed comparison between Solo Stakers and Smoothing Pool participants' rewards, explore this ",(0,n.jsx)(o.a,{href:"https://github.com/htimsk/SPanalysis",children:"Smoothing Pool analysis"})]})]}),"\n",(0,n.jsx)(o.p,{children:"Lido, Centralized Exchanges and other pools with lots of validators consistently hit lottery blocks because of the sheer numbers of validators they have. They naturally split these rewards between all their validators, effectively being at an advantage vs the average Solo Staker."}),"\n",(0,n.jsxs)(o.p,{children:["This is a centralizing force, as the rich become richer and bigger operations get bigger rewards. ",(0,n.jsx)(o.strong,{children:"Now, Solo Stakers with few validators don't depend on luck to be at par with the big guys!"})]})]})}function c(e={}){const{wrapper:o}={...(0,s.a)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},1151:(e,o,t)=>{t.d(o,{Z:()=>a,a:()=>r});var n=t(7294);const s={},i=n.createContext(s);function r(e){const o=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),n.createElement(i.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3f7aee3c.093d03b3.js b/assets/js/3f7aee3c.093d03b3.js new file mode 100644 index 000000000..4c7213e2b --- /dev/null +++ b/assets/js/3f7aee3c.093d03b3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9779],{8801:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>i,contentTitle:()=>a,default:()=>l,frontMatter:()=>r,metadata:()=>c,toc:()=>d});var s=o(5893),t=o(1151);const r={},a="\ud83c\udf10 Access your Dappnode",c={id:"user/access-your-dappnode/overview",title:"\ud83c\udf10 Access your Dappnode",description:"Dappnode is made to work on a dedicated computer, and its main control panel, the Dappmanager, is accessed from another device via my.dappnode , as it is meant to be installed over an operating system that does not include a graphical interface.",source:"@site/docs/user/access-your-dappnode/overview.md",sourceDirName:"user/access-your-dappnode",slug:"/user/access-your-dappnode/overview",permalink:"/docs/user/access-your-dappnode/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/access-your-dappnode/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Next Steps",permalink:"/docs/user/getting-started/next-steps"},next:{title:"Wi-Fi Access to Dappnode",permalink:"/docs/user/access-your-dappnode/wifi"}},i={},d=[];function p(e){const n={a:"a",admonition:"admonition",h1:"h1",li:"li",ol:"ol",p:"p",strong:"strong",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"-access-your-dappnode",children:"\ud83c\udf10 Access your Dappnode"}),"\n",(0,s.jsxs)(n.p,{children:["Dappnode is made to work on a dedicated computer, and its main control panel, the ",(0,s.jsx)(n.strong,{children:"Dappmanager"}),", is accessed from another device via ",(0,s.jsx)(n.a,{href:"http://my.dappnode/",children:"my.dappnode"})," , as it is meant to be installed over an operating system that does not include a graphical interface."]}),"\n",(0,s.jsxs)(n.p,{children:["Here are ",(0,s.jsx)(n.strong,{children:"four ways"})," you can connect to your Dappnode:"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/docs/user/access-your-dappnode/wifi",children:(0,s.jsx)(n.strong,{children:"\ud83d\udce1 Wifi"})}),": A user-friendly way, especially for those with Dappnode pre-installed on their machines."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/docs/user/access-your-dappnode/vpn/overview",children:(0,s.jsx)(n.strong,{children:"\ud83d\udd10 VPN"})}),": Using either Wireguard or OpenVPN, this method is both secure and versatile. You can connect from inside or outside your local network, but if you're connecting from outside, you might need to adjust some settings."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/docs/user/access-your-dappnode/local",children:(0,s.jsx)(n.strong,{children:"\ud83d\udd17 Local Proxy (Recovery)"})}),": This is a backup connection method. It allows you to connect to Dappmanager when you're on the same local network. It's mainly for recovery purposes because of its limitations."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/docs/user/access-your-dappnode/terminal",children:(0,s.jsx)(n.strong,{children:"\ud83d\udcbb Terminal (Advanced, Recovery)"})}),": This is for those who know their way around computer commands. It provides complete control but might be complex for some users."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"\ud83d\udca1 To ensure you can always access your Dappnode, it's a smart idea to set up and know more than one connection method. In the coming sections, we'll guide you through setting up each of these connection ways."})})]})}function l(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},1151:(e,n,o)=>{o.d(n,{Z:()=>c,a:()=>a});var s=o(7294);const t={},r=s.createContext(t);function a(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3f7aee3c.5499c15e.js b/assets/js/3f7aee3c.5499c15e.js deleted file mode 100644 index f6eb5405f..000000000 --- a/assets/js/3f7aee3c.5499c15e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9779],{4137:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>y});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),i=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},d=function(e){var t=i(e.components);return n.createElement(c.Provider,{value:t},e.children)},u="mdxType",l={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,d=p(e,["components","mdxType","originalType","parentName"]),u=i(r),m=o,y=u["".concat(c,".").concat(m)]||u[m]||l[m]||a;return r?n.createElement(y,s(s({ref:t},d),{},{components:r})):n.createElement(y,s({ref:t},d))}));function y(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,s=new Array(a);s[0]=m;var p={};for(var c in t)hasOwnProperty.call(t,c)&&(p[c]=t[c]);p.originalType=e,p[u]="string"==typeof e?e:o,s[1]=p;for(var i=2;i{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>l,frontMatter:()=>a,metadata:()=>p,toc:()=>i});var n=r(7462),o=(r(7294),r(4137));const a={},s="\ud83c\udf10 Access your Dappnode",p={unversionedId:"user/access-your-dappnode/overview",id:"user/access-your-dappnode/overview",title:"\ud83c\udf10 Access your Dappnode",description:"Dappnode is made to work on a dedicated computer, and its main control panel, the Dappmanager, is accessed from another device via my.dappnode , as it is meant to be installed over an operating system that does not include a graphical interface.",source:"@site/docs/user/access-your-dappnode/overview.md",sourceDirName:"user/access-your-dappnode",slug:"/user/access-your-dappnode/overview",permalink:"/docs/user/access-your-dappnode/overview",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/access-your-dappnode/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Next Steps",permalink:"/docs/user/getting-started/next-steps"},next:{title:"Wi-Fi Access to Dappnode",permalink:"/docs/user/access-your-dappnode/wifi"}},c={},i=[],d={toc:i},u="wrapper";function l(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"-access-your-dappnode"},"\ud83c\udf10 Access your Dappnode"),(0,o.kt)("p",null,"Dappnode is made to work on a dedicated computer, and its main control panel, the ",(0,o.kt)("strong",{parentName:"p"},"Dappmanager"),", is accessed from another device via ",(0,o.kt)("a",{parentName:"p",href:"http://my.dappnode/"},"my.dappnode")," , as it is meant to be installed over an operating system that does not include a graphical interface."),(0,o.kt)("p",null,"Here are ",(0,o.kt)("strong",{parentName:"p"},"four ways")," you can connect to your Dappnode:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("a",{parentName:"p",href:"/docs/user/access-your-dappnode/wifi"},(0,o.kt)("strong",{parentName:"a"},"\ud83d\udce1 Wifi")),": A user-friendly way, especially for those with Dappnode pre-installed on their machines.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("a",{parentName:"p",href:"/docs/user/access-your-dappnode/vpn/overview"},(0,o.kt)("strong",{parentName:"a"},"\ud83d\udd10 VPN")),": Using either Wireguard or OpenVPN, this method is both secure and versatile. You can connect from inside or outside your local network, but if you're connecting from outside, you might need to adjust some settings.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("a",{parentName:"p",href:"/docs/user/access-your-dappnode/local"},(0,o.kt)("strong",{parentName:"a"},"\ud83d\udd17 Local Proxy (Recovery)")),": This is a backup connection method. It allows you to connect to Dappmanager when you're on the same local network. It's mainly for recovery purposes because of its limitations.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("a",{parentName:"p",href:"/docs/user/access-your-dappnode/terminal"},(0,o.kt)("strong",{parentName:"a"},"\ud83d\udcbb Terminal (Advanced, Recovery)")),": This is for those who know their way around computer commands. It provides complete control but might be complex for some users."))),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"\ud83d\udca1 To ensure you can always access your Dappnode, it's a smart idea to set up and know more than one connection method. In the coming sections, we'll guide you through setting up each of these connection ways.")))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3fac1d53.43076377.js b/assets/js/3fac1d53.43076377.js new file mode 100644 index 000000000..763ac478e --- /dev/null +++ b/assets/js/3fac1d53.43076377.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7533],{7771:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>n,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>d});var s=o(5893),i=o(1151);const a={},n="Smooth Validator States",r={id:"smooth/deep-dive-into-smooth/states",title:"Smooth Validator States",description:"A Smooth validator can be in multiple states depending on its behavior. In this section we will explain all possible states a validator can have, the consequences of being each state, and how a validator can transition from one state to another.",source:"@site/docs/smooth/deep-dive-into-smooth/states.md",sourceDirName:"smooth/deep-dive-into-smooth",slug:"/smooth/deep-dive-into-smooth/states",permalink:"/docs/smooth/deep-dive-into-smooth/states",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/deep-dive-into-smooth/states.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Rewards",permalink:"/docs/smooth/deep-dive-into-smooth/rewards"},next:{title:"Smooth's architecture",permalink:"/docs/smooth/deep-dive-into-smooth/oracle-sm"}},l={},d=[{value:"State Machine Overview",id:"state-machine-overview",level:2},{value:"The purpose of the State Machine",id:"the-purpose-of-the-state-machine",level:2}];function c(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"smooth-validator-states",children:"Smooth Validator States"}),"\n",(0,s.jsxs)(t.p,{children:["A ",(0,s.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," validator can be in multiple states depending on its behavior. In this section we will explain all possible states a validator can have, the consequences of being each state, and how a validator can transition from one state to another."]}),"\n",(0,s.jsx)(t.h2,{id:"state-machine-overview",children:"State Machine Overview"}),"\n",(0,s.jsxs)(t.p,{children:["The oracle employs a ",(0,s.jsx)(t.strong,{children:"state machine"})," to monitor the status of subscribed validators within ",(0,s.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". Various actions trigger state changes, detailed in the following image encompassing all possible transitions. Let's take a look at it:"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"statemachine",src:o(2060).Z+"",width:"2998",height:"1494"})}),"\n",(0,s.jsx)(t.p,{children:"There are 6 different states a validator can have:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["\ud83d\udfe2 ",(0,s.jsx)(t.strong,{children:"Active"}),": The validator is active and subscribed to the pool, earning rewards over time."]}),"\n",(0,s.jsxs)(t.li,{children:["\ud83d\udfe1 ",(0,s.jsx)(t.strong,{children:"YellowCard"}),": The validator missed its last block proposal but not two in a row. This validator earns rewards as if it was active."]}),"\n",(0,s.jsxs)(t.li,{children:["\ud83d\udd34 ",(0,s.jsx)(t.strong,{children:"RedCard"}),": The validator missed its latest two block proposals in a row. As a penalty, the validator does not earn rewards until its next block is successfully proposed to the pool. In other words, this validator is not receiving ",(0,s.jsx)(t.code,{children:"Pending Rewards"})," when somebody else contributes to the pool."]}),"\n",(0,s.jsxs)(t.li,{children:["\u26aa ",(0,s.jsx)(t.strong,{children:"NotSubscribed"}),": The validator is no longer subscribed to the pool, but still tracked by the validator. For example, a validator that unsubscribed. Note that this is still tracked because a validator can unsubscribe but it may still have pending balance to claim. In this state, the validator does not earn rewards."]}),"\n",(0,s.jsxs)(t.li,{children:["\u2620\ufe0f ",(0,s.jsx)(t.strong,{children:"Banned"}),": The validator is banned forever from the pool. A validator is banned when it is subscribed to the pool but proposes a block with the wrong fee recipient."]}),"\n",(0,s.jsxs)(t.li,{children:["\u2753",(0,s.jsx)(t.strong,{children:"Untracked"}),": The validator is not tracked by the pool. It has never subscribed to the pool."]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"And 6 different actions can trigger a state transition:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"ProposalOk"}),": The validator proposed a valid block with its rewards correctly sent to the smoothing pool address."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"ProposalMissed"}),": The validator should have proposed a block but missed its proposal."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"ProposalWrongFee"}),": The validator proposes a block but with a wrong fee recipient."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"ManualSubscription"}),": The validator manually subscribes to the pool, depositing collateral for its validator index by calling the smart contract function (see event)."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"AutoSubscription"}),": The validator is automatically subscribed to the pool, by setting as fee recipient the smoothing pool address."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"Unsubscribe"}),": The validator manually unsubscribes to the pool, calling the unsubscribe function from the smart contract (see event)."]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"the-purpose-of-the-state-machine",children:"The purpose of the State Machine"}),"\n",(0,s.jsx)(t.p,{children:"Beyond tracking validator statuses, the state machine ensures fair reward distribution and encourages correct behavior among validators."}),"\n",(0,s.jsx)(t.p,{children:"Validators consistently proposing blocks receive greater rewards compared to those frequently missing proposals, promoting active participation and contribution to the pool."})]})}function h(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},2060:(e,t,o)=>{o.d(t,{Z:()=>s});const s=o.p+"assets/images/smooth_states-1ba74d83a78fa2e0b740effe50c30ee8.png"},1151:(e,t,o)=>{o.d(t,{Z:()=>r,a:()=>n});var s=o(7294);const i={},a=s.createContext(i);function n(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:n(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3fac1d53.b395668d.js b/assets/js/3fac1d53.b395668d.js deleted file mode 100644 index d1f948961..000000000 --- a/assets/js/3fac1d53.b395668d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7533],{4137:(e,t,o)=>{o.d(t,{Zo:()=>d,kt:()=>m});var a=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function n(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,a)}return o}function i(e){for(var t=1;t =0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a =0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var l=a.createContext({}),p=function(e){var t=a.useContext(l),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},d=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},c="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var o=e.components,r=e.mdxType,n=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),c=p(o),u=r,m=c["".concat(l,".").concat(u)]||c[u]||h[u]||n;return o?a.createElement(m,i(i({ref:t},d),{},{components:o})):a.createElement(m,i({ref:t},d))}));function m(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var n=o.length,i=new Array(n);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var p=2;p {o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>n,metadata:()=>s,toc:()=>p});var a=o(7462),r=(o(7294),o(4137));const n={},i="Smooth Validator States",s={unversionedId:"smooth/deep-dive-into-smooth/states",id:"smooth/deep-dive-into-smooth/states",title:"Smooth Validator States",description:"A Smooth validator can be in multiple states depending on its behavior. In this section we will explain all possible states a validator can have, the consequences of being each state, and how a validator can transition from one state to another.",source:"@site/docs/smooth/deep-dive-into-smooth/states.md",sourceDirName:"smooth/deep-dive-into-smooth",slug:"/smooth/deep-dive-into-smooth/states",permalink:"/docs/smooth/deep-dive-into-smooth/states",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/deep-dive-into-smooth/states.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Rewards",permalink:"/docs/smooth/deep-dive-into-smooth/rewards"},next:{title:"Smooth's architecture",permalink:"/docs/smooth/deep-dive-into-smooth/oracle-sm"}},l={},p=[{value:"State Machine Overview",id:"state-machine-overview",level:2},{value:"The purpose of the State Machine",id:"the-purpose-of-the-state-machine",level:2}],d={toc:p},c="wrapper";function h(e){let{components:t,...n}=e;return(0,r.kt)(c,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"smooth-validator-states"},"Smooth Validator States"),(0,r.kt)("p",null,"A ",(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," validator can be in multiple states depending on its behavior. In this section we will explain all possible states a validator can have, the consequences of being each state, and how a validator can transition from one state to another."),(0,r.kt)("h2",{id:"state-machine-overview"},"State Machine Overview"),(0,r.kt)("p",null,"The oracle employs a ",(0,r.kt)("strong",{parentName:"p"},"state machine")," to monitor the status of subscribed validators within ",(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". Various actions trigger state changes, detailed in the following image encompassing all possible transitions. Let's take a look at it:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"statemachine",src:o(2060).Z,width:"2998",height:"1494"})),(0,r.kt)("p",null,"There are 6 different states a validator can have:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\ud83d\udfe2 ",(0,r.kt)("strong",{parentName:"li"},"Active"),": The validator is active and subscribed to the pool, earning rewards over time. "),(0,r.kt)("li",{parentName:"ul"},"\ud83d\udfe1 ",(0,r.kt)("strong",{parentName:"li"},"YellowCard"),": The validator missed its last block proposal but not two in a row. This validator earns rewards as if it was active."),(0,r.kt)("li",{parentName:"ul"},"\ud83d\udd34 ",(0,r.kt)("strong",{parentName:"li"},"RedCard"),": The validator missed its latest two block proposals in a row. As a penalty, the validator does not earn rewards until its next block is successfully proposed to the pool. In other words, this validator is not receiving ",(0,r.kt)("inlineCode",{parentName:"li"},"Pending Rewards")," when somebody else contributes to the pool. "),(0,r.kt)("li",{parentName:"ul"},"\u26aa ",(0,r.kt)("strong",{parentName:"li"},"NotSubscribed"),": The validator is no longer subscribed to the pool, but still tracked by the validator. For example, a validator that unsubscribed. Note that this is still tracked because a validator can unsubscribe but it may still have pending balance to claim. In this state, the validator does not earn rewards. "),(0,r.kt)("li",{parentName:"ul"},"\u2620\ufe0f ",(0,r.kt)("strong",{parentName:"li"},"Banned"),": The validator is banned forever from the pool. A validator is banned when it is subscribed to the pool but proposes a block with the wrong fee recipient. "),(0,r.kt)("li",{parentName:"ul"},"\u2753",(0,r.kt)("strong",{parentName:"li"},"Untracked"),": The validator is not tracked by the pool. It has never subscribed to the pool. ")),(0,r.kt)("p",null,"And 6 different actions can trigger a state transition:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"ProposalOk"),": The validator proposed a valid block with its rewards correctly sent to the smoothing pool address."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"ProposalMissed"),": The validator should have proposed a block but missed its proposal."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"ProposalWrongFee"),": The validator proposes a block but with a wrong fee recipient."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"ManualSubscription"),": The validator manually subscribes to the pool, depositing collateral for its validator index by calling the smart contract function (see event)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"AutoSubscription"),": The validator is automatically subscribed to the pool, by setting as fee recipient the smoothing pool address."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Unsubscribe"),": The validator manually unsubscribes to the pool, calling the unsubscribe function from the smart contract (see event).")),(0,r.kt)("h2",{id:"the-purpose-of-the-state-machine"},"The purpose of the State Machine"),(0,r.kt)("p",null,"Beyond tracking validator statuses, the state machine ensures fair reward distribution and encourages correct behavior among validators."),(0,r.kt)("p",null,"Validators consistently proposing blocks receive greater rewards compared to those frequently missing proposals, promoting active participation and contribution to the pool."))}h.isMDXComponent=!0},2060:(e,t,o)=>{o.d(t,{Z:()=>a});const a=o.p+"assets/images/smooth_states-1ba74d83a78fa2e0b740effe50c30ee8.png"}}]); \ No newline at end of file diff --git a/assets/js/4248.7c4eeb2c.js b/assets/js/4248.7c4eeb2c.js deleted file mode 100644 index 355d779ab..000000000 --- a/assets/js/4248.7c4eeb2c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4248],{4248:(e,t,n)=>{n.r(t),n.d(t,{default:()=>c});var a=n(7294),o=n(7325),l=n(5463),r=n(1009);function c(){return a.createElement(a.Fragment,null,a.createElement(l.d,{title:(0,o.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"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/4c4b1a63.b03c2ad9.js b/assets/js/4c4b1a63.b03c2ad9.js new file mode 100644 index 000000000..802e6253b --- /dev/null +++ b/assets/js/4c4b1a63.b03c2ad9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3504],{3043:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>d,contentTitle:()=>s,default:()=>l,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var i=n(5893),t=n(1151);const r={},s="2. Configuring your Dappnode",a={id:"user/videos-and-tutorials/driving-school/configuration",title:"2. Configuring your Dappnode",description:"We recommend going through Initial Setup of Dappnode Driving School before watching these videos, as these videos expect you to have a basic understanding of how your Dappnode works and how to access it.",source:"@site/docs/user/videos-and-tutorials/driving-school/configuration.md",sourceDirName:"user/videos-and-tutorials/driving-school",slug:"/user/videos-and-tutorials/driving-school/configuration",permalink:"/docs/user/videos-and-tutorials/driving-school/configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/videos-and-tutorials/driving-school/configuration.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"1. Initial Dappnode Setup",permalink:"/docs/user/videos-and-tutorials/driving-school/initial-setup"},next:{title:"Crash Course",permalink:"/docs/user/videos-and-tutorials/crash-course"}},d={},c=[];function u(e){const o={a:"a",admonition:"admonition",h1:"h1",p:"p",strong:"strong",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(o.h1,{id:"2-configuring-your-dappnode",children:"2. Configuring your Dappnode"}),"\n",(0,i.jsx)(o.admonition,{type:"info",children:(0,i.jsxs)(o.p,{children:["We recommend going through ",(0,i.jsx)(o.strong,{children:(0,i.jsx)(o.a,{href:"/docs/user/videos-and-tutorials/driving-school/initial-setup",children:"Initial Setup"})})," of Dappnode Driving School before watching these videos, as these videos expect you to have a basic understanding of how your Dappnode works and how to access it."]})}),"\n",(0,i.jsx)(o.p,{children:"Once you have your Dappnode up and running, you can start configuring it to suit your needs. Here are some videos to help you with that:"}),"\n",(0,i.jsx)(o.h1,{id:"-21-repositories",children:"\ud83e\uddec 2.1 Repositories"}),"\n",(0,i.jsx)(o.p,{children:"Your Dappnode uses two technologies in order to stay decentralized and permissionless. In this video we'll go through Ethereum and IPFS and how do they work in Dappnode."}),"\n",(0,i.jsx)("center",{children:(0,i.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/b3NN2E6YALU",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,i.jsx)("br",{}),"\n",(0,i.jsx)("br",{}),"\n",(0,i.jsx)(o.h1,{id:"-22-dappnode-monitoring-service-dms",children:"\ud83e\uddee 2.2 Dappnode Monitoring Service (DMS)"}),"\n",(0,i.jsx)(o.p,{children:"This video is about Dappnode Monitoring Service, a tool that will make it easy to monitor your Dappnode's health and activity."}),"\n",(0,i.jsx)("center",{children:(0,i.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/l4T1G9u17xg",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,i.jsx)(o.h1,{id:"-23-ethical-metrics",children:"\ud83c\udf21 2.3 Ethical Metrics"}),"\n",(0,i.jsx)(o.p,{children:"Ethical Metrics is Dappnode's private solution to notify you through Email and Telegram when there's unexpected behavior in your Dappnode."}),"\n",(0,i.jsx)("center",{children:(0,i.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/YisNnejt8do",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})})]})}function l(e={}){const{wrapper:o}={...(0,t.a)(),...e.components};return o?(0,i.jsx)(o,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},1151:(e,o,n)=>{n.d(o,{Z:()=>a,a:()=>s});var i=n(7294);const t={},r=i.createContext(t);function s(e){const o=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),i.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4c4b1a63.fda7797e.js b/assets/js/4c4b1a63.fda7797e.js deleted file mode 100644 index f0d76c84d..000000000 --- a/assets/js/4c4b1a63.fda7797e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3504],{4137:(e,t,o)=>{o.d(t,{Zo:()=>d,kt:()=>f});var r=o(7294);function n(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function a(e){for(var t=1;t =0||(n[o]=e[o]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var u=r.createContext({}),c=function(e){var t=r.useContext(u),o=t;return e&&(o="function"==typeof e?e(t):a(a({},t),e)),o},d=function(e){var t=c(e.components);return r.createElement(u.Provider,{value:t},e.children)},l="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},h=r.forwardRef((function(e,t){var o=e.components,n=e.mdxType,i=e.originalType,u=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),l=c(o),h=n,f=l["".concat(u,".").concat(h)]||l[h]||p[h]||i;return o?r.createElement(f,a(a({ref:t},d),{},{components:o})):r.createElement(f,a({ref:t},d))}));function f(e,t){var o=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=o.length,a=new Array(i);a[0]=h;var s={};for(var u in t)hasOwnProperty.call(t,u)&&(s[u]=t[u]);s.originalType=e,s[l]="string"==typeof e?e:n,a[1]=s;for(var c=2;c{o.r(t),o.d(t,{assets:()=>u,contentTitle:()=>a,default:()=>p,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var r=o(7462),n=(o(7294),o(4137));const i={},a="2. Configuring your Dappnode",s={unversionedId:"user/videos-and-tutorials/driving-school/configuration",id:"user/videos-and-tutorials/driving-school/configuration",title:"2. Configuring your Dappnode",description:"We recommend going through Initial Setup of Dappnode Driving School before watching these videos, as these videos expect you to have a basic understanding of how your Dappnode works and how to access it.",source:"@site/docs/user/videos-and-tutorials/driving-school/configuration.md",sourceDirName:"user/videos-and-tutorials/driving-school",slug:"/user/videos-and-tutorials/driving-school/configuration",permalink:"/docs/user/videos-and-tutorials/driving-school/configuration",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/videos-and-tutorials/driving-school/configuration.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"1. Initial Dappnode Setup",permalink:"/docs/user/videos-and-tutorials/driving-school/initial-setup"},next:{title:"Crash Course",permalink:"/docs/user/videos-and-tutorials/crash-course"}},u={},c=[],d={toc:c},l="wrapper";function p(e){let{components:t,...o}=e;return(0,n.kt)(l,(0,r.Z)({},d,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"2-configuring-your-dappnode"},"2. Configuring your Dappnode"),(0,n.kt)("admonition",{type:"info"},(0,n.kt)("p",{parentName:"admonition"},"We recommend going through ",(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("a",{parentName:"strong",href:"/docs/user/videos-and-tutorials/driving-school/initial-setup"},"Initial Setup"))," of Dappnode Driving School before watching these videos, as these videos expect you to have a basic understanding of how your Dappnode works and how to access it.")),(0,n.kt)("p",null,"Once you have your Dappnode up and running, you can start configuring it to suit your needs. Here are some videos to help you with that:"),(0,n.kt)("h1",{id:"-21-repositories"},"\ud83e\uddec 2.1 Repositories"),(0,n.kt)("p",null,"Your Dappnode uses two technologies in order to stay decentralized and permissionless. In this video we'll go through Ethereum and IPFS and how do they work in Dappnode."),(0,n.kt)("center",null,(0,n.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/b3NN2E6YALU",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,n.kt)("br",null),(0,n.kt)("br",null),(0,n.kt)("h1",{id:"-22-dappnode-monitoring-service-dms"},"\ud83e\uddee 2.2 Dappnode Monitoring Service (DMS)"),(0,n.kt)("p",null,"This video is about Dappnode Monitoring Service, a tool that will make it easy to monitor your Dappnode's health and activity."),(0,n.kt)("center",null,(0,n.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/l4T1G9u17xg",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,n.kt)("h1",{id:"-23-ethical-metrics"},"\ud83c\udf21 2.3 Ethical Metrics"),(0,n.kt)("p",null,"Ethical Metrics is Dappnode's private solution to notify you through Email and Telegram when there's unexpected behavior in your Dappnode."),(0,n.kt)("center",null,(0,n.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/YisNnejt8do",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4d8f6977.468ee51d.js b/assets/js/4d8f6977.468ee51d.js deleted file mode 100644 index 4802fb131..000000000 --- a/assets/js/4d8f6977.468ee51d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5815],{4137:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>g});var o=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,o)}return a}function i(e){for(var t=1;t =0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o =0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var l=o.createContext({}),d=function(e){var t=o.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},p=function(e){var t=d(e.components);return o.createElement(l.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var a=e.components,n=e.mdxType,r=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=d(a),h=n,g=u["".concat(l,".").concat(h)]||u[h]||c[h]||r;return a?o.createElement(g,i(i({ref:t},p),{},{components:a})):o.createElement(g,i({ref:t},p))}));function g(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var r=a.length,i=new Array(r);i[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:n,i[1]=s;for(var d=2;d {a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>r,metadata:()=>s,toc:()=>d});var o=a(7462),n=(a(7294),a(4137));const r={},i="Obol Distributed Validator package for Dappnode",s={unversionedId:"user/staking/ethereum/dvt-technologies/obol-network",id:"user/staking/ethereum/dvt-technologies/obol-network",title:"Obol Distributed Validator package for Dappnode",description:"---",source:"@site/docs/user/staking/ethereum/dvt-technologies/obol-network.md",sourceDirName:"user/staking/ethereum/dvt-technologies",slug:"/user/staking/ethereum/dvt-technologies/obol-network",permalink:"/docs/user/staking/ethereum/dvt-technologies/obol-network",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/ethereum/dvt-technologies/obol-network.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Stakehouse",permalink:"/docs/user/staking/ethereum/lsd-pools/stakehouse"},next:{title:"SSV Distributed Validator package for Dappnode",permalink:"/docs/user/staking/ethereum/dvt-technologies/ssv-network"}},l={},d=[{value:"Introduction",id:"introduction",level:3},{value:"Requirements",id:"requirements",level:3},{value:"First Steps",id:"first-steps",level:3},{value:"Cluster Configuration",id:"cluster-configuration",level:3},{value:"Distributed Key Generation (DKG) Event",id:"distributed-key-generation-dkg-event",level:3},{value:"Adding Validators to an Active Cluster",id:"adding-validators-to-an-active-cluster",level:3}],p={toc:d},u="wrapper";function c(e){let{components:t,...r}=e;return(0,n.kt)(u,(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"obol-distributed-validator-package-for-dappnode"},"Obol Distributed Validator package for Dappnode"),(0,n.kt)("hr",null),(0,n.kt)("h3",{id:"introduction"},(0,n.kt)("strong",{parentName:"h3"},"Introduction")),(0,n.kt)("p",null,"The Obol Network package for Dappnode aims to make it seamless for Dappnode users to integrate and benefit from Obol's Distributed Validator Technology (DVT)."),(0,n.kt)("p",null,"A Distributed Validator is one or more logical Ethereum validators being operated across a number of nodes that are all online simultaneously and that all control a subset of the validators' private keys. Each of these nodes need to run an Execution client, a Consensus client, a Distributed Validator client, and a Validator client/Key Manager.\nThe distributed validator clients in these nodes come to consensus on what should be signed before constructing a signature for the validator that will be accepted by the wider Ethereum network. Dividing a validator across a group of nodes allows for fault tolerant validators that can remain online and validating despite a subset of its nodes experiencing an outage, contributing to a stronger and more resilient network."),(0,n.kt)("p",null,"The Obol Dappnode package is available for ",(0,n.kt)("a",{parentName:"p",href:"http://my.dappnode/installer/dnp/obol.dnp.dappnode.eth"},"Ethereum Mainnet")," and the ",(0,n.kt)("a",{parentName:"p",href:"http://my.dappnode/installer/dnp/holesky-obol.dnp.dappnode.eth"},"Holesky Testnet"),"."),(0,n.kt)("h3",{id:"requirements"},(0,n.kt)("strong",{parentName:"h3"},"Requirements")),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"The first thing you'll need to do is set up a fully-synced node. This can be done through the Stakers Menu in Dappnode by selecting:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"1 Execution Client (Geth, Besu, Erigon or Nethermind)"),(0,n.kt)("li",{parentName:"ul"},"1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus)"),(0,n.kt)("li",{parentName:"ul"},"MEV Boost (optional)"))),(0,n.kt)("li",{parentName:"ol"},"Install the Obol package from the DAppStore.")),(0,n.kt)("h3",{id:"first-steps"},(0,n.kt)("strong",{parentName:"h3"},"First Steps")),(0,n.kt)("admonition",{title:"It's important that you understand that the requirements of the DV node runner are not the same as a Solo Stakers'. This technology facilitates the creation of Distributed Validators between a group of independent people. This means you are placing significant trust in the participants you'll run this Distributed Validator Cluster with.",type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"You need to ensure every operator in the Cluster is competent and trustworthy before sharing this responsibility. Negligence on behalf of others in your group can put you at risk, however as far as 66% of these nodes are synced the validators will keep performing their duties.")),(0,n.kt)("p",null,"Once all participants have synced nodes, you'll need to install the Obol Dappnode package. After Dappnodes are ready, the next steps will take place at Obol's Distributed Validator Launchpad. There's a launchpad for ",(0,n.kt)("a",{parentName:"p",href:"https://launchpad.obol.org/"},"Ethereum Mainnet")," and another one for the ",(0,n.kt)("a",{parentName:"p",href:"https://holesky.launchpad.obol.org/"},"Holesky Testnet"),". Start by connecting your wallet and selecting the option that best fits your DV's distribution and setup."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"ObolLaunchpad1",src:a(3921).Z,width:"1904",height:"1090"})),(0,n.kt)("h3",{id:"cluster-configuration"},(0,n.kt)("strong",{parentName:"h3"},"Cluster Configuration")),(0,n.kt)("p",null,"For creating a new cluster with a group, all operators must have an operator's address, which will submit the necessary information to the launchpad. The first step in the configuration process will be to select the cluster size and to enter the operator's adresses."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"ObolLaunchpad2",src:a(222).Z,width:"1904",height:"981"})),(0,n.kt)("p",null,"In this next step, you'll be required to enter your Charon client's ENR, which is a public key that will give your node a unique ID. This ENR can be obtained after installing the Obol Dappnode package ",(0,n.kt)("a",{parentName:"p",href:"http://my.dappnode/packages/my/holesky-obol.dnp.dappnode.eth/info"},"under the Info tab"),"."),(0,n.kt)("admonition",{type:"warning"},(0,n.kt)("p",{parentName:"admonition"},"The Obol Dappnode package supports up to 5 ENRs. This means that you can participate in 5 different clusters with 5 different ENRs using the same package, however it's important to properly backup the package's database if the generated ENRs are committed to functional clusters.")),(0,n.kt)("p",null,"Next, you'll need to specify the amount of validator keys that this cluster will be generating and how these validators will be splitting the rewards. You can read more about the ",(0,n.kt)("a",{parentName:"p",href:"https://docs.obol.org/docs/sc/introducing-obol-splits"},"Obol Splits contract")," and the different options it offers in Obol's documentation."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"ObolLaunchpad3",src:a(6912).Z,width:"1904",height:"1047"})),(0,n.kt)("p",null,"The last step will require that you perform a signature from your operator's address to generate a cluster invite link. You'll need to share this invite link with the rest of the operators so that they can register their ENRs and set everything up for the Distributed Key Generation (DKG) event."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"ObolLaunchpad4",src:a(9468).Z,width:"1604",height:"1478"})),(0,n.kt)("h3",{id:"distributed-key-generation-dkg-event"},(0,n.kt)("strong",{parentName:"h3"},"Distributed Key Generation (DKG) Event")),(0,n.kt)("p",null,"After all operators have successfully submitted their ENRs, the Obol launchpad will generate a \"Definition File URL\" we'll need to load in our Obol Dappnode package's configuration to proceed with the DKG."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"ObolLaunchpad5",src:a(7627).Z,width:"1904",height:"981"})),(0,n.kt)("p",null,"Copy the URL under the Dappnode tab in the Launchpad, go to your package's configuration section and enter it in the cluster number corresponding to the ENR you submitted in the launchpad. Make sure ",(0,n.kt)("inlineCode",{parentName:"p"},"URL"),' is selected under "Config Mode" and apply the configuration.'),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"ObolLaunchpad6",src:a(5158).Z,width:"1904",height:"1089"})),(0,n.kt)("p",null,"After all operators have completed this step the DKG ceremony will start automatically and each of the operators' keystores will be stored in the Obol package's database."),(0,n.kt)("admonition",{type:"danger"},(0,n.kt)("p",{parentName:"admonition"},"Please make sure to create a backup of your Obol package. If you lose your private keys you won't be able to start the DV cluster successfully and may risk your validator deposit becoming unrecoverable. Ensure every operator has their backup secured before activating any validators.")),(0,n.kt)("h3",{id:"adding-validators-to-an-active-cluster"},"Adding Validators to an Active Cluster"),(0,n.kt)("p",null,"After the DKG has succeeded and all of the operators have backed up their cluster's keys, it's time to move on to the validator's deposits. The launchpad will show you an option to submit a ",(0,n.kt)("inlineCode",{parentName:"p"},"deposit_data.json")," file."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"ObolLaunchpad7",src:a(2882).Z,width:"1904",height:"1019"})),(0,n.kt)("p",null,"You can get this file if you decompress your Obol package's backup and look for it inside the charon folder corresponding to the cluster number you intend to run. The launchpad will confirm that you have enough balance in your connected wallet to perform the validator deposit and make you go over final checks prior to signing the deposit."),(0,n.kt)("p",null,"Remember that if you have any questions, you can always drop by the ",(0,n.kt)("a",{parentName:"p",href:"https://discord.gg/dappnode"},"Dappnode Discord server")," to ask for community support."))}c.isMDXComponent=!0},3921:(e,t,a)=>{a.d(t,{Z:()=>o});const o=a.p+"assets/images/obol-launchpad1-384f64d06e76a09d4ec520ee76cf7fdf.png"},222:(e,t,a)=>{a.d(t,{Z:()=>o});const o=a.p+"assets/images/obol-launchpad2-ce96b4add6b5709c4d88acb38a73a1ee.png"},6912:(e,t,a)=>{a.d(t,{Z:()=>o});const o=a.p+"assets/images/obol-launchpad3-c7f4df9b4d7b753d8d0e027b7a659bee.png"},9468:(e,t,a)=>{a.d(t,{Z:()=>o});const o=a.p+"assets/images/obol-launchpad4-f9db7d75efeda34396609e991e2840b6.png"},7627:(e,t,a)=>{a.d(t,{Z:()=>o});const o=a.p+"assets/images/obol-launchpad5-678df34a484ab38012fd657c9dcfaf7e.png"},5158:(e,t,a)=>{a.d(t,{Z:()=>o});const o=a.p+"assets/images/obol-launchpad6-2048cc9b6c237bb96964596ee7bd32ec.png"},2882:(e,t,a)=>{a.d(t,{Z:()=>o});const o=a.p+"assets/images/obol-launchpad7-11fdbb602d3e193d4a456ba9e0e05e1b.png"}}]); \ No newline at end of file diff --git a/assets/js/4d8f6977.c943a5a9.js b/assets/js/4d8f6977.c943a5a9.js new file mode 100644 index 000000000..519ddd46c --- /dev/null +++ b/assets/js/4d8f6977.c943a5a9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5815],{718:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>c,frontMatter:()=>s,metadata:()=>r,toc:()=>l});var o=n(5893),a=n(1151);const s={},i="Obol Distributed Validator package for Dappnode",r={id:"user/staking/ethereum/dvt-technologies/obol-network",title:"Obol Distributed Validator package for Dappnode",description:"---",source:"@site/docs/user/staking/ethereum/dvt-technologies/obol-network.md",sourceDirName:"user/staking/ethereum/dvt-technologies",slug:"/user/staking/ethereum/dvt-technologies/obol-network",permalink:"/docs/user/staking/ethereum/dvt-technologies/obol-network",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/ethereum/dvt-technologies/obol-network.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Stakehouse",permalink:"/docs/user/staking/ethereum/lsd-pools/stakehouse"},next:{title:"SSV Distributed Validator package for Dappnode",permalink:"/docs/user/staking/ethereum/dvt-technologies/ssv-network"}},d={},l=[{value:"Introduction",id:"introduction",level:3},{value:"Requirements",id:"requirements",level:3},{value:"First Steps",id:"first-steps",level:3},{value:"Cluster Configuration",id:"cluster-configuration",level:3},{value:"Distributed Key Generation (DKG) Event",id:"distributed-key-generation-dkg-event",level:3},{value:"Adding Validators to an Active Cluster",id:"adding-validators-to-an-active-cluster",level:3}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h3:"h3",hr:"hr",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"obol-distributed-validator-package-for-dappnode",children:"Obol Distributed Validator package for Dappnode"}),"\n",(0,o.jsx)(t.hr,{}),"\n",(0,o.jsx)(t.h3,{id:"introduction",children:(0,o.jsx)(t.strong,{children:"Introduction"})}),"\n",(0,o.jsx)(t.p,{children:"The Obol Network package for Dappnode aims to make it seamless for Dappnode users to integrate and benefit from Obol's Distributed Validator Technology (DVT)."}),"\n",(0,o.jsx)(t.p,{children:"A Distributed Validator is one or more logical Ethereum validators being operated across a number of nodes that are all online simultaneously and that all control a subset of the validators' private keys. Each of these nodes need to run an Execution client, a Consensus client, a Distributed Validator client, and a Validator client/Key Manager.\nThe distributed validator clients in these nodes come to consensus on what should be signed before constructing a signature for the validator that will be accepted by the wider Ethereum network. Dividing a validator across a group of nodes allows for fault tolerant validators that can remain online and validating despite a subset of its nodes experiencing an outage, contributing to a stronger and more resilient network."}),"\n",(0,o.jsxs)(t.p,{children:["The Obol Dappnode package is available for ",(0,o.jsx)(t.a,{href:"http://my.dappnode/installer/dnp/obol.dnp.dappnode.eth",children:"Ethereum Mainnet"})," and the ",(0,o.jsx)(t.a,{href:"http://my.dappnode/installer/dnp/holesky-obol.dnp.dappnode.eth",children:"Holesky Testnet"}),"."]}),"\n",(0,o.jsx)(t.h3,{id:"requirements",children:(0,o.jsx)(t.strong,{children:"Requirements"})}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["The first thing you'll need to do is set up a fully-synced node. This can be done through the Stakers Menu in Dappnode by selecting:","\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:"1 Execution Client (Geth, Besu, Erigon or Nethermind)"}),"\n",(0,o.jsx)(t.li,{children:"1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus)"}),"\n",(0,o.jsx)(t.li,{children:"MEV Boost (optional)"}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(t.li,{children:"Install the Obol package from the DAppStore."}),"\n"]}),"\n",(0,o.jsx)(t.h3,{id:"first-steps",children:(0,o.jsx)(t.strong,{children:"First Steps"})}),"\n",(0,o.jsx)(t.admonition,{title:"It's important that you understand that the requirements of the DV node runner are not the same as a Solo Stakers'. This technology facilitates the creation of Distributed Validators between a group of independent people. This means you are placing significant trust in the participants you'll run this Distributed Validator Cluster with.",type:"tip",children:(0,o.jsx)(t.p,{children:"You need to ensure every operator in the Cluster is competent and trustworthy before sharing this responsibility. Negligence on behalf of others in your group can put you at risk, however as far as 66% of these nodes are synced the validators will keep performing their duties."})}),"\n",(0,o.jsxs)(t.p,{children:["Once all participants have synced nodes, you'll need to install the Obol Dappnode package. After Dappnodes are ready, the next steps will take place at Obol's Distributed Validator Launchpad. There's a launchpad for ",(0,o.jsx)(t.a,{href:"https://launchpad.obol.org/",children:"Ethereum Mainnet"})," and another one for the ",(0,o.jsx)(t.a,{href:"https://holesky.launchpad.obol.org/",children:"Holesky Testnet"}),". Start by connecting your wallet and selecting the option that best fits your DV's distribution and setup."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"ObolLaunchpad1",src:n(3921).Z+"",width:"1904",height:"1090"})}),"\n",(0,o.jsx)(t.h3,{id:"cluster-configuration",children:(0,o.jsx)(t.strong,{children:"Cluster Configuration"})}),"\n",(0,o.jsx)(t.p,{children:"For creating a new cluster with a group, all operators must have an operator's address, which will submit the necessary information to the launchpad. The first step in the configuration process will be to select the cluster size and to enter the operator's adresses."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"ObolLaunchpad2",src:n(222).Z+"",width:"1904",height:"981"})}),"\n",(0,o.jsxs)(t.p,{children:["In this next step, you'll be required to enter your Charon client's ENR, which is a public key that will give your node a unique ID. This ENR can be obtained after installing the Obol Dappnode package ",(0,o.jsx)(t.a,{href:"http://my.dappnode/packages/my/holesky-obol.dnp.dappnode.eth/info",children:"under the Info tab"}),"."]}),"\n",(0,o.jsx)(t.admonition,{type:"warning",children:(0,o.jsx)(t.p,{children:"The Obol Dappnode package supports up to 5 ENRs. This means that you can participate in 5 different clusters with 5 different ENRs using the same package, however it's important to properly backup the package's database if the generated ENRs are committed to functional clusters."})}),"\n",(0,o.jsxs)(t.p,{children:["Next, you'll need to specify the amount of validator keys that this cluster will be generating and how these validators will be splitting the rewards. You can read more about the ",(0,o.jsx)(t.a,{href:"https://docs.obol.org/docs/sc/introducing-obol-splits",children:"Obol Splits contract"})," and the different options it offers in Obol's documentation."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"ObolLaunchpad3",src:n(6912).Z+"",width:"1904",height:"1047"})}),"\n",(0,o.jsx)(t.p,{children:"The last step will require that you perform a signature from your operator's address to generate a cluster invite link. You'll need to share this invite link with the rest of the operators so that they can register their ENRs and set everything up for the Distributed Key Generation (DKG) event."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"ObolLaunchpad4",src:n(9468).Z+"",width:"1604",height:"1478"})}),"\n",(0,o.jsx)(t.h3,{id:"distributed-key-generation-dkg-event",children:(0,o.jsx)(t.strong,{children:"Distributed Key Generation (DKG) Event"})}),"\n",(0,o.jsx)(t.p,{children:"After all operators have successfully submitted their ENRs, the Obol launchpad will generate a \"Definition File URL\" we'll need to load in our Obol Dappnode package's configuration to proceed with the DKG."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"ObolLaunchpad5",src:n(7627).Z+"",width:"1904",height:"981"})}),"\n",(0,o.jsxs)(t.p,{children:["Copy the URL under the Dappnode tab in the Launchpad, go to your package's configuration section and enter it in the cluster number corresponding to the ENR you submitted in the launchpad. Make sure ",(0,o.jsx)(t.code,{children:"URL"}),' is selected under "Config Mode" and apply the configuration.']}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"ObolLaunchpad6",src:n(5158).Z+"",width:"1904",height:"1089"})}),"\n",(0,o.jsx)(t.p,{children:"After all operators have completed this step the DKG ceremony will start automatically and each of the operators' keystores will be stored in the Obol package's database."}),"\n",(0,o.jsx)(t.admonition,{type:"danger",children:(0,o.jsx)(t.p,{children:"Please make sure to create a backup of your Obol package. If you lose your private keys you won't be able to start the DV cluster successfully and may risk your validator deposit becoming unrecoverable. Ensure every operator has their backup secured before activating any validators."})}),"\n",(0,o.jsx)(t.h3,{id:"adding-validators-to-an-active-cluster",children:"Adding Validators to an Active Cluster"}),"\n",(0,o.jsxs)(t.p,{children:["After the DKG has succeeded and all of the operators have backed up their cluster's keys, it's time to move on to the validator's deposits. The launchpad will show you an option to submit a ",(0,o.jsx)(t.code,{children:"deposit_data.json"})," file."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"ObolLaunchpad7",src:n(2882).Z+"",width:"1904",height:"1019"})}),"\n",(0,o.jsx)(t.p,{children:"You can get this file if you decompress your Obol package's backup and look for it inside the charon folder corresponding to the cluster number you intend to run. The launchpad will confirm that you have enough balance in your connected wallet to perform the validator deposit and make you go over final checks prior to signing the deposit."}),"\n",(0,o.jsxs)(t.p,{children:["Remember that if you have any questions, you can always drop by the ",(0,o.jsx)(t.a,{href:"https://discord.gg/dappnode",children:"Dappnode Discord server"})," to ask for community support."]})]})}function c(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},3921:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/obol-launchpad1-384f64d06e76a09d4ec520ee76cf7fdf.png"},222:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/obol-launchpad2-ce96b4add6b5709c4d88acb38a73a1ee.png"},6912:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/obol-launchpad3-c7f4df9b4d7b753d8d0e027b7a659bee.png"},9468:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/obol-launchpad4-f9db7d75efeda34396609e991e2840b6.png"},7627:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/obol-launchpad5-678df34a484ab38012fd657c9dcfaf7e.png"},5158:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/obol-launchpad6-2048cc9b6c237bb96964596ee7bd32ec.png"},2882:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/obol-launchpad7-11fdbb602d3e193d4a456ba9e0e05e1b.png"},1151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>i});var o=n(7294);const a={},s=o.createContext(a);function i(e){const t=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),o.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/536a4320.54f1de4b.js b/assets/js/536a4320.54f1de4b.js deleted file mode 100644 index 2e1795de4..000000000 --- a/assets/js/536a4320.54f1de4b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9374],{4137:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function s(e){for(var t=1;t =0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(o=0;o =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=o.createContext({}),u=function(e){var t=o.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},c=function(e){var t=u(e.components);return o.createElement(i.Provider,{value:t},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},y=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,i=e.parentName,c=a(e,["components","mdxType","originalType","parentName"]),d=u(n),y=r,h=d["".concat(i,".").concat(y)]||d[y]||p[y]||l;return n?o.createElement(h,s(s({ref:t},c),{},{components:n})):o.createElement(h,s({ref:t},c))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,s=new Array(l);s[0]=y;var a={};for(var i in t)hasOwnProperty.call(t,i)&&(a[i]=t[i]);a.originalType=e,a[d]="string"==typeof e?e:r,s[1]=a;for(var u=2;u {n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>p,frontMatter:()=>l,metadata:()=>a,toc:()=>u});var o=n(7462),r=(n(7294),n(4137));const l={},s="FAQs",a={unversionedId:"user/faqs",id:"user/faqs",title:"FAQs",description:"How can I start validating?",source:"@site/docs/user/faqs.md",sourceDirName:"user",slug:"/user/faqs",permalink:"/docs/user/faqs",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/faqs.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"How to Connect to My Blockchain Node",permalink:"/docs/user/videos-and-tutorials/guides/connect-node"}},i={},u=[],c={toc:u},d="wrapper";function p(e){let{components:t,...n}=e;return(0,r.kt)(d,(0,o.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"faqs"},"FAQs"),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("strong",null,"How can I start validating?")),(0,r.kt)("p",null,"These steps will help you set up an Ethereum/Gnosis Chain/LUKSO solo staker validator:"),(0,r.kt)("ol",null,(0,r.kt)("li",null,"Go to the Stakers menu, select the network tab that you want to validate in and select an execution client (Geth, Nethermind, Erigon or Besu), a consensus client (Prysm, Lighthouse, Teku, Nimbus or Lodestar) and Web3Signer. You can optionally select MEV Boost and any relays you choose to run (where applies)."),(0,r.kt)("li",null,"Create keystore and deposit files using Ethereum/Gnosis/LUKSO CLI or the Wagyu Keygen tool."),(0,r.kt)("li",null,"Wait until clients are synced and check logs to see that everything is running fine."),(0,r.kt)("li",null,"Import keystore file(s) into Web3Signer."),(0,r.kt)("li",null,"Do the deposit. Make sure to triple-check you're interacting with the right website/contract!"),(0,r.kt)("li",null,"Wait until you start attesting."))),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("strong",null,"I'm not able to install! / Package not found")),(0,r.kt)("p",null,"You'll most likely have to switch your IPFS repository to remote, perform updates and go back to your Local IPFS node:"),(0,r.kt)("ol",null,(0,r.kt)("li",null,"Try switching local/remote in IPFS repository: ",(0,r.kt)("a",{href:"http://my.dappnode/repository/ipfs"},"http://my.dappnode/repository/ipfs")),(0,r.kt)("li",null,"Wait a few seconds, then retry downloading/updating your package."),(0,r.kt)("li",null,"Make sure you set your IPFS node to Local for optimal Dappnode performance."))),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("strong",null,"I want to install Dappnode, what are the minimum specs I need?")),(0,r.kt)("p",null,"Assuming you want to sync only one chain (two clients) you should have at least:"),(0,r.kt)("ul",null,(0,r.kt)("li",null,"16GB RAM"),(0,r.kt)("li",null,"2TB of FAST storage (NVMe recommended)"),(0,r.kt)("li",null,"Intel i3 or i5 processor")),(0,r.kt)("p",null,"If you want to run Dappnode as recommended, we suggest the following specs:"),(0,r.kt)("ul",null,(0,r.kt)("li",null,"32-64GB RAM"),(0,r.kt)("li",null,"4TB NVMe"),(0,r.kt)("li",null,"Intel i7 processor"))),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("strong",null,"VPN/Wireguard isn't working!")),(0,r.kt)("ul",null,(0,r.kt)("li",null,"Are you in the same network as the Dappnode? Use the local proxy access to configure your VPN: ",(0,r.kt)("a",{href:"http://dappnode.local/"},"http://dappnode.local/")),(0,r.kt)("li",null,"Is UPnP enabled in your router settings? Try restarting your router after applying this setting!"),(0,r.kt)("li",null,"Is the port for Wireguard open in your router's port forwarding settings? (UDP 51820)"),(0,r.kt)("li",null,"Are you behind a CGNAT? You need to contact your ISP and request an IPv4 static address."),(0,r.kt)("li",null,"Are you connected to another VPN? Please disconnect from this VPN before connecting to your Dappnode's VPN."),(0,r.kt)("li",null,"If you're trying to access with Wireguard through a local network, make sure you're using your local credentials:"))),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("strong",null,"My Web3Signer status has an odd grey bar in its status, is something wrong?")),(0,r.kt)("p",null,"Web3Signer includes 4 containers (services): Web3Signer, Brain, Flyway and Postgres. You can check it yourself in the package view."),(0,r.kt)("p",null,"Whenever one is indicated as Stopped (gray), it means that it was stopped. But in this case - just the flyway service is stopped, which is an expected behavior - it should run only once, while migration of the database. If it\u2019s indicated as grey - that means that whenever it migrated - everything went well, and now there is no need for it to run!")),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("strong",null,"My clients are not syncing!")),(0,r.kt)("p",null,"It's always a good idea to check the logs first for any specific errors, but here are some of the most common issues:"),(0,r.kt)("ul",null,(0,r.kt)("li",null,"Have you selected both Execution and Consensus clients in the Stakers Menu?"),(0,r.kt)("li",null,"If something looks wrong in the dashboard, always check the logs first! The clients might be syncing as expected. Check if the block number and the package's volume size are increasing. This is a common issue for Nethermind."))),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("strong",null,"How long do clients take to sync?")),(0,r.kt)("p",null,"This is very different for every Dappnode depending on a number of factors:"),(0,r.kt)("ul",null,(0,r.kt)("li",null,"Geographic location"),(0,r.kt)("li",null,"Bandwidth"),(0,r.kt)("li",null,"ISP limitations"),(0,r.kt)("li",null,"Chosen EL and CL clients")),(0,r.kt)("p",null,"There is no exact information on how long exactly every client takes to sync, but there are a couple of facts that would be useful:"),(0,r.kt)("ul",null,(0,r.kt)("li",null,"Consensus client usually doesn't take longer than 5 minutes, as long as you enabled checksync when selecting your clients in the Stakers menu."),(0,r.kt)("li",null,"Execution client syncing time depends on many factors, but it might take up to several days in some cases, so if you felt like consensus client synced fast, and execution client is still syncing after several hours - that's ok, it might take some time!"))))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/536a4320.efd3187a.js b/assets/js/536a4320.efd3187a.js new file mode 100644 index 000000000..85ad43117 --- /dev/null +++ b/assets/js/536a4320.efd3187a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9374],{392:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var t=s(5893),i=s(1151);const o={},r="FAQs",a={id:"user/faqs",title:"FAQs",description:"How can I start validating?",source:"@site/docs/user/faqs.md",sourceDirName:"user",slug:"/user/faqs",permalink:"/docs/user/faqs",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/faqs.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"How to Connect to My Blockchain Node",permalink:"/docs/user/videos-and-tutorials/guides/connect-node"}},l={},c=[];function d(e){const n={a:"a",h1:"h1",...(0,i.a)(),...e.components},{Details:s}=n;return s||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"faqs",children:"FAQs"}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("strong",{children:"How can I start validating?"})}),(0,t.jsx)("p",{children:"These steps will help you set up an Ethereum/Gnosis Chain/LUKSO solo staker validator:"}),(0,t.jsxs)("ol",{children:[(0,t.jsx)("li",{children:"Go to the Stakers menu, select the network tab that you want to validate in and select an execution client (Geth, Nethermind, Erigon or Besu), a consensus client (Prysm, Lighthouse, Teku, Nimbus or Lodestar) and Web3Signer. You can optionally select MEV Boost and any relays you choose to run (where applies)."}),(0,t.jsx)("li",{children:"Create keystore and deposit files using Ethereum/Gnosis/LUKSO CLI or the Wagyu Keygen tool."}),(0,t.jsx)("li",{children:"Wait until clients are synced and check logs to see that everything is running fine."}),(0,t.jsx)("li",{children:"Import keystore file(s) into Web3Signer."}),(0,t.jsx)("li",{children:"Do the deposit. Make sure to triple-check you're interacting with the right website/contract!"}),(0,t.jsx)("li",{children:"Wait until you start attesting."})]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("strong",{children:"I'm not able to install! / Package not found"})}),(0,t.jsx)("p",{children:"You'll most likely have to switch your IPFS repository to remote, perform updates and go back to your Local IPFS node:"}),(0,t.jsxs)("ol",{children:[(0,t.jsxs)("li",{children:["Try switching local/remote in IPFS repository: ",(0,t.jsx)("a",{href:"http://my.dappnode/repository/ipfs",children:(0,t.jsx)(n.a,{href:"http://my.dappnode/repository/ipfs",children:"http://my.dappnode/repository/ipfs"})})]}),(0,t.jsx)("li",{children:"Wait a few seconds, then retry downloading/updating your package."}),(0,t.jsx)("li",{children:"Make sure you set your IPFS node to Local for optimal Dappnode performance."})]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("strong",{children:"I want to install Dappnode, what are the minimum specs I need?"})}),(0,t.jsx)("p",{children:"Assuming you want to sync only one chain (two clients) you should have at least:"}),(0,t.jsxs)("ul",{children:[(0,t.jsx)("li",{children:"16GB RAM"}),(0,t.jsx)("li",{children:"2TB of FAST storage (NVMe recommended)"}),(0,t.jsx)("li",{children:"Intel i3 or i5 processor"})]}),(0,t.jsx)("p",{children:"If you want to run Dappnode as recommended, we suggest the following specs:"}),(0,t.jsxs)("ul",{children:[(0,t.jsx)("li",{children:"32-64GB RAM"}),(0,t.jsx)("li",{children:"4TB NVMe"}),(0,t.jsx)("li",{children:"Intel i7 processor"})]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("strong",{children:"VPN/Wireguard isn't working!"})}),(0,t.jsxs)("ul",{children:[(0,t.jsxs)("li",{children:["Are you in the same network as the Dappnode? Use the local proxy access to configure your VPN: ",(0,t.jsx)("a",{href:"http://dappnode.local/",children:(0,t.jsx)(n.a,{href:"http://dappnode.local/",children:"http://dappnode.local/"})})]}),(0,t.jsx)("li",{children:"Is UPnP enabled in your router settings? Try restarting your router after applying this setting!"}),(0,t.jsx)("li",{children:"Is the port for Wireguard open in your router's port forwarding settings? (UDP 51820)"}),(0,t.jsx)("li",{children:"Are you behind a CGNAT? You need to contact your ISP and request an IPv4 static address."}),(0,t.jsx)("li",{children:"Are you connected to another VPN? Please disconnect from this VPN before connecting to your Dappnode's VPN."}),(0,t.jsx)("li",{children:"If you're trying to access with Wireguard through a local network, make sure you're using your local credentials:"})]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("strong",{children:"My Web3Signer status has an odd grey bar in its status, is something wrong?"})}),(0,t.jsx)("p",{children:"Web3Signer includes 4 containers (services): Web3Signer, Brain, Flyway and Postgres. You can check it yourself in the package view."}),(0,t.jsx)("p",{children:"Whenever one is indicated as Stopped (gray), it means that it was stopped. But in this case - just the flyway service is stopped, which is an expected behavior - it should run only once, while migration of the database. If it\u2019s indicated as grey - that means that whenever it migrated - everything went well, and now there is no need for it to run!"})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("strong",{children:"My clients are not syncing!"})}),(0,t.jsx)("p",{children:"It's always a good idea to check the logs first for any specific errors, but here are some of the most common issues:"}),(0,t.jsxs)("ul",{children:[(0,t.jsx)("li",{children:"Have you selected both Execution and Consensus clients in the Stakers Menu?"}),(0,t.jsx)("li",{children:"If something looks wrong in the dashboard, always check the logs first! The clients might be syncing as expected. Check if the block number and the package's volume size are increasing. This is a common issue for Nethermind."})]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("strong",{children:"How long do clients take to sync?"})}),(0,t.jsx)("p",{children:"This is very different for every Dappnode depending on a number of factors:"}),(0,t.jsxs)("ul",{children:[(0,t.jsx)("li",{children:"Geographic location"}),(0,t.jsx)("li",{children:"Bandwidth"}),(0,t.jsx)("li",{children:"ISP limitations"}),(0,t.jsx)("li",{children:"Chosen EL and CL clients"})]}),(0,t.jsx)("p",{children:"There is no exact information on how long exactly every client takes to sync, but there are a couple of facts that would be useful:"}),(0,t.jsxs)("ul",{children:[(0,t.jsx)("li",{children:"Consensus client usually doesn't take longer than 5 minutes, as long as you enabled checksync when selecting your clients in the Stakers menu."}),(0,t.jsx)("li",{children:"Execution client syncing time depends on many factors, but it might take up to several days in some cases, so if you felt like consensus client synced fast, and execution client is still syncing after several hours - that's ok, it might take some time!"})]})]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>r});var t=s(7294);const i={},o=t.createContext(i);function r(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5373dce7.f0bfd25b.js b/assets/js/5373dce7.f0bfd25b.js new file mode 100644 index 000000000..f74607e63 --- /dev/null +++ b/assets/js/5373dce7.f0bfd25b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1606],{2776:s=>{s.exports=JSON.parse('{"name":"@easyops-cn/docusaurus-search-local","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/53ed655b.06f06d30.js b/assets/js/53ed655b.06f06d30.js new file mode 100644 index 000000000..644617364 --- /dev/null +++ b/assets/js/53ed655b.06f06d30.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5708],{3252:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>s,contentTitle:()=>c,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var r=o(5893),t=o(1151);const a={},c="Monero",i={id:"user/packages/monero",title:"Monero",description:"Introducing Monero: A Privacy-Centric Cryptocurrency",source:"@site/docs/user/packages/monero.md",sourceDirName:"user/packages",slug:"/user/packages/monero",permalink:"/docs/user/packages/monero",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/monero.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Avalanche",permalink:"/docs/user/packages/avalanche"},next:{title:"Guide to Installing Bee Node on Dappnode",permalink:"/docs/user/packages/swarm"}},s={},p=[{value:"Introducing Monero: A Privacy-Centric Cryptocurrency",id:"introducing-monero-a-privacy-centric-cryptocurrency",level:2},{value:"Monero\u2019s Package on Dappnode",id:"moneros-package-on-dappnode",level:2}];function d(e){const n={h1:"h1",h2:"h2",p:"p",...(0,t.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"monero",children:"Monero"}),"\n",(0,r.jsx)(n.h2,{id:"introducing-monero-a-privacy-centric-cryptocurrency",children:"Introducing Monero: A Privacy-Centric Cryptocurrency"}),"\n",(0,r.jsx)(n.p,{children:"Monero stands as a privacy-focused cryptocurrency with a core focus on anonymity and transaction fungibility. Monero uses innovative cryptographic techniques to obscure transaction details, making it difficult to trace the sender, receiver, and transaction amount."}),"\n",(0,r.jsx)(n.h2,{id:"moneros-package-on-dappnode",children:"Monero\u2019s Package on Dappnode"}),"\n",(0,r.jsx)(n.p,{children:"By running a Monero node in Dappnode, you play a crucial role in supporting the decentralized nature of the Monero ecosystem. You actively contribute to the decentralization of the network, playing a role in shaping a financial ecosystem that values privacy and security."})]})}function u(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},1151:(e,n,o)=>{o.d(n,{Z:()=>i,a:()=>c});var r=o(7294);const t={},a=r.createContext(t);function c(e){const n=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),r.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/53ed655b.95aef4df.js b/assets/js/53ed655b.95aef4df.js deleted file mode 100644 index 66f02c0c5..000000000 --- a/assets/js/53ed655b.95aef4df.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5708],{4137:(e,r,n)=>{n.d(r,{Zo:()=>u,kt:()=>f});var t=n(7294);function o(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function a(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function c(e){for(var r=1;r =0||(o[n]=e[n]);return o}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(t=0;t =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=t.createContext({}),s=function(e){var r=t.useContext(p),n=r;return e&&(n="function"==typeof e?e(r):c(c({},r),e)),n},u=function(e){var r=s(e.components);return t.createElement(p.Provider,{value:r},e.children)},l="mdxType",d={inlineCode:"code",wrapper:function(e){var r=e.children;return t.createElement(t.Fragment,{},r)}},y=t.forwardRef((function(e,r){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),l=s(n),y=o,f=l["".concat(p,".").concat(y)]||l[y]||d[y]||a;return n?t.createElement(f,c(c({ref:r},u),{},{components:n})):t.createElement(f,c({ref:r},u))}));function f(e,r){var n=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var a=n.length,c=new Array(a);c[0]=y;var i={};for(var p in r)hasOwnProperty.call(r,p)&&(i[p]=r[p]);i.originalType=e,i[l]="string"==typeof e?e:o,c[1]=i;for(var s=2;s{n.r(r),n.d(r,{assets:()=>p,contentTitle:()=>c,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var t=n(7462),o=(n(7294),n(4137));const a={},c="Monero",i={unversionedId:"user/packages/monero",id:"user/packages/monero",title:"Monero",description:"Introducing Monero: A Privacy-Centric Cryptocurrency",source:"@site/docs/user/packages/monero.md",sourceDirName:"user/packages",slug:"/user/packages/monero",permalink:"/docs/user/packages/monero",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/monero.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Avalanche",permalink:"/docs/user/packages/avalanche"},next:{title:"Guide to Installing Bee Node on Dappnode",permalink:"/docs/user/packages/swarm"}},p={},s=[{value:"Introducing Monero: A Privacy-Centric Cryptocurrency",id:"introducing-monero-a-privacy-centric-cryptocurrency",level:2},{value:"Monero\u2019s Package on Dappnode",id:"moneros-package-on-dappnode",level:2}],u={toc:s},l="wrapper";function d(e){let{components:r,...n}=e;return(0,o.kt)(l,(0,t.Z)({},u,n,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"monero"},"Monero"),(0,o.kt)("h2",{id:"introducing-monero-a-privacy-centric-cryptocurrency"},"Introducing Monero: A Privacy-Centric Cryptocurrency"),(0,o.kt)("p",null,"Monero stands as a privacy-focused cryptocurrency with a core focus on anonymity and transaction fungibility. Monero uses innovative cryptographic techniques to obscure transaction details, making it difficult to trace the sender, receiver, and transaction amount."),(0,o.kt)("h2",{id:"moneros-package-on-dappnode"},"Monero\u2019s Package on Dappnode"),(0,o.kt)("p",null,"By running a Monero node in Dappnode, you play a crucial role in supporting the decentralized nature of the Monero ecosystem. You actively contribute to the decentralization of the network, playing a role in shaping a financial ecosystem that values privacy and security."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5456a9ed.28407620.js b/assets/js/5456a9ed.28407620.js deleted file mode 100644 index 5b3dc1c32..000000000 --- a/assets/js/5456a9ed.28407620.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1600],{4137:(e,t,o)=>{o.d(t,{Zo:()=>p,kt:()=>y});var r=o(7294);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function n(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function i(e){for(var t=1;t =0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var c=r.createContext({}),l=function(e){var t=r.useContext(c),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},p=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var o=e.components,a=e.mdxType,n=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(o),m=a,y=u["".concat(c,".").concat(m)]||u[m]||d[m]||n;return o?r.createElement(y,i(i({ref:t},p),{},{components:o})):r.createElement(y,i({ref:t},p))}));function y(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=o.length,i=new Array(n);i[0]=m;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[u]="string"==typeof e?e:a,i[1]=s;for(var l=2;l {o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>n,metadata:()=>s,toc:()=>l});var r=o(7462),a=(o(7294),o(4137));const n={},i="Local Proxy Access to Dappnode",s={unversionedId:"user/access-your-dappnode/local",id:"user/access-your-dappnode/local",title:"Local Proxy Access to Dappnode",description:"The local proxy method provides a way to access your Dappnode from within the same local network without any previous configuration required. However, it's essential to understand that due to certain network incompatibilities, this method might not work for all users.",source:"@site/docs/user/access-your-dappnode/local.md",sourceDirName:"user/access-your-dappnode",slug:"/user/access-your-dappnode/local",permalink:"/docs/user/access-your-dappnode/local",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/access-your-dappnode/local.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Terminal Access to Dappnode",permalink:"/docs/user/access-your-dappnode/terminal"},next:{title:"Hardware",permalink:"/docs/user/hardware/overview"}},c={},l=[{value:"When to Use Local Proxy",id:"when-to-use-local-proxy",level:2},{value:"Accessing Dappnode via Local Proxy",id:"accessing-dappnode-via-local-proxy",level:2},{value:"Limitations & Settings",id:"limitations--settings",level:2}],p={toc:l},u="wrapper";function d(e){let{components:t,...o}=e;return(0,a.kt)(u,(0,r.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"local-proxy-access-to-dappnode"},"Local Proxy Access to Dappnode"),(0,a.kt)("p",null,"The local proxy method provides a way to access your Dappnode from within the same local network without any previous configuration required. However, it's essential to understand that due to certain network incompatibilities, this method might not work for all users."),(0,a.kt)("h2",{id:"when-to-use-local-proxy"},"When to Use Local Proxy"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\ud83d\udee0 ",(0,a.kt)("strong",{parentName:"li"},"Setup & Recovery"),": If you're setting up your VPN or recovering from access issues, the local proxy can be really useful."),(0,a.kt)("li",{parentName:"ul"},"\ud83d\udce1 ",(0,a.kt)("strong",{parentName:"li"},"Same Network"),": It's crucial to be on the same local network as your Dappnode."),(0,a.kt)("li",{parentName:"ul"},"\u26a0\ufe0f ",(0,a.kt)("strong",{parentName:"li"},"Network Limitations"),": Local proxy access might not always be available due to specific network configurations or restrictions.")),(0,a.kt)("h2",{id:"accessing-dappnode-via-local-proxy"},"Accessing Dappnode via Local Proxy"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"\ud83d\udcf1 On a device of your choice that's connected to the same network as your Dappnode, open a web browser."),(0,a.kt)("li",{parentName:"ol"},"\ud83c\udf10 Type in ",(0,a.kt)("a",{parentName:"li",href:"http://dappnode.local"},"http://dappnode.local")," in the address bar."),(0,a.kt)("li",{parentName:"ol"},"\ud83d\udee1 If prompted, use your Dappnode credentials to log in or register as a new user if you haven't already.")),(0,a.kt)("admonition",{type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"If ",(0,a.kt)("a",{parentName:"p",href:"http://dappnode.local"},"http://dappnode.local")," doesn't work, there might be network-specific restrictions or configurations preventing access. In such cases, consider other access methods or reach out for support.")),(0,a.kt)("h2",{id:"limitations--settings"},"Limitations & Settings"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"\u26a0\ufe0f ",(0,a.kt)("strong",{parentName:"p"},"Access Limitations"),": When using the local network proxy, you're limited to the Dappnode Admin UI dashboard at ",(0,a.kt)("inlineCode",{parentName:"p"},"dappnode.local")," and cannot access other features like blockchain clients (Ethereum, Gnosis Chain, etc.). For full feature access, you'd need to configure and use either a VPN or the included Wi-Fi hotspot.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Turning Local Proxy Off"),": If you primarily use VPN features or the included Wi-Fi hotspot and find no use for local network access, you can disable it. Disabling can also be a security measure if you don't want all devices on your network to have access to this UI, even though it's protected by a password. To toggle local network access, navigate to the Wi-Fi sidebar menu on your Dappnode:"),(0,a.kt)("p",{parentName:"li"}," \ud83d\udd0d Navigate to the ",(0,a.kt)("a",{parentName:"p",href:"http://my.dappnode/wireless-network/local"},"Local Network menu")," on your Dappnode."),(0,a.kt)("p",{parentName:"li"},' \ud83d\udd27 Toggle the "Local Network Proxy" switch.'),(0,a.kt)("p",{align:"center"},(0,a.kt)("img",{src:"/img/local-proxy-switch.png",alt:"Dappnode Local Proxy Switch",width:"600"})))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5456a9ed.e6eff62e.js b/assets/js/5456a9ed.e6eff62e.js new file mode 100644 index 000000000..dfe3c7d26 --- /dev/null +++ b/assets/js/5456a9ed.e6eff62e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1600],{242:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>a,default:()=>p,frontMatter:()=>r,metadata:()=>i,toc:()=>l});var s=n(5893),t=n(1151);const r={},a="Local Proxy Access to Dappnode",i={id:"user/access-your-dappnode/local",title:"Local Proxy Access to Dappnode",description:"The local proxy method provides a way to access your Dappnode from within the same local network without any previous configuration required. However, it's essential to understand that due to certain network incompatibilities, this method might not work for all users.",source:"@site/docs/user/access-your-dappnode/local.md",sourceDirName:"user/access-your-dappnode",slug:"/user/access-your-dappnode/local",permalink:"/docs/user/access-your-dappnode/local",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/access-your-dappnode/local.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Terminal Access to Dappnode",permalink:"/docs/user/access-your-dappnode/terminal"},next:{title:"Hardware",permalink:"/docs/user/hardware/overview"}},c={},l=[{value:"When to Use Local Proxy",id:"when-to-use-local-proxy",level:2},{value:"Accessing Dappnode via Local Proxy",id:"accessing-dappnode-via-local-proxy",level:2},{value:"Limitations & Settings",id:"limitations--settings",level:2}];function d(e){const o={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.h1,{id:"local-proxy-access-to-dappnode",children:"Local Proxy Access to Dappnode"}),"\n",(0,s.jsx)(o.p,{children:"The local proxy method provides a way to access your Dappnode from within the same local network without any previous configuration required. However, it's essential to understand that due to certain network incompatibilities, this method might not work for all users."}),"\n",(0,s.jsx)(o.h2,{id:"when-to-use-local-proxy",children:"When to Use Local Proxy"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsxs)(o.li,{children:["\ud83d\udee0 ",(0,s.jsx)(o.strong,{children:"Setup & Recovery"}),": If you're setting up your VPN or recovering from access issues, the local proxy can be really useful."]}),"\n",(0,s.jsxs)(o.li,{children:["\ud83d\udce1 ",(0,s.jsx)(o.strong,{children:"Same Network"}),": It's crucial to be on the same local network as your Dappnode."]}),"\n",(0,s.jsxs)(o.li,{children:["\u26a0\ufe0f ",(0,s.jsx)(o.strong,{children:"Network Limitations"}),": Local proxy access might not always be available due to specific network configurations or restrictions."]}),"\n"]}),"\n",(0,s.jsx)(o.h2,{id:"accessing-dappnode-via-local-proxy",children:"Accessing Dappnode via Local Proxy"}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsx)(o.li,{children:"\ud83d\udcf1 On a device of your choice that's connected to the same network as your Dappnode, open a web browser."}),"\n",(0,s.jsxs)(o.li,{children:["\ud83c\udf10 Type in ",(0,s.jsx)(o.a,{href:"http://dappnode.local",children:"http://dappnode.local"})," in the address bar."]}),"\n",(0,s.jsx)(o.li,{children:"\ud83d\udee1 If prompted, use your Dappnode credentials to log in or register as a new user if you haven't already."}),"\n"]}),"\n",(0,s.jsx)(o.admonition,{type:"caution",children:(0,s.jsxs)(o.p,{children:["If ",(0,s.jsx)(o.a,{href:"http://dappnode.local",children:"http://dappnode.local"})," doesn't work, there might be network-specific restrictions or configurations preventing access. In such cases, consider other access methods or reach out for support."]})}),"\n",(0,s.jsx)(o.h2,{id:"limitations--settings",children:"Limitations & Settings"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["\u26a0\ufe0f ",(0,s.jsx)(o.strong,{children:"Access Limitations"}),": When using the local network proxy, you're limited to the Dappnode Admin UI dashboard at ",(0,s.jsx)(o.code,{children:"dappnode.local"})," and cannot access other features like blockchain clients (Ethereum, Gnosis Chain, etc.). For full feature access, you'd need to configure and use either a VPN or the included Wi-Fi hotspot."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:[(0,s.jsx)(o.strong,{children:"Turning Local Proxy Off"}),": If you primarily use VPN features or the included Wi-Fi hotspot and find no use for local network access, you can disable it. Disabling can also be a security measure if you don't want all devices on your network to have access to this UI, even though it's protected by a password. To toggle local network access, navigate to the Wi-Fi sidebar menu on your Dappnode:"]}),"\n",(0,s.jsxs)(o.p,{children:["\ud83d\udd0d Navigate to the ",(0,s.jsx)(o.a,{href:"http://my.dappnode/wireless-network/local",children:"Local Network menu"})," on your Dappnode."]}),"\n",(0,s.jsx)(o.p,{children:'\ud83d\udd27 Toggle the "Local Network Proxy" switch.'}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"/img/local-proxy-switch.png",alt:"Dappnode Local Proxy Switch",width:"600"})}),"\n"]}),"\n"]})]})}function p(e={}){const{wrapper:o}={...(0,t.a)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},1151:(e,o,n)=>{n.d(o,{Z:()=>i,a:()=>a});var s=n(7294);const t={},r=s.createContext(t);function a(e){const o=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5525.46543622.js b/assets/js/5525.46543622.js new file mode 100644 index 000000000..89b62c767 --- /dev/null +++ b/assets/js/5525.46543622.js @@ -0,0 +1 @@ +(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5525],{5525:()=>{}}]); \ No newline at end of file diff --git a/assets/js/59362658.2321f39d.js b/assets/js/59362658.2321f39d.js new file mode 100644 index 000000000..90762c14e --- /dev/null +++ b/assets/js/59362658.2321f39d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2267],{7797:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>c,toc:()=>u});var s=o(5893),n=o(1151);const r={slug:"mdx-blog-post",title:"MDX Blog Post",authors:["slorber"],tags:["docusaurus"]},a=void 0,c={permalink:"/blog/mdx-blog-post",source:"@site/blog/2021-08-01-mdx-blog-post.mdx",title:"MDX Blog Post",description:"Blog posts support Docusaurus Markdown features, such as MDX.",date:"2021-08-01T00:00:00.000Z",formattedDate:"August 1, 2021",tags:[{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.175,hasTruncateMarker:!1,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{slug:"mdx-blog-post",title:"MDX Blog Post",authors:["slorber"],tags:["docusaurus"]},unlisted:!1,prevItem:{title:"Welcome",permalink:"/blog/welcome"},nextItem:{title:"Long Blog Post",permalink:"/blog/long-blog-post"}},l={authorsImageUrls:[void 0]},u=[];function i(t){const e={a:"a",admonition:"admonition",code:"code",p:"p",pre:"pre",...(0,n.a)(),...t.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(e.p,{children:["Blog posts support ",(0,s.jsx)(e.a,{href:"https://docusaurus.io/docs/markdown-features",children:"Docusaurus Markdown features"}),", such as ",(0,s.jsx)(e.a,{href:"https://mdxjs.com/",children:"MDX"}),"."]}),"\n",(0,s.jsxs)(e.admonition,{type:"tip",children:[(0,s.jsx)(e.p,{children:"Use the power of React to create interactive blog posts."}),(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-js",children:"\n"})}),(0,s.jsx)("button",{onClick:()=>alert("button clicked!"),children:"Click me!"})]})]})}function d(t={}){const{wrapper:e}={...(0,n.a)(),...t.components};return e?(0,s.jsx)(e,{...t,children:(0,s.jsx)(i,{...t})}):i(t)}},1151:(t,e,o)=>{o.d(e,{Z:()=>c,a:()=>a});var s=o(7294);const n={},r=s.createContext(n);function a(t){const e=s.useContext(r);return s.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function c(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:a(t.components),s.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/59362658.7e1a497f.js b/assets/js/59362658.7e1a497f.js deleted file mode 100644 index 70419507e..000000000 --- a/assets/js/59362658.7e1a497f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2267],{4137:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>b});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function s(e){for(var t=1;t =0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var c=o.createContext({}),u=function(e){var t=o.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},p=function(e){var t=u(e.components);return o.createElement(c.Provider,{value:t},e.children)},i="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),i=u(r),d=n,b=i["".concat(c,".").concat(d)]||i[d]||m[d]||a;return r?o.createElement(b,s(s({ref:t},p),{},{components:r})):o.createElement(b,s({ref:t},p))}));function b(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,s=new Array(a);s[0]=d;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[i]="string"==typeof e?e:n,s[1]=l;for(var u=2;u{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var o=r(7462),n=(r(7294),r(4137));const a={slug:"mdx-blog-post",title:"MDX Blog Post",authors:["slorber"],tags:["docusaurus"]},s=void 0,l={permalink:"/blog/mdx-blog-post",source:"@site/blog/2021-08-01-mdx-blog-post.mdx",title:"MDX Blog Post",description:"Blog posts support Docusaurus Markdown features, such as MDX.",date:"2021-08-01T00:00:00.000Z",formattedDate:"August 1, 2021",tags:[{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.175,hasTruncateMarker:!1,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{slug:"mdx-blog-post",title:"MDX Blog Post",authors:["slorber"],tags:["docusaurus"]},prevItem:{title:"Welcome",permalink:"/blog/welcome"},nextItem:{title:"Long Blog Post",permalink:"/blog/long-blog-post"}},c={authorsImageUrls:[void 0]},u=[],p={toc:u},i="wrapper";function m(e){let{components:t,...r}=e;return(0,n.kt)(i,(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Blog posts support ",(0,n.kt)("a",{parentName:"p",href:"https://docusaurus.io/docs/markdown-features"},"Docusaurus Markdown features"),", such as ",(0,n.kt)("a",{parentName:"p",href:"https://mdxjs.com/"},"MDX"),"."),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"Use the power of React to create interactive blog posts."),(0,n.kt)("pre",{parentName:"admonition"},(0,n.kt)("code",{parentName:"pre",className:"language-js"},"\n")),(0,n.kt)("button",{onClick:()=>alert("button clicked!")},"Click me!")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/59a51c52.947a6830.js b/assets/js/59a51c52.947a6830.js deleted file mode 100644 index 30f523b24..000000000 --- a/assets/js/59a51c52.947a6830.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4980],{4137:(e,t,i)=>{i.d(t,{Zo:()=>p,kt:()=>h});var n=i(7294);function a(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function o(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function r(e){for(var t=1;t =0||(a[i]=e[i]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}var s=n.createContext({}),c=function(e){var t=n.useContext(s),i=t;return e&&(i="function"==typeof e?e(t):r(r({},t),e)),i},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var i=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),m=c(i),u=a,h=m["".concat(s,".").concat(u)]||m[u]||d[u]||o;return i?n.createElement(h,r(r({ref:t},p),{},{components:i})):n.createElement(h,r({ref:t},p))}));function h(e,t){var i=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=i.length,r=new Array(o);r[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[m]="string"==typeof e?e:a,r[1]=l;for(var c=2;c {i.r(t),i.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=i(7462),a=(i(7294),i(4137));const o={},r="Setting up Ethical Metrics",l={unversionedId:"user/ethical-metrics/setup",id:"user/ethical-metrics/setup",title:"Setting up Ethical Metrics",description:"We highly recommend utilizing the Telegram channel option in addition to or instead of relying solely on email notifications.",source:"@site/docs/user/ethical-metrics/setup.md",sourceDirName:"user/ethical-metrics",slug:"/user/ethical-metrics/setup",permalink:"/docs/user/ethical-metrics/setup",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/ethical-metrics/setup.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Ethical Metrics",permalink:"/docs/user/ethical-metrics/overview"},next:{title:"Metrics Collected by Ethical Metrics",permalink:"/docs/user/ethical-metrics/metrics"}},s={},c=[{value:"Telegram Notifications",id:"telegram-notifications",level:2},{value:"Email Notifications",id:"email-notifications",level:2}],p={toc:c},m="wrapper";function d(e){let{components:t,...o}=e;return(0,a.kt)(m,(0,n.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"setting-up-ethical-metrics"},"Setting up Ethical Metrics"),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"We highly recommend utilizing the Telegram channel option in addition to or instead of relying solely on email notifications.")),(0,a.kt)("p",null,"Email notifications may sometimes encounter hurdles such as being categorized as spam or getting lost in a cluttered inbox. This could inadvertently lead to missing out on important notifications that require your immediate attention."),(0,a.kt)("p",null,"In contrast, Telegram channels provide a streamlined and efficient way to receive notifications directly to your device, ensuring that you stay informed without any interruptions."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"setup-6",src:i(1344).Z,width:"1685",height:"674"})),(0,a.kt)("p",null,"In order to setup your Ethical Metrics notification system, you need to follow these steps:"),(0,a.kt)("h2",{id:"telegram-notifications"},"Telegram Notifications"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Access Telegram Web:\nOpen Telegram Web using ",(0,a.kt)("a",{parentName:"p",href:"https://web.telegram.org/a/"},"this link")," and login with your account. Ensure the URL ends with ",(0,a.kt)("inlineCode",{parentName:"p"},"/a/"),". If not, manually add ",(0,a.kt)("inlineCode",{parentName:"p"},"/a/")," after ",(0,a.kt)("inlineCode",{parentName:"p"},"https://web.telegram.org/"),".")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Create a Private Channel.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Add the DappNode bot (",(0,a.kt)("inlineCode",{parentName:"p"},"@ethicalMetricsAlerts_bot"),") to your channel as an administrator.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Find Your Channel ID:\nCopy the channel ID from the URL.\nIt's a 13-digit number following the ",(0,a.kt)("inlineCode",{parentName:"p"},"-")," in the URL. The ID always starts with ",(0,a.kt)("inlineCode",{parentName:"p"},"-100"),". Ensure to include the ",(0,a.kt)("inlineCode",{parentName:"p"},"-")," when copying."),(0,a.kt)("p",{parentName:"li"},(0,a.kt)("img",{alt:"telegram-channel-id",src:i(7537).Z,width:"302",height:"29"}))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Navigate to ",(0,a.kt)("a",{parentName:"p",href:"http://my.dappnode/system/notifications"},"http://my.dappnode/system/notifications"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Enable Notifications:\nPaste the channel ID into the Telegram Channel ID field and toggle the switch ",(0,a.kt)("inlineCode",{parentName:"p"},"ON")," to start receiving notifications."))),(0,a.kt)("h2",{id:"email-notifications"},"Email Notifications"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Navigate to ",(0,a.kt)("a",{parentName:"li",href:"http://my.dappnode/system/notifications"},"http://my.dappnode/system/notifications")),(0,a.kt)("li",{parentName:"ol"},"Introduce the email address where you want to receive the notifications and click on the switch to activate the notifications."),(0,a.kt)("li",{parentName:"ol"},"Thats it! Your Ethical Metrics will automatically register your TOR instance with the email address you provided. This will happen through the TOR network, preserving your privacy. You should receive a welcome email in the following minutes.")),(0,a.kt)("admonition",{type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"To send email notifications, it is necessary that you provide an email address. In order to remain private, we recommend you to use an address that can't be linked to your identity. For example, John Doe probably wouldn't want to use \"",(0,a.kt)("a",{parentName:"p",href:"mailto:johndoe@gmail.com"},"johndoe@gmail.com"),'" if he wanted to remain anoymous.')))}d.isMDXComponent=!0},1344:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/ethical-metrics-setup-1c7291004f39fb5cbc133557eebf35ee.png"},7537:(e,t,i)=>{i.d(t,{Z:()=>n});const n="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAS4AAAAdCAYAAAAU2YH0AAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAZ25vbWUtc2NyZWVuc2hvdO8Dvz4AAAAmdEVYdENyZWF0aW9uIFRpbWUAanVlIDI4IG1hciAyMDI0IDE0OjE3OjE4soT19wAAElNJREFUeJztnH9sU+e5xz/8sB2S4BBXxh2zA+W0OHibkW8TFCKQW7VEKcMURFSSBREtICBUWbOCmnapUsV3KbiiUwoaAQRpQWT8UKpsy2VICdOwuEosflxfXM2kpaYNcelNzfLDS1KOXcL9Iz9wEjt2aNc26/lIR0qe532f8/i8Pt/zPu85PtPu379/HwkJCYkpxPTvOgEJCQmJySIJl4SExJRDEi4JCYkphyRcEhISU46Z33UCEhLfNom5177rFCQmQe+pJeNs0oxLQkJiyhFBuDpx1R+k3tX77WYzCdovnOZ0c3tU29fDh7PWRq3D/w3GDMVLo7WYavu/Kv7UZrLj+c2Pv8T3lQjC1UHzH89ibw9E6NZLh6uZ6x2x2r9hAi7OHDrB1b6EiW1fGy+NNTU0eMQY2op4nXac3snE9+FobMThe8j0/p2Z7Hj+S8Zf4vvKQ5aKLmrKdnPm+lhhi2T/hmm9wJXexZifVE1s+1ZxUFWwlRp3LCInEZXJjue49u3UbFlPxYXBqqG36RUsJfVMfE2dRsqyFP5+fDFVj08b7ZLFsbloEZ7jP+PO0cWc26wkJWb/dNKf1XHubQN3Ti3hzkE99XmzmRvz/hWs3vQYzQd/OtR/ESfXJJAUsz+Umawu0nPnlB7b4yHmx+dx9dQSekO2v29OQDHsV8+m4lU9nuNL6D1uoHnnXFYkRe47uAlsjo+hP6CYN4eq/1yM9/gS7hzVU79pzPEdw5Rc43JdaKF3sZllqoltElOXyY7nuPadLlo7dKQZE4EArVc8qFJT0UTor1AnsKPoCZpfSma+fKx3Gis2PcY7aQM0HG9jW10fc83zeW9NXGz+pCR+83w83dc62La3jfJr91nx/HzeWTY9xv0PoOArmuq85O5to/warPxFChWGaTH6H3yO9DULOJgm4+7Yz58wgzmBXsqtN3j69cEt98/9DF6GZewoWsCLc/op33ODp/fdoWPBjzi5Zc6gOLb52G79mOeGt91tHPl0gO4b/+RSfwz9ZfFYd+rIoYeX9twg92Q/Kc/O5701CiIxgXAFaT/za/Is2WRb8thScZrRS15BWvasITs7m+zsEs52TmTv4MLbr7Albz2W7Gws6wso2V2Pa6RPL9frK9iRZyE728L6gleo9wCdF6jIW0/J6dB1CxcXWnpZbF6GapztP/hgVzr63FpGqi9PNav066gZKeE8VK/Ss6raM/iv6KHRWsCq5Ub0xuWsK67FOWbJyVu3i3XLjej16TxTYKXRG2lWJdKwVc+CBQtYoM+l1hdb/NEhorX3YrdtHfTr9RiXryK3uBY3AD4arVtZ90w6er0efXouNR5w1xTwTLoevV5P+jMFWO2+kVgNZbmsWp6OXr8AvXE5uWW11NmKWfeMEb3eyPLcMhoilr9eGm1bWZWuH8q1OqTsDZ/LxPkPM3qMPadfoWD9g+/Gweax86aQ9s0VWLKzyf7FflzBVvb/Ipvs7DW8bu+j44+/xlLRHOZzTGPpGi07533Jm9V3+HBswRCfxI7Mmbj+1E7JeT/vn2unxP4VS1c+wgpZDP6eLnJf/oi84//g/SvdHDjyOXXdMzAa4oZmNFH2T5D3j7fzxvluzl/p5sCRL2gKyNHPnxGjf5AkwzwOrrrPm9V3uDXuM85A0R/AdaOfyx8Pbh/4hn4NKEtg5eNw8dxn1Lr7uXzlC0qbvyRuQQJGGRAMctndx8Wh7cP4OVjmfcnvjnzBBzH0VzyRzOoff0Xtsc95393P+fNeSlvusdT8CD8LM1oQ5XGIxIVr2VYsIO+9Tv2hd9m9X+DYa2kMXhBkGLdVUZwmB+Qkj6hIOHsnrS4XpO3kjZUa6LzO2XdrKHu9i6oDhQieE+w5dJPU4kp2psro6+giQQMEggQCECDkKF+/wNVegRdCL8Ujth9hGjBBmRO3mI9ZAX6nA4/owekWQasAvxunR43JJAB+HNat7HIYKK08hgE3NVYrxVYtf91rHpkmi2jJKS1EUPporLZRXACn/lKOadwFQYG5vJ5yswJQoFb7cZRFj/+AaPmIOKwFbG1Qk1+6n3JBgb/BRnGdEx/5gBen3Y7fVMnhvQIKv4haC+qMQsoNJagVIu46K2XFZZj++zAWpQ+3wwnmvRzL0SJ6arGVlWE15FNaehhB4aXOVkaZ1UTG4RzUo3IVcZQVUNyoprD8MOVKHw1VVgoKoL6+CIMiXC7R8g8/xpq0tWxb/EuSZX14/3KQfW/vI9VYyVOJYdon7uTYH/rwnimj7ObPOfCqmYQ+O3t2nGXhW2/xgi6RlC3Xxxz3+1w8+iECwPxH2Tx2VBckYEz4iqaPAyPtL7m/pHvlLNLVcGnOxP6Lt0EMhvwkOH4mGtkAt9qCQzOaifc/CpmMFc8lszTYx+/dX8Xuj5+NrSiJWydvcPR2MhvHdItLmEFc8B5J82QktQXpGeUN0NYzHUuakrn2br5ARvp8OXc/8/FhcOz+49mZMxta2jjaFmP/+BkkcY+O/uFjdB/XpyIsU7BIFv4wTCBcMpLTzGSmqQAjuq4WtpxpppU0jEMtEpJ16HTj5rUR7DISU58kzTgYL02AHTvOcObKRl6ji15ZMqlpRgQNDI4gwEoq3185Ksr1pqt0CmtJU4W3KU0ZGMRa7G4wm0ScDjcKJTgdbsgyITrtOBUmKk2Ar5HqBhHL4b3kZygAE5UldpZbG3BiJmMovpBTQr5l8LTNMIi4l9uosZeyP2u89Ci1AoIwZPfVxRR/hGj5+BupqfORUX6K8pwhGfFpoW50GLXJjNkUIjMGM+bhP4VCGuqqcHrAYhrK2ZBBhkkNJgF/YwNlyizyswazM/gaaLA58DBGuPwN1DT4MFfWU2pRDh4bQcTzTBXVjkL2m8Pk4m/AFkP+Y8c4Ucgkc8i3WLeBpgs1uG7CU8Zw7RNRqeS0dnWhWpiKTqWCri465TrWCipUclDETydONh0FIAbv0dMf5T0D8TKSuEdPd0i7niA9zCJlzrTo/tuh8WWsL3iUFd3/YJ197Fk/Memb9PxtVRxwj4vHPub3bbH6p7Eibx4rP/ucp+1BxHnjY2tkA3TIkjhkUxEXCHKp5XNeOtLFB0Eg2M+bR3ws/ZWO/9mTzMX+OFYk9bB9TxdfjImTlDaXfPWX/O5t/wPxi9a/rY8PAknkP6+k7oifW8jQq2cAA8QRnpgfQNVokqG3i2/sAQmdEaPqBFdcHbBxLS8Ir3NoxxaurNzAhhfMGFXjBRGu03S1E2FtZshaxRibNoMswUaj0wsmH3anmvwSA3V1DjyY8NudiBklZCgArxuP34ujwBhy7oiImPH6AWWYFNQmTFoRu8dLiMKGZ7Lxo7X3OHGLAoUZamJHxNNgw1Zjx+nxgVKJKIpow1a7StRqJaLPz3B6SrUahV/EL8KoKaLHjVs0UGgK+RBaEybBj93tYUQpQ4kp/7FjHKD9wkEOnrlKa0cnyBMJBANoApHaA3TQ3h5Ak6YbjNDuoUNjZPhaurroJxxLH1ol+czH0ztvc3mCjIbp+Zp+mMnqzQs5ZLhLqfVzLk5Ot3D9qY2nr8kxpqn5Td5CTvXfGCV+Ef3z1FRk3uP31i5uRYj90blP+Mk5IF7GisxHqdqUwnt9ATKP9yEyDY1agSbYT11zHxjkoJ7N5iVxNJ2/y4Ov0kxyzLPB7eXE7dDoUfr7OnnpaAInNz2G2wwwwN3AdOi/G/GYxv7kvFyOnNGFcaR7h7HdUwwRJvliNlQdI635LGdOHOSVs6dZW1nFdmPi6C7X7VztFFibqZnAZiAjQ0tVox1vhh8HGVTmmPBU1eLwZuF3+DDkZwxqhiiCwkD+sf3kh55LCiXacKIVA6P0YLLxo7UXB9Uj8pJlGNxVFO9qRF1SzuEsAaW/kbLcmsjtFYqh/Qz/DwrCqNzD3DyNJf+x4+k5QcWeFlQvFPNbsw55XxP7y85Gbn9lN+srmukLBmFfHpZ9QDBIkKvssJxAnvkazu65rD0/JFx9AT6Klnd/mNlTkowkgtzqvg9E8wPM5NnNAu+lf0X57k85envyb5MSe+5y+dpdLl/rpXuOgWPPPcIi+/+N5B/JT9oclibMYqltCdaQeMbf/pSUd/5OXktILv1BLp73UvrEbP64JAkjfVxWq3grL4FLR9yUtAzAn30czXuCv+U9yurmT3m/f6hvUhKrDXD5aM/omVjU/vf5yH6LJ5u9pKhl0AerX1qElT4uRRD3h/zJTyLyRAj29QKqGOxh6GzlZqccXeqw4CQiZG7gtcynSC3ZQk29i0JjZqi8cd3eQqduLaN1a7zNZDGjrWukts6P31SCQWnAbCijsbYWv9dATtaQKggmBBrweJUIsc5iPA4cXiUGg3aMQzF4zvv9wEPGj9ZeMKClEYfbT36Myur3ePAoMygtymKwMhSYzHwtcq4GBOpwOP0UDufideL0KBAEAcYst8ea/9jx7L3poSPByPbCTBYDkEoyZyO2x7iNA28kUFbh5edVO8lM7OXC7hKaUit5Y50GuSwZYcd1zo8psyZC/LQPV5+KpY/LwS0C01hqmMUcn5/LPhC7J/YDzDVrOWS+z9E9n3Cg7eu+Au8+4tAJHf4iMNr/kb2NZddC7jCqH+G9Xym5XP0Jb16LnotCHU9KQpBLtwdG4n/k/pKe52Yxfw4wJFwKw2zS6efN/x14qP4EB7h1W2TushReNNyj6Z2ecaXoMA8pXFpSdXDh7AmaNE+R3NuJ3PgURlUkO0CQ9rPvUp9gRpfYRfOJGlwqM2+lyaG9mbOtchYuTIa+m7R2BUnUJSLvvEDFi/vpWltF1YZe7C2d6FaljSoTx9sAkwWzOpeaWiWWwxkoUGC2GLBaa8FUzrBuoc6i0FLFVlsxZWIhFoMSfF586iwsISWQ3+3A4dSCz0mtzYbbUEKlWQG+BorXWfEVnuJUoYDJAA211TRos1D6fCgyosVXolZCY2MDbnM+hmj5qLPIN1exy1pMNUWYlD6cdU7E8atlIygFAa2/gdrqRpRmLQrRi4/wVXBURn3eLIpyqimwFmOjiCyll4YqG04hn3pzhDlV1PzHj2eiVoeqz0796WbkaRoSAu30AYkR2iNXkRzooku1EKOgQUMnXV1yBGMqOk245YcY6O/hQPOPqH9eR1XPF5yPn0OFeSauun8MlnvBKH7i2LlmNly7zX8F4kgffn4qGMQ1skA/AfGzeTlnFh037tIRnM58QzIvp03Dda578K5dNH+PyAehNVcwiMgAPb673OoHZPFszlPCjX7ahvsvm8GH57txAeKn/8TVrWJjwaO46vzckinIz0tC09M5IswPxLqHy2Pqu1j6z52XgHGeHGP6I7y4bBbd9jZeaglz82GIhxQuFSu3befK7hr2vf4XSE5lY/lTGFWR7IO95HTQdKiCm71yNIvNvPrb7RjlEOhqpenEWTwdfQRlySxM+yWv/dIIND3YpcdOS6eOVZm6iW0AmMjJEqitE8jKGDyJtGYLJtwocrJCZhxKzJXH2G+zUVW9izqviEJrIKs0Y0hY1BgyTNjtZRTU+kGpxZRVyqnyQgzjjokaS2k59l1V7MqtRaE1UXTYQtGE8QVySnJoLLNR5bBw2BI9H8vew/jKbNSWFVAlajEJUUovQxF7y71Yq3eRa/ODUo1aMJD1kKXwA5RklB9jv6IMm7WAGr8SwVzE4coiDBETipJ/uPFcvJFXt3Ww/8xuXnk3CLIEkjUCTyZHaA90tLYT0JoHxazXS3unBmOYm0ixc5+Lxz+hNCGF32x+jI3BAJftbWz7893Y/PGzWKSejubHWs6lh4T13eG5lz+LvtaVMJNFTyTz4rNxaOQDdPtELp5ro/Tk3dj8UZlGyrwkNpo1aBIG6O4WuXy+jdKTQ89x9Xezfd9M3tmk5p1XNczhHm1tPWzbO3qdLkU9k7s94vjSO2r/6Vi2LMQ2/x5tbb2cqPbyu5bI61sA076dVzdf52DBK7S+cIyqnz/cE6KegwWUuFZx4MAGdBPYfmj46gpYXm2g/q+lYcT0+09o/opJjufDjr/0doipRbi3Q0yR19p4sF/pRLcyM+QLGs72746Iu7EOj0JAq1Yieu3UVDnQZpVEu7/5PWGi/D3UTmo8f4jjLzHM1BAuj53mDg2ZY8rEcbZ/e/x47XVUNXrw+kUUagFT1l4Ol5omd6fxO2OC/D01kxvPH+T4SwzzLZWKEhLfH6RScWoRrlSUhEtCQmLKMSXfDiEhIfHDRhIuCQmJKYckXBISElMOSbgkJCSmHJJwSUhITDn+H8jAhSjsBOBaAAAAAElFTkSuQmCC"}}]); \ No newline at end of file diff --git a/assets/js/59a51c52.f26ffb8c.js b/assets/js/59a51c52.f26ffb8c.js new file mode 100644 index 000000000..382525dc5 --- /dev/null +++ b/assets/js/59a51c52.f26ffb8c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4980],{9837:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>r,toc:()=>l});var n=t(5893),o=t(1151);const s={},a="Setting up Ethical Metrics",r={id:"user/ethical-metrics/setup",title:"Setting up Ethical Metrics",description:"We highly recommend utilizing the Telegram channel option in addition to or instead of relying solely on email notifications.",source:"@site/docs/user/ethical-metrics/setup.md",sourceDirName:"user/ethical-metrics",slug:"/user/ethical-metrics/setup",permalink:"/docs/user/ethical-metrics/setup",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/ethical-metrics/setup.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Ethical Metrics",permalink:"/docs/user/ethical-metrics/overview"},next:{title:"Metrics Collected by Ethical Metrics",permalink:"/docs/user/ethical-metrics/metrics"}},c={},l=[{value:"Telegram Notifications",id:"telegram-notifications",level:2},{value:"Email Notifications",id:"email-notifications",level:2}];function d(e){const i={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.h1,{id:"setting-up-ethical-metrics",children:"Setting up Ethical Metrics"}),"\n",(0,n.jsx)(i.admonition,{type:"tip",children:(0,n.jsx)(i.p,{children:"We highly recommend utilizing the Telegram channel option in addition to or instead of relying solely on email notifications."})}),"\n",(0,n.jsx)(i.p,{children:"Email notifications may sometimes encounter hurdles such as being categorized as spam or getting lost in a cluttered inbox. This could inadvertently lead to missing out on important notifications that require your immediate attention."}),"\n",(0,n.jsx)(i.p,{children:"In contrast, Telegram channels provide a streamlined and efficient way to receive notifications directly to your device, ensuring that you stay informed without any interruptions."}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"setup-6",src:t(1344).Z+"",width:"1685",height:"674"})}),"\n",(0,n.jsx)(i.p,{children:"In order to setup your Ethical Metrics notification system, you need to follow these steps:"}),"\n",(0,n.jsx)(i.h2,{id:"telegram-notifications",children:"Telegram Notifications"}),"\n",(0,n.jsxs)(i.ol,{children:["\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsxs)(i.p,{children:["Access Telegram Web:\nOpen Telegram Web using ",(0,n.jsx)(i.a,{href:"https://web.telegram.org/a/",children:"this link"})," and login with your account. Ensure the URL ends with ",(0,n.jsx)(i.code,{children:"/a/"}),". If not, manually add ",(0,n.jsx)(i.code,{children:"/a/"})," after ",(0,n.jsx)(i.code,{children:"https://web.telegram.org/"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsx)(i.p,{children:"Create a Private Channel."}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsxs)(i.p,{children:["Add the DappNode bot (",(0,n.jsx)(i.code,{children:"@ethicalMetricsAlerts_bot"}),") to your channel as an administrator."]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsxs)(i.p,{children:["Find Your Channel ID:\nCopy the channel ID from the URL.\nIt's a 13-digit number following the ",(0,n.jsx)(i.code,{children:"-"})," in the URL. The ID always starts with ",(0,n.jsx)(i.code,{children:"-100"}),". Ensure to include the ",(0,n.jsx)(i.code,{children:"-"})," when copying."]}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"telegram-channel-id",src:t(7537).Z+"",width:"302",height:"29"})}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsxs)(i.p,{children:["Navigate to ",(0,n.jsx)(i.a,{href:"http://my.dappnode/system/notifications",children:"http://my.dappnode/system/notifications"})]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsxs)(i.p,{children:["Enable Notifications:\nPaste the channel ID into the Telegram Channel ID field and toggle the switch ",(0,n.jsx)(i.code,{children:"ON"})," to start receiving notifications."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"email-notifications",children:"Email Notifications"}),"\n",(0,n.jsxs)(i.ol,{children:["\n",(0,n.jsxs)(i.li,{children:["Navigate to ",(0,n.jsx)(i.a,{href:"http://my.dappnode/system/notifications",children:"http://my.dappnode/system/notifications"})]}),"\n",(0,n.jsx)(i.li,{children:"Introduce the email address where you want to receive the notifications and click on the switch to activate the notifications."}),"\n",(0,n.jsx)(i.li,{children:"Thats it! Your Ethical Metrics will automatically register your TOR instance with the email address you provided. This will happen through the TOR network, preserving your privacy. You should receive a welcome email in the following minutes."}),"\n"]}),"\n",(0,n.jsx)(i.admonition,{type:"caution",children:(0,n.jsxs)(i.p,{children:["To send email notifications, it is necessary that you provide an email address. In order to remain private, we recommend you to use an address that can't be linked to your identity. For example, John Doe probably wouldn't want to use \"",(0,n.jsx)(i.a,{href:"mailto:johndoe@gmail.com",children:"johndoe@gmail.com"}),'" if he wanted to remain anoymous.']})})]})}function h(e={}){const{wrapper:i}={...(0,o.a)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},1344:(e,i,t)=>{t.d(i,{Z:()=>n});const n=t.p+"assets/images/ethical-metrics-setup-1c7291004f39fb5cbc133557eebf35ee.png"},7537:(e,i,t)=>{t.d(i,{Z:()=>n});const n="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAS4AAAAdCAYAAAAU2YH0AAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAZ25vbWUtc2NyZWVuc2hvdO8Dvz4AAAAmdEVYdENyZWF0aW9uIFRpbWUAanVlIDI4IG1hciAyMDI0IDE0OjE3OjE4soT19wAAElNJREFUeJztnH9sU+e5xz/8sB2S4BBXxh2zA+W0OHibkW8TFCKQW7VEKcMURFSSBREtICBUWbOCmnapUsV3KbiiUwoaAQRpQWT8UKpsy2VICdOwuEosflxfXM2kpaYNcelNzfLDS1KOXcL9Iz9wEjt2aNc26/lIR0qe532f8/i8Pt/zPu85PtPu379/HwkJCYkpxPTvOgEJCQmJySIJl4SExJRDEi4JCYkphyRcEhISU46Z33UCEhLfNom5177rFCQmQe+pJeNs0oxLQkJiyhFBuDpx1R+k3tX77WYzCdovnOZ0c3tU29fDh7PWRq3D/w3GDMVLo7WYavu/Kv7UZrLj+c2Pv8T3lQjC1UHzH89ibw9E6NZLh6uZ6x2x2r9hAi7OHDrB1b6EiW1fGy+NNTU0eMQY2op4nXac3snE9+FobMThe8j0/p2Z7Hj+S8Zf4vvKQ5aKLmrKdnPm+lhhi2T/hmm9wJXexZifVE1s+1ZxUFWwlRp3LCInEZXJjue49u3UbFlPxYXBqqG36RUsJfVMfE2dRsqyFP5+fDFVj08b7ZLFsbloEZ7jP+PO0cWc26wkJWb/dNKf1XHubQN3Ti3hzkE99XmzmRvz/hWs3vQYzQd/OtR/ESfXJJAUsz+Umawu0nPnlB7b4yHmx+dx9dQSekO2v29OQDHsV8+m4lU9nuNL6D1uoHnnXFYkRe47uAlsjo+hP6CYN4eq/1yM9/gS7hzVU79pzPEdw5Rc43JdaKF3sZllqoltElOXyY7nuPadLlo7dKQZE4EArVc8qFJT0UTor1AnsKPoCZpfSma+fKx3Gis2PcY7aQM0HG9jW10fc83zeW9NXGz+pCR+83w83dc62La3jfJr91nx/HzeWTY9xv0PoOArmuq85O5to/warPxFChWGaTH6H3yO9DULOJgm4+7Yz58wgzmBXsqtN3j69cEt98/9DF6GZewoWsCLc/op33ODp/fdoWPBjzi5Zc6gOLb52G79mOeGt91tHPl0gO4b/+RSfwz9ZfFYd+rIoYeX9twg92Q/Kc/O5701CiIxgXAFaT/za/Is2WRb8thScZrRS15BWvasITs7m+zsEs52TmTv4MLbr7Albz2W7Gws6wso2V2Pa6RPL9frK9iRZyE728L6gleo9wCdF6jIW0/J6dB1CxcXWnpZbF6GapztP/hgVzr63FpGqi9PNav066gZKeE8VK/Ss6raM/iv6KHRWsCq5Ub0xuWsK67FOWbJyVu3i3XLjej16TxTYKXRG2lWJdKwVc+CBQtYoM+l1hdb/NEhorX3YrdtHfTr9RiXryK3uBY3AD4arVtZ90w6er0efXouNR5w1xTwTLoevV5P+jMFWO2+kVgNZbmsWp6OXr8AvXE5uWW11NmKWfeMEb3eyPLcMhoilr9eGm1bWZWuH8q1OqTsDZ/LxPkPM3qMPadfoWD9g+/Gweax86aQ9s0VWLKzyf7FflzBVvb/Ipvs7DW8bu+j44+/xlLRHOZzTGPpGi07533Jm9V3+HBswRCfxI7Mmbj+1E7JeT/vn2unxP4VS1c+wgpZDP6eLnJf/oi84//g/SvdHDjyOXXdMzAa4oZmNFH2T5D3j7fzxvluzl/p5sCRL2gKyNHPnxGjf5AkwzwOrrrPm9V3uDXuM85A0R/AdaOfyx8Pbh/4hn4NKEtg5eNw8dxn1Lr7uXzlC0qbvyRuQQJGGRAMctndx8Wh7cP4OVjmfcnvjnzBBzH0VzyRzOoff0Xtsc95393P+fNeSlvusdT8CD8LM1oQ5XGIxIVr2VYsIO+9Tv2hd9m9X+DYa2kMXhBkGLdVUZwmB+Qkj6hIOHsnrS4XpO3kjZUa6LzO2XdrKHu9i6oDhQieE+w5dJPU4kp2psro6+giQQMEggQCECDkKF+/wNVegRdCL8Ujth9hGjBBmRO3mI9ZAX6nA4/owekWQasAvxunR43JJAB+HNat7HIYKK08hgE3NVYrxVYtf91rHpkmi2jJKS1EUPporLZRXACn/lKOadwFQYG5vJ5yswJQoFb7cZRFj/+AaPmIOKwFbG1Qk1+6n3JBgb/BRnGdEx/5gBen3Y7fVMnhvQIKv4haC+qMQsoNJagVIu46K2XFZZj++zAWpQ+3wwnmvRzL0SJ6arGVlWE15FNaehhB4aXOVkaZ1UTG4RzUo3IVcZQVUNyoprD8MOVKHw1VVgoKoL6+CIMiXC7R8g8/xpq0tWxb/EuSZX14/3KQfW/vI9VYyVOJYdon7uTYH/rwnimj7ObPOfCqmYQ+O3t2nGXhW2/xgi6RlC3Xxxz3+1w8+iECwPxH2Tx2VBckYEz4iqaPAyPtL7m/pHvlLNLVcGnOxP6Lt0EMhvwkOH4mGtkAt9qCQzOaifc/CpmMFc8lszTYx+/dX8Xuj5+NrSiJWydvcPR2MhvHdItLmEFc8B5J82QktQXpGeUN0NYzHUuakrn2br5ARvp8OXc/8/FhcOz+49mZMxta2jjaFmP/+BkkcY+O/uFjdB/XpyIsU7BIFv4wTCBcMpLTzGSmqQAjuq4WtpxpppU0jEMtEpJ16HTj5rUR7DISU58kzTgYL02AHTvOcObKRl6ji15ZMqlpRgQNDI4gwEoq3185Ksr1pqt0CmtJU4W3KU0ZGMRa7G4wm0ScDjcKJTgdbsgyITrtOBUmKk2Ar5HqBhHL4b3kZygAE5UldpZbG3BiJmMovpBTQr5l8LTNMIi4l9uosZeyP2u89Ci1AoIwZPfVxRR/hGj5+BupqfORUX6K8pwhGfFpoW50GLXJjNkUIjMGM+bhP4VCGuqqcHrAYhrK2ZBBhkkNJgF/YwNlyizyswazM/gaaLA58DBGuPwN1DT4MFfWU2pRDh4bQcTzTBXVjkL2m8Pk4m/AFkP+Y8c4Ucgkc8i3WLeBpgs1uG7CU8Zw7RNRqeS0dnWhWpiKTqWCri465TrWCipUclDETydONh0FIAbv0dMf5T0D8TKSuEdPd0i7niA9zCJlzrTo/tuh8WWsL3iUFd3/YJ197Fk/Memb9PxtVRxwj4vHPub3bbH6p7Eibx4rP/ucp+1BxHnjY2tkA3TIkjhkUxEXCHKp5XNeOtLFB0Eg2M+bR3ws/ZWO/9mTzMX+OFYk9bB9TxdfjImTlDaXfPWX/O5t/wPxi9a/rY8PAknkP6+k7oifW8jQq2cAA8QRnpgfQNVokqG3i2/sAQmdEaPqBFdcHbBxLS8Ir3NoxxaurNzAhhfMGFXjBRGu03S1E2FtZshaxRibNoMswUaj0wsmH3anmvwSA3V1DjyY8NudiBklZCgArxuP34ujwBhy7oiImPH6AWWYFNQmTFoRu8dLiMKGZ7Lxo7X3OHGLAoUZamJHxNNgw1Zjx+nxgVKJKIpow1a7StRqJaLPz3B6SrUahV/EL8KoKaLHjVs0UGgK+RBaEybBj93tYUQpQ4kp/7FjHKD9wkEOnrlKa0cnyBMJBANoApHaA3TQ3h5Ak6YbjNDuoUNjZPhaurroJxxLH1ol+czH0ztvc3mCjIbp+Zp+mMnqzQs5ZLhLqfVzLk5Ot3D9qY2nr8kxpqn5Td5CTvXfGCV+Ef3z1FRk3uP31i5uRYj90blP+Mk5IF7GisxHqdqUwnt9ATKP9yEyDY1agSbYT11zHxjkoJ7N5iVxNJ2/y4Ov0kxyzLPB7eXE7dDoUfr7OnnpaAInNz2G2wwwwN3AdOi/G/GYxv7kvFyOnNGFcaR7h7HdUwwRJvliNlQdI635LGdOHOSVs6dZW1nFdmPi6C7X7VztFFibqZnAZiAjQ0tVox1vhh8HGVTmmPBU1eLwZuF3+DDkZwxqhiiCwkD+sf3kh55LCiXacKIVA6P0YLLxo7UXB9Uj8pJlGNxVFO9qRF1SzuEsAaW/kbLcmsjtFYqh/Qz/DwrCqNzD3DyNJf+x4+k5QcWeFlQvFPNbsw55XxP7y85Gbn9lN+srmukLBmFfHpZ9QDBIkKvssJxAnvkazu65rD0/JFx9AT6Klnd/mNlTkowkgtzqvg9E8wPM5NnNAu+lf0X57k85envyb5MSe+5y+dpdLl/rpXuOgWPPPcIi+/+N5B/JT9oclibMYqltCdaQeMbf/pSUd/5OXktILv1BLp73UvrEbP64JAkjfVxWq3grL4FLR9yUtAzAn30czXuCv+U9yurmT3m/f6hvUhKrDXD5aM/omVjU/vf5yH6LJ5u9pKhl0AerX1qElT4uRRD3h/zJTyLyRAj29QKqGOxh6GzlZqccXeqw4CQiZG7gtcynSC3ZQk29i0JjZqi8cd3eQqduLaN1a7zNZDGjrWukts6P31SCQWnAbCijsbYWv9dATtaQKggmBBrweJUIsc5iPA4cXiUGg3aMQzF4zvv9wEPGj9ZeMKClEYfbT36Myur3ePAoMygtymKwMhSYzHwtcq4GBOpwOP0UDufideL0KBAEAcYst8ea/9jx7L3poSPByPbCTBYDkEoyZyO2x7iNA28kUFbh5edVO8lM7OXC7hKaUit5Y50GuSwZYcd1zo8psyZC/LQPV5+KpY/LwS0C01hqmMUcn5/LPhC7J/YDzDVrOWS+z9E9n3Cg7eu+Au8+4tAJHf4iMNr/kb2NZddC7jCqH+G9Xym5XP0Jb16LnotCHU9KQpBLtwdG4n/k/pKe52Yxfw4wJFwKw2zS6efN/x14qP4EB7h1W2TushReNNyj6Z2ecaXoMA8pXFpSdXDh7AmaNE+R3NuJ3PgURlUkO0CQ9rPvUp9gRpfYRfOJGlwqM2+lyaG9mbOtchYuTIa+m7R2BUnUJSLvvEDFi/vpWltF1YZe7C2d6FaljSoTx9sAkwWzOpeaWiWWwxkoUGC2GLBaa8FUzrBuoc6i0FLFVlsxZWIhFoMSfF586iwsISWQ3+3A4dSCz0mtzYbbUEKlWQG+BorXWfEVnuJUoYDJAA211TRos1D6fCgyosVXolZCY2MDbnM+hmj5qLPIN1exy1pMNUWYlD6cdU7E8atlIygFAa2/gdrqRpRmLQrRi4/wVXBURn3eLIpyqimwFmOjiCyll4YqG04hn3pzhDlV1PzHj2eiVoeqz0796WbkaRoSAu30AYkR2iNXkRzooku1EKOgQUMnXV1yBGMqOk245YcY6O/hQPOPqH9eR1XPF5yPn0OFeSauun8MlnvBKH7i2LlmNly7zX8F4kgffn4qGMQ1skA/AfGzeTlnFh037tIRnM58QzIvp03Dda578K5dNH+PyAehNVcwiMgAPb673OoHZPFszlPCjX7ahvsvm8GH57txAeKn/8TVrWJjwaO46vzckinIz0tC09M5IswPxLqHy2Pqu1j6z52XgHGeHGP6I7y4bBbd9jZeaglz82GIhxQuFSu3befK7hr2vf4XSE5lY/lTGFWR7IO95HTQdKiCm71yNIvNvPrb7RjlEOhqpenEWTwdfQRlySxM+yWv/dIIND3YpcdOS6eOVZm6iW0AmMjJEqitE8jKGDyJtGYLJtwocrJCZhxKzJXH2G+zUVW9izqviEJrIKs0Y0hY1BgyTNjtZRTU+kGpxZRVyqnyQgzjjokaS2k59l1V7MqtRaE1UXTYQtGE8QVySnJoLLNR5bBw2BI9H8vew/jKbNSWFVAlajEJUUovQxF7y71Yq3eRa/ODUo1aMJD1kKXwA5RklB9jv6IMm7WAGr8SwVzE4coiDBETipJ/uPFcvJFXt3Ww/8xuXnk3CLIEkjUCTyZHaA90tLYT0JoHxazXS3unBmOYm0ixc5+Lxz+hNCGF32x+jI3BAJftbWz7893Y/PGzWKSejubHWs6lh4T13eG5lz+LvtaVMJNFTyTz4rNxaOQDdPtELp5ro/Tk3dj8UZlGyrwkNpo1aBIG6O4WuXy+jdKTQ89x9Xezfd9M3tmk5p1XNczhHm1tPWzbO3qdLkU9k7s94vjSO2r/6Vi2LMQ2/x5tbb2cqPbyu5bI61sA076dVzdf52DBK7S+cIyqnz/cE6KegwWUuFZx4MAGdBPYfmj46gpYXm2g/q+lYcT0+09o/opJjufDjr/0doipRbi3Q0yR19p4sF/pRLcyM+QLGs72746Iu7EOj0JAq1Yieu3UVDnQZpVEu7/5PWGi/D3UTmo8f4jjLzHM1BAuj53mDg2ZY8rEcbZ/e/x47XVUNXrw+kUUagFT1l4Ol5omd6fxO2OC/D01kxvPH+T4SwzzLZWKEhLfH6RScWoRrlSUhEtCQmLKMSXfDiEhIfHDRhIuCQmJKYckXBISElMOSbgkJCSmHJJwSUhITDn+H8jAhSjsBOBaAAAAAElFTkSuQmCC"},1151:(e,i,t)=>{t.d(i,{Z:()=>r,a:()=>a});var n=t(7294);const o={},s=n.createContext(o);function a(e){const i=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function r(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),n.createElement(s.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5b35db5e.42cb4405.js b/assets/js/5b35db5e.42cb4405.js deleted file mode 100644 index 0d4154dae..000000000 --- a/assets/js/5b35db5e.42cb4405.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7775],{4137:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>k});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 i(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 p(e){for(var t=1;t =0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var r=a.createContext({}),d=function(e){var t=a.useContext(r),n=t;return e&&(n="function"==typeof e?e(t):p(p({},t),e)),n},c=function(e){var t=d(e.components);return a.createElement(r.Provider,{value:t},e.children)},s="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,r=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),s=d(n),m=o,k=s["".concat(r,".").concat(m)]||s[m]||u[m]||i;return n?a.createElement(k,p(p({ref:t},c),{},{components:n})):a.createElement(k,p({ref:t},c))}));function k(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,p=new Array(i);p[0]=m;var l={};for(var r in t)hasOwnProperty.call(t,r)&&(l[r]=t[r]);l.originalType=e,l[s]="string"==typeof e?e:o,p[1]=l;for(var d=2;d{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>p,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>d});var a=n(7462),o=(n(7294),n(4137));const i={},p="OpenVPN Access to Dappnode",l={unversionedId:"user/access-your-dappnode/vpn/openvpn",id:"user/access-your-dappnode/vpn/openvpn",title:"OpenVPN Access to Dappnode",description:"OpenVPN is a widely-accepted VPN protocol known for its reliability and high-security standards. Here's how you can set it up with Dappnode.",source:"@site/docs/user/access-your-dappnode/vpn/openvpn.md",sourceDirName:"user/access-your-dappnode/vpn",slug:"/user/access-your-dappnode/vpn/openvpn",permalink:"/docs/user/access-your-dappnode/vpn/openvpn",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/access-your-dappnode/vpn/openvpn.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"WireGuard Access to Dappnode",permalink:"/docs/user/access-your-dappnode/vpn/wireguard"},next:{title:"Terminal Access to Dappnode",permalink:"/docs/user/access-your-dappnode/terminal"}},r={},d=[{value:"Setting Up OpenVPN",id:"setting-up-openvpn",level:2},{value:"1. Get VPN Credentials URL",id:"1-get-vpn-credentials-url",level:3},{value:"Option 1: Via Dappmanager UI",id:"option-1-via-dappmanager-ui",level:4},{value:"Option 2: Via Dappnode Terminal",id:"option-2-via-dappnode-terminal",level:4},{value:"2. Download OpenVPN Credentials",id:"2-download-openvpn-credentials",level:3},{value:"3. OpenVPN Installation",id:"3-openvpn-installation",level:2},{value:"4. Connecting to Dappnode via OpenVPN",id:"4-connecting-to-dappnode-via-openvpn",level:2}],c={toc:d},s="wrapper";function u(e){let{components:t,...n}=e;return(0,o.kt)(s,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"openvpn-access-to-dappnode"},"OpenVPN Access to Dappnode"),(0,o.kt)("p",null,"OpenVPN is a widely-accepted VPN protocol known for its reliability and high-security standards. Here's how you can set it up with Dappnode."),(0,o.kt)("h2",{id:"setting-up-openvpn"},"Setting Up OpenVPN"),(0,o.kt)("h3",{id:"1-get-vpn-credentials-url"},"1. Get VPN Credentials URL"),(0,o.kt)("p",null,"There are two primary methods to obtain your VPN credentials, based on your access level to the Dappmanager:"),(0,o.kt)("h4",{id:"option-1-via-dappmanager-ui"},(0,o.kt)("em",{parentName:"h4"},"Option 1"),": Via Dappmanager UI"),(0,o.kt)("p",null,"If you have access to the Dappmanager:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Navigate to ",(0,o.kt)("strong",{parentName:"p"},"VPN > OpenVPN"),"."),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"If you don't see any device added to the list:")),(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},"Provide a name for your device."),(0,o.kt)("li",{parentName:"ol"},"Click on 'Add New Device'."))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"To retrieve the credentials:")),(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},"Click on the 'Get Link' button."),(0,o.kt)("li",{parentName:"ol"},"Copy the URL displayed.")))))),(0,o.kt)("admonition",{title:"Separate Credentials for Each Device",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"For the best experience and to enable simultaneous access, it's recommended to create a separate device entry in the Dappnode VPN list for each device you intend to use for accessing your Dappnode. "),(0,o.kt)("p",{parentName:"admonition"},"While it's technically possible to use the same credentials on multiple devices, doing so can lead to connectivity issues when trying to access the Dappnode from multiple devices at the same time."),(0,o.kt)("p",{parentName:"admonition"},"By setting up distinct credentials for each device, you ensure a smooth, uninterrupted connection for all your devices.")),(0,o.kt)("h4",{id:"option-2-via-dappnode-terminal"},(0,o.kt)("em",{parentName:"h4"},"Option 2"),": Via Dappnode Terminal"),(0,o.kt)("p",null,"If you can't access the Dappmanager, you'll need to get the credentials via the Dappnode terminal:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Access the Dappnode terminal, as explained ",(0,o.kt)("a",{parentName:"p",href:"/docs/user/access-your-dappnode/terminal"},"here"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Execute the command: ",(0,o.kt)("inlineCode",{parentName:"p"},"dappnode_openvpn"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"A URL will be displayed on the terminal. Copy it."))),(0,o.kt)("h3",{id:"2-download-openvpn-credentials"},"2. Download OpenVPN Credentials"),(0,o.kt)("p",null,"With the URL you obtained in the previous step, you'll now download the OpenVPN credentials:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Open a web browser on any device."),(0,o.kt)("li",{parentName:"ol"},"Paste the URL you copied into the address bar and navigate to it."),(0,o.kt)("li",{parentName:"ol"},"You should be taken to a page where the OpenVPN credentials for your Dappnode can be downloaded. Click on the download button or link to download the ",(0,o.kt)("inlineCode",{parentName:"li"},".ovpn")," file, which contains your OpenVPN configuration and credentials.")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Ensure that you ",(0,o.kt)("strong",{parentName:"p"},"store credentials securely"),". The ",(0,o.kt)("inlineCode",{parentName:"p"},".ovpn")," file provides direct access to your Dappnode, so treat it with the same caution you'd treat a password.")),(0,o.kt)("h2",{id:"3-openvpn-installation"},"3. OpenVPN Installation"),(0,o.kt)("p",null,"Once you've obtained your OpenVPN credentials, the next step is to install an OpenVPN client. You can download the one that's compatible with the device you are going to use to connect to the Dappnode machine from the ",(0,o.kt)("a",{parentName:"p",href:"https://openvpn.net/client/"},"OpenVPN website"),"."),(0,o.kt)("h2",{id:"4-connecting-to-dappnode-via-openvpn"},"4. Connecting to Dappnode via OpenVPN"),(0,o.kt)("p",null,"Once you have installed the OpenVPN client on your device, follow the steps below based on your operating system to connect to Dappnode:"),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("b",null,"Android")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Launch the OpenVPN for Android app."),(0,o.kt)("li",{parentName:"ol"},'Tap on "Import file".'),(0,o.kt)("li",{parentName:"ol"},"Upload the ",(0,o.kt)("inlineCode",{parentName:"li"},".ovpn")," file you downloaded earlier."),(0,o.kt)("li",{parentName:"ol"},'Click on "Connect".'),(0,o.kt)("li",{parentName:"ol"},"Allow the app to create a VPN connection.")),(0,o.kt)("p",{align:"center"},(0,o.kt)("img",{src:"/img/openvpn_android.jpg",alt:"Import file in Android",style:{width:"20em"}}))),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("b",null,"iPhone/iPad")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Go to the URL you obtained in the previous step."),(0,o.kt)("li",{parentName:"ol"},"Download the ",(0,o.kt)("inlineCode",{parentName:"li"},".ovpn")," file."),(0,o.kt)("li",{parentName:"ol"},'Click on "Open in OpenVPN".'),(0,o.kt)("li",{parentName:"ol"},'Click on "Add".'),(0,o.kt)("li",{parentName:"ol"},'Click on "Connect"'),(0,o.kt)("li",{parentName:"ol"},"Allow the app to create a VPN connection.")),(0,o.kt)("p",{align:"center"},(0,o.kt)("img",{src:"/img/openvpn_iphone_import.jpg",alt:"Import file in iPhone",style:{width:"10em"}}))),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("b",null,"macOS")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Launch Tunnelblick app for macOS."),(0,o.kt)("li",{parentName:"ol"},'Click on "VPN Details" in the top bar menu.'),(0,o.kt)("li",{parentName:"ol"},"Drag and drop the ",(0,o.kt)("inlineCode",{parentName:"li"},".ovpn")," file you downloaded earlier in the left side bar."),(0,o.kt)("li",{parentName:"ol"},"Click on Connect.")),(0,o.kt)("p",{align:"center"},(0,o.kt)("img",{src:"/img/openvpn_mac.png",alt:"Import file in macOS",style:{width:"20em"}}))),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("b",null,"Windows")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Launch the OpenVPN for Windows app."),(0,o.kt)("li",{parentName:"ol"},'Click on "Import file".'),(0,o.kt)("li",{parentName:"ol"},"Upload the ",(0,o.kt)("inlineCode",{parentName:"li"},".ovpn")," file you downloaded earlier."),(0,o.kt)("li",{parentName:"ol"},"Allow the app to create a VPN connection.")),(0,o.kt)("p",{align:"center"},(0,o.kt)("img",{src:"/img/openvpn_windows.jpg",alt:"Import file in Windows",style:{width:"20em"}}))),(0,o.kt)("details",null,(0,o.kt)("summary",null," ",(0,o.kt)("b",null,"Recent Ubuntu")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Open Settings>Network."),(0,o.kt)("li",{parentName:"ol"},'Click on the "+" button to add a new VPN connection.'),(0,o.kt)("li",{parentName:"ol"},'Select "Import from file".'),(0,o.kt)("li",{parentName:"ol"},"Upload the ",(0,o.kt)("inlineCode",{parentName:"li"},".ovpn")," file you downloaded earlier."),(0,o.kt)("li",{parentName:"ol"},'Click on "Add".'),(0,o.kt)("li",{parentName:"ol"},"Toggle the switch button to connect.")),(0,o.kt)("p",{align:"center"},(0,o.kt)("img",{src:"/img/openvpn_ubuntu_network.png",alt:"Import file in Ubuntu",style:{width:"40em"}})),(0,o.kt)("p",{align:"center"},(0,o.kt)("img",{src:"/img/openvpn_ubuntu_import.png",alt:"Import file in Ubuntu",style:{width:"40em"}}))),(0,o.kt)("details",null,(0,o.kt)("summary",null," ",(0,o.kt)("b",null,"Other Linux")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Open the terminal."),(0,o.kt)("li",{parentName:"ol"},"Navigate to the directory where you have stored your ",(0,o.kt)("inlineCode",{parentName:"li"},".ovpn")," file."),(0,o.kt)("li",{parentName:"ol"},"Execute the command: ",(0,o.kt)("inlineCode",{parentName:"li"},"sudo openvpn Dappnode_VPN.ovpn"),"."))),(0,o.kt)("br",null),(0,o.kt)("admonition",{title:"Testing Your Connection",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Once connected, you can directly type ",(0,o.kt)("a",{parentName:"p",href:"http://my.dappnode"},"http://my.dappnode")," in your browser to access the Dappmanager.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5b35db5e.ed76c31a.js b/assets/js/5b35db5e.ed76c31a.js new file mode 100644 index 000000000..62664419c --- /dev/null +++ b/assets/js/5b35db5e.ed76c31a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7775],{2292:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>r,contentTitle:()=>l,default:()=>p,frontMatter:()=>s,metadata:()=>d,toc:()=>c});var o=i(5893),t=i(1151);const s={},l="OpenVPN Access to Dappnode",d={id:"user/access-your-dappnode/vpn/openvpn",title:"OpenVPN Access to Dappnode",description:"OpenVPN is a widely-accepted VPN protocol known for its reliability and high-security standards. Here's how you can set it up with Dappnode.",source:"@site/docs/user/access-your-dappnode/vpn/openvpn.md",sourceDirName:"user/access-your-dappnode/vpn",slug:"/user/access-your-dappnode/vpn/openvpn",permalink:"/docs/user/access-your-dappnode/vpn/openvpn",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/access-your-dappnode/vpn/openvpn.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"WireGuard Access to Dappnode",permalink:"/docs/user/access-your-dappnode/vpn/wireguard"},next:{title:"Terminal Access to Dappnode",permalink:"/docs/user/access-your-dappnode/terminal"}},r={},c=[{value:"Setting Up OpenVPN",id:"setting-up-openvpn",level:2},{value:"1. Get VPN Credentials URL",id:"1-get-vpn-credentials-url",level:3},{value:"Option 1: Via Dappmanager UI",id:"option-1-via-dappmanager-ui",level:4},{value:"Option 2: Via Dappnode Terminal",id:"option-2-via-dappnode-terminal",level:4},{value:"2. Download OpenVPN Credentials",id:"2-download-openvpn-credentials",level:3},{value:"3. OpenVPN Installation",id:"3-openvpn-installation",level:2},{value:"4. Connecting to Dappnode via OpenVPN",id:"4-connecting-to-dappnode-via-openvpn",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.a)(),...e.components},{Details:i}=n;return i||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"openvpn-access-to-dappnode",children:"OpenVPN Access to Dappnode"}),"\n",(0,o.jsx)(n.p,{children:"OpenVPN is a widely-accepted VPN protocol known for its reliability and high-security standards. Here's how you can set it up with Dappnode."}),"\n",(0,o.jsx)(n.h2,{id:"setting-up-openvpn",children:"Setting Up OpenVPN"}),"\n",(0,o.jsx)(n.h3,{id:"1-get-vpn-credentials-url",children:"1. Get VPN Credentials URL"}),"\n",(0,o.jsx)(n.p,{children:"There are two primary methods to obtain your VPN credentials, based on your access level to the Dappmanager:"}),"\n",(0,o.jsxs)(n.h4,{id:"option-1-via-dappmanager-ui",children:[(0,o.jsx)(n.em,{children:"Option 1"}),": Via Dappmanager UI"]}),"\n",(0,o.jsx)(n.p,{children:"If you have access to the Dappmanager:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Navigate to ",(0,o.jsx)(n.strong,{children:"VPN > OpenVPN"}),"."]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"If you don't see any device added to the list:"})}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Provide a name for your device."}),"\n",(0,o.jsx)(n.li,{children:"Click on 'Add New Device'."}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"To retrieve the credentials:"})}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Click on the 'Get Link' button."}),"\n",(0,o.jsx)(n.li,{children:"Copy the URL displayed."}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.admonition,{title:"Separate Credentials for Each Device",type:"tip",children:[(0,o.jsx)(n.p,{children:"For the best experience and to enable simultaneous access, it's recommended to create a separate device entry in the Dappnode VPN list for each device you intend to use for accessing your Dappnode."}),(0,o.jsx)(n.p,{children:"While it's technically possible to use the same credentials on multiple devices, doing so can lead to connectivity issues when trying to access the Dappnode from multiple devices at the same time."}),(0,o.jsx)(n.p,{children:"By setting up distinct credentials for each device, you ensure a smooth, uninterrupted connection for all your devices."})]}),"\n",(0,o.jsxs)(n.h4,{id:"option-2-via-dappnode-terminal",children:[(0,o.jsx)(n.em,{children:"Option 2"}),": Via Dappnode Terminal"]}),"\n",(0,o.jsx)(n.p,{children:"If you can't access the Dappmanager, you'll need to get the credentials via the Dappnode terminal:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Access the Dappnode terminal, as explained ",(0,o.jsx)(n.a,{href:"/docs/user/access-your-dappnode/terminal",children:"here"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Execute the command: ",(0,o.jsx)(n.code,{children:"dappnode_openvpn"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"A URL will be displayed on the terminal. Copy it."}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"2-download-openvpn-credentials",children:"2. Download OpenVPN Credentials"}),"\n",(0,o.jsx)(n.p,{children:"With the URL you obtained in the previous step, you'll now download the OpenVPN credentials:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Open a web browser on any device."}),"\n",(0,o.jsx)(n.li,{children:"Paste the URL you copied into the address bar and navigate to it."}),"\n",(0,o.jsxs)(n.li,{children:["You should be taken to a page where the OpenVPN credentials for your Dappnode can be downloaded. Click on the download button or link to download the ",(0,o.jsx)(n.code,{children:".ovpn"})," file, which contains your OpenVPN configuration and credentials."]}),"\n"]}),"\n",(0,o.jsx)(n.admonition,{type:"caution",children:(0,o.jsxs)(n.p,{children:["Ensure that you ",(0,o.jsx)(n.strong,{children:"store credentials securely"}),". The ",(0,o.jsx)(n.code,{children:".ovpn"})," file provides direct access to your Dappnode, so treat it with the same caution you'd treat a password."]})}),"\n",(0,o.jsx)(n.h2,{id:"3-openvpn-installation",children:"3. OpenVPN Installation"}),"\n",(0,o.jsxs)(n.p,{children:["Once you've obtained your OpenVPN credentials, the next step is to install an OpenVPN client. You can download the one that's compatible with the device you are going to use to connect to the Dappnode machine from the ",(0,o.jsx)(n.a,{href:"https://openvpn.net/client/",children:"OpenVPN website"}),"."]}),"\n",(0,o.jsx)(n.h2,{id:"4-connecting-to-dappnode-via-openvpn",children:"4. Connecting to Dappnode via OpenVPN"}),"\n",(0,o.jsx)(n.p,{children:"Once you have installed the OpenVPN client on your device, follow the steps below based on your operating system to connect to Dappnode:"}),"\n",(0,o.jsxs)(i,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("b",{children:"Android"})}),(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Launch the OpenVPN for Android app."}),"\n",(0,o.jsx)(n.li,{children:'Tap on "Import file".'}),"\n",(0,o.jsxs)(n.li,{children:["Upload the ",(0,o.jsx)(n.code,{children:".ovpn"})," file you downloaded earlier."]}),"\n",(0,o.jsx)(n.li,{children:'Click on "Connect".'}),"\n",(0,o.jsx)(n.li,{children:"Allow the app to create a VPN connection."}),"\n"]}),(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{src:"/img/openvpn_android.jpg",alt:"Import file in Android",style:{width:"20em"}})})]}),"\n",(0,o.jsxs)(i,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("b",{children:"iPhone/iPad"})}),(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Go to the URL you obtained in the previous step."}),"\n",(0,o.jsxs)(n.li,{children:["Download the ",(0,o.jsx)(n.code,{children:".ovpn"})," file."]}),"\n",(0,o.jsx)(n.li,{children:'Click on "Open in OpenVPN".'}),"\n",(0,o.jsx)(n.li,{children:'Click on "Add".'}),"\n",(0,o.jsx)(n.li,{children:'Click on "Connect"'}),"\n",(0,o.jsx)(n.li,{children:"Allow the app to create a VPN connection."}),"\n"]}),(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{src:"/img/openvpn_iphone_import.jpg",alt:"Import file in iPhone",style:{width:"10em"}})})]}),"\n",(0,o.jsxs)(i,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("b",{children:"macOS"})}),(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Launch Tunnelblick app for macOS."}),"\n",(0,o.jsx)(n.li,{children:'Click on "VPN Details" in the top bar menu.'}),"\n",(0,o.jsxs)(n.li,{children:["Drag and drop the ",(0,o.jsx)(n.code,{children:".ovpn"})," file you downloaded earlier in the left side bar."]}),"\n",(0,o.jsx)(n.li,{children:"Click on Connect."}),"\n"]}),(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{src:"/img/openvpn_mac.png",alt:"Import file in macOS",style:{width:"20em"}})})]}),"\n",(0,o.jsxs)(i,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("b",{children:"Windows"})}),(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Launch the OpenVPN for Windows app."}),"\n",(0,o.jsx)(n.li,{children:'Click on "Import file".'}),"\n",(0,o.jsxs)(n.li,{children:["Upload the ",(0,o.jsx)(n.code,{children:".ovpn"})," file you downloaded earlier."]}),"\n",(0,o.jsx)(n.li,{children:"Allow the app to create a VPN connection."}),"\n"]}),(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{src:"/img/openvpn_windows.jpg",alt:"Import file in Windows",style:{width:"20em"}})})]}),"\n",(0,o.jsxs)(i,{children:[(0,o.jsxs)("summary",{children:[" ",(0,o.jsx)("b",{children:"Recent Ubuntu"})]}),(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Open Settings>Network."}),"\n",(0,o.jsx)(n.li,{children:'Click on the "+" button to add a new VPN connection.'}),"\n",(0,o.jsx)(n.li,{children:'Select "Import from file".'}),"\n",(0,o.jsxs)(n.li,{children:["Upload the ",(0,o.jsx)(n.code,{children:".ovpn"})," file you downloaded earlier."]}),"\n",(0,o.jsx)(n.li,{children:'Click on "Add".'}),"\n",(0,o.jsx)(n.li,{children:"Toggle the switch button to connect."}),"\n"]}),(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{src:"/img/openvpn_ubuntu_network.png",alt:"Import file in Ubuntu",style:{width:"40em"}})}),(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{src:"/img/openvpn_ubuntu_import.png",alt:"Import file in Ubuntu",style:{width:"40em"}})})]}),"\n",(0,o.jsxs)(i,{children:[(0,o.jsxs)("summary",{children:[" ",(0,o.jsx)("b",{children:"Other Linux"})]}),(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Open the terminal."}),"\n",(0,o.jsxs)(n.li,{children:["Navigate to the directory where you have stored your ",(0,o.jsx)(n.code,{children:".ovpn"})," file."]}),"\n",(0,o.jsxs)(n.li,{children:["Execute the command: ",(0,o.jsx)(n.code,{children:"sudo openvpn Dappnode_VPN.ovpn"}),"."]}),"\n"]})]}),"\n",(0,o.jsx)("br",{}),"\n",(0,o.jsx)(n.admonition,{title:"Testing Your Connection",type:"tip",children:(0,o.jsxs)(n.p,{children:["Once connected, you can directly type ",(0,o.jsx)(n.a,{href:"http://my.dappnode",children:"http://my.dappnode"})," in your browser to access the Dappmanager."]})})]})}function p(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(a,{...e})}):a(e)}},1151:(e,n,i)=>{i.d(n,{Z:()=>d,a:()=>l});var o=i(7294);const t={},s=o.createContext(t);function l(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5d0a1dad.6a634fce.js b/assets/js/5d0a1dad.6a634fce.js deleted file mode 100644 index 7001eec9f..000000000 --- a/assets/js/5d0a1dad.6a634fce.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[306],{4137:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},l="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,d=p(e,["components","mdxType","originalType","parentName"]),l=c(r),h=o,f=l["".concat(s,".").concat(h)]||l[h]||u[h]||a;return r?n.createElement(f,i(i({ref:t},d),{},{components:r})):n.createElement(f,i({ref:t},d))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=h;var p={};for(var s in t)hasOwnProperty.call(t,s)&&(p[s]=t[s]);p.originalType=e,p[l]="string"==typeof e?e:o,i[1]=p;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>p,toc:()=>c});var n=r(7462),o=(r(7294),r(4137));const a={},i="Choose your path",p={unversionedId:"user/getting-started/choose-your-path",id:"user/getting-started/choose-your-path",title:"Choose your path",description:"Regardless of how you wish to utilize Dappnode, taking the initiative to contribute to decentralization and earning rewards is commendable. Embark on your desired path and experience the full potential of Dappnode.",source:"@site/docs/user/getting-started/choose-your-path.md",sourceDirName:"user/getting-started",slug:"/user/getting-started/choose-your-path",permalink:"/docs/user/getting-started/choose-your-path",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/getting-started/choose-your-path.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",next:{title:"Connect your dappnode to the router and power",permalink:"/docs/user/getting-started/connect-dappnode-to-the-router"}},s={},c=[],d={toc:c},l="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(l,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"choose-your-path"},"Choose your path"),(0,o.kt)("p",null,"Regardless of how you wish to utilize Dappnode, taking the initiative to contribute to decentralization and earning rewards is commendable. Embark on your desired path and experience the full potential of Dappnode."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Interested in purchasing a Dappnode? Explore our ",(0,o.kt)("a",{href:"https://dappnode.io"},"official store"),".")),(0,o.kt)("div",{className:"card-container"},(0,o.kt)("a",{href:"/docs/user/getting-started/connect-dappnode-to-the-router",className:"card"},(0,o.kt)("img",{src:"/img/dappnode_box.png",alt:"Dappnode Box",className:"dappnode-box"}),(0,o.kt)("h2",null,"Dappnode is installed"),(0,o.kt)("p",null,"I have bought a Dappnode or I already installed it")),(0,o.kt)("a",{href:"/docs/user/install/iso",className:"card"},(0,o.kt)("img",{src:"/img/install_dappnode.png",alt:"Install Dappnode"}),(0,o.kt)("h2",null,"I want to install Dappnode"),(0,o.kt)("p",null,"I own a machine where I want to install Dappnode software"))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5d0a1dad.fda2f78b.js b/assets/js/5d0a1dad.fda2f78b.js new file mode 100644 index 000000000..12dc93797 --- /dev/null +++ b/assets/js/5d0a1dad.fda2f78b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[306],{919:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>l,frontMatter:()=>r,metadata:()=>i,toc:()=>p});var o=n(5893),a=n(1151);const r={},s="Choose your path",i={id:"user/getting-started/choose-your-path",title:"Choose your path",description:"Regardless of how you wish to utilize Dappnode, taking the initiative to contribute to decentralization and earning rewards is commendable. Embark on your desired path and experience the full potential of Dappnode.",source:"@site/docs/user/getting-started/choose-your-path.md",sourceDirName:"user/getting-started",slug:"/user/getting-started/choose-your-path",permalink:"/docs/user/getting-started/choose-your-path",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/getting-started/choose-your-path.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",next:{title:"Connect your dappnode to the router and power",permalink:"/docs/user/getting-started/connect-dappnode-to-the-router"}},d={},p=[];function c(e){const t={admonition:"admonition",h1:"h1",p:"p",...(0,a.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"choose-your-path",children:"Choose your path"}),"\n",(0,o.jsx)(t.p,{children:"Regardless of how you wish to utilize Dappnode, taking the initiative to contribute to decentralization and earning rewards is commendable. Embark on your desired path and experience the full potential of Dappnode."}),"\n",(0,o.jsx)(t.admonition,{type:"note",children:(0,o.jsxs)(t.p,{children:["Interested in purchasing a Dappnode? Explore our ",(0,o.jsx)("a",{href:"https://dappnode.io",children:"official store"}),"."]})}),"\n",(0,o.jsxs)("div",{className:"card-container",children:[(0,o.jsxs)("a",{href:"/docs/user/getting-started/connect-dappnode-to-the-router",className:"card",children:[(0,o.jsx)("img",{src:"/img/dappnode_box.png",alt:"Dappnode Box",className:"dappnode-box"}),(0,o.jsx)("h2",{children:"Dappnode is installed"}),(0,o.jsx)("p",{children:"I have bought a Dappnode or I already installed it"})]}),(0,o.jsxs)("a",{href:"/docs/user/install/iso",className:"card",children:[(0,o.jsx)("img",{src:"/img/install_dappnode.png",alt:"Install Dappnode"}),(0,o.jsx)("h2",{children:"I want to install Dappnode"}),(0,o.jsx)("p",{children:"I own a machine where I want to install Dappnode software"})]})]})]})}function l(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>s});var o=n(7294);const a={},r=o.createContext(a);function s(e){const t=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5d665ce0.462ff5cd.js b/assets/js/5d665ce0.462ff5cd.js new file mode 100644 index 000000000..4534cbc4a --- /dev/null +++ b/assets/js/5d665ce0.462ff5cd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8646],{9513:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>p,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var r=t(5893),o=t(1151);const s={},a="Hardware",i={id:"user/hardware/overview",title:"Hardware",description:"In this section you will find information related to the hardware of the Dappnode's host machine. If you had noticed any issue with it and have tried some steps provided by the Dappnode community and/or staff without success, this section of the Dappnode documentation will help you solving those that are on the hardware side of things.",source:"@site/docs/user/hardware/overview.md",sourceDirName:"user/hardware",slug:"/user/hardware/overview",permalink:"/docs/user/hardware/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/hardware/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Local Proxy Access to Dappnode",permalink:"/docs/user/access-your-dappnode/local"},next:{title:"Maintenance",permalink:"/docs/user/hardware/maintenance"}},d={},c=[];function h(e){const n={a:"a",h1:"h1",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"hardware",children:"Hardware"}),"\n",(0,r.jsx)(n.p,{children:"In this section you will find information related to the hardware of the Dappnode's host machine. If you had noticed any issue with it and have tried some steps provided by the Dappnode community and/or staff without success, this section of the Dappnode documentation will help you solving those that are on the hardware side of things."}),"\n",(0,r.jsx)(n.p,{children:"Here are some topics you can check:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/docs/user/hardware/maintenance",children:(0,r.jsx)(n.strong,{children:"\ud83d\udee0\ufe0f Maintenance"})}),": Some approaches that may be helpful for your dappnode to perform as expected."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/docs/user/hardware/temperature",children:(0,r.jsx)(n.strong,{children:"\ud83c\udf21\ufe0f Temperature"})}),": Instructions for keeping track of your dappnode's temperature."]}),"\n"]}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>i,a:()=>a});var r=t(7294);const o={},s=r.createContext(o);function a(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5d665ce0.834d76f8.js b/assets/js/5d665ce0.834d76f8.js deleted file mode 100644 index 6ba71b30e..000000000 --- a/assets/js/5d665ce0.834d76f8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8646],{4137:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t =0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var p=n.createContext({}),c=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=c(e.components);return n.createElement(p.Provider,{value:t},e.children)},u="mdxType",l={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,p=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=c(r),h=a,f=u["".concat(p,".").concat(h)]||u[h]||l[h]||o;return r?n.createElement(f,i(i({ref:t},d),{},{components:r})):n.createElement(f,i({ref:t},d))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=h;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[u]="string"==typeof e?e:a,i[1]=s;for(var c=2;c {r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>l,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var n=r(7462),a=(r(7294),r(4137));const o={},i="Hardware",s={unversionedId:"user/hardware/overview",id:"user/hardware/overview",title:"Hardware",description:"In this section you will find information related to the hardware of the Dappnode's host machine. If you had noticed any issue with it and have tried some steps provided by the Dappnode community and/or staff without success, this section of the Dappnode documentation will help you solving those that are on the hardware side of things.",source:"@site/docs/user/hardware/overview.md",sourceDirName:"user/hardware",slug:"/user/hardware/overview",permalink:"/docs/user/hardware/overview",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/hardware/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Local Proxy Access to Dappnode",permalink:"/docs/user/access-your-dappnode/local"},next:{title:"Maintenance",permalink:"/docs/user/hardware/maintenance"}},p={},c=[],d={toc:c},u="wrapper";function l(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"hardware"},"Hardware"),(0,a.kt)("p",null,"In this section you will find information related to the hardware of the Dappnode's host machine. If you had noticed any issue with it and have tried some steps provided by the Dappnode community and/or staff without success, this section of the Dappnode documentation will help you solving those that are on the hardware side of things."),(0,a.kt)("p",null,"Here are some topics you can check:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("a",{parentName:"p",href:"/docs/user/hardware/maintenance"},(0,a.kt)("strong",{parentName:"a"},"\ud83d\udee0\ufe0f Maintenance")),": Some approaches that may be helpful for your dappnode to perform as expected.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("a",{parentName:"p",href:"/docs/user/hardware/temperature"},(0,a.kt)("strong",{parentName:"a"},"\ud83c\udf21\ufe0f Temperature")),": Instructions for keeping track of your dappnode's temperature."))))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5e95c892.c2e7cc9c.js b/assets/js/5e95c892.c2e7cc9c.js new file mode 100644 index 000000000..84b2ce2e5 --- /dev/null +++ b/assets/js/5e95c892.c2e7cc9c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9661],{1892:(e,s,d)=>{d.r(s),d.d(s,{default:()=>o});d(7294);var r=d(6010),a=d(1944),c=d(5281),n=d(8790),p=d(179),u=d(5893);function o(e){return(0,u.jsx)(a.FG,{className:(0,r.Z)(c.k.wrapper.docsPages),children:(0,u.jsx)(p.Z,{children:(0,n.H)(e.route.routes)})})}}}]); \ No newline at end of file diff --git a/assets/js/5f877448.89e09364.js b/assets/js/5f877448.89e09364.js new file mode 100644 index 000000000..d67be4f30 --- /dev/null +++ b/assets/js/5f877448.89e09364.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[839],{6506:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>l,frontMatter:()=>t,metadata:()=>a,toc:()=>d});var s=o(5893),r=o(1151);const t={},i="VPN Access to Dappnode",a={id:"user/access-your-dappnode/vpn/overview",title:"VPN Access to Dappnode",description:"Virtual Private Network (VPN) is a robust method for accessing your Dappnode. It ensures a secure and encrypted connection between your device and the Dappnode, allowing you to manage your Dappnode from virtually anywhere. Depending on your needs and preferences, Dappnode offers support for two primary VPN technologies: WireGuard and OpenVPN.",source:"@site/docs/user/access-your-dappnode/vpn/overview.md",sourceDirName:"user/access-your-dappnode/vpn",slug:"/user/access-your-dappnode/vpn/overview",permalink:"/docs/user/access-your-dappnode/vpn/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/access-your-dappnode/vpn/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Wi-Fi Access to Dappnode",permalink:"/docs/user/access-your-dappnode/wifi"},next:{title:"WireGuard Access to Dappnode",permalink:"/docs/user/access-your-dappnode/vpn/wireguard"}},c={},d=[{value:"VPN Clients",id:"vpn-clients",level:2},{value:"WireGuard (Recommended)",id:"wireguard-recommended",level:3},{value:"OpenVPN",id:"openvpn",level:3},{value:"Local vs. Remote Access",id:"local-vs-remote-access",level:2}];function p(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"vpn-access-to-dappnode",children:"VPN Access to Dappnode"}),"\n",(0,s.jsxs)(n.p,{children:["Virtual Private Network (VPN) is a robust method for accessing your Dappnode. It ensures a secure and encrypted connection between your device and the Dappnode, allowing you to manage your Dappnode from virtually anywhere. Depending on your needs and preferences, Dappnode offers support for two primary VPN technologies: ",(0,s.jsx)(n.strong,{children:"WireGuard"})," and ",(0,s.jsx)(n.strong,{children:"OpenVPN"}),"."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"It is not possible to use both Dappnode WiFi hotspot and VPN at the same time. If you want to use VPN, you'll need to disconnect your device from the WiFi hotspot."})}),"\n",(0,s.jsx)(n.h2,{id:"vpn-clients",children:"VPN Clients"}),"\n",(0,s.jsxs)(n.h3,{id:"wireguard-recommended",children:[(0,s.jsx)(n.a,{href:"/docs/user/access-your-dappnode/vpn/wireguard",children:"WireGuard"})," (Recommended)"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"WireGuard is a newer, streamlined VPN protocol known for its simplicity, speed, and security."}),"\n",(0,s.jsxs)(n.li,{children:["It requires less configuration and is considered more efficient in terms of CPU usage. ",(0,s.jsx)(n.a,{href:"https://www.wireguard.com/",children:"Learn more"})]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"openvpn",children:(0,s.jsx)(n.a,{href:"/docs/user/access-your-dappnode/vpn/openvpn",children:"OpenVPN"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"OpenVPN is a well-established VPN protocol praised for its security and reliability."}),"\n",(0,s.jsxs)(n.li,{children:["It's more versatile and can bypass most network restrictions and firewalls. ",(0,s.jsx)(n.a,{href:"https://openvpn.net/",children:"Learn more"})]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"local-vs-remote-access",children:"Local vs. Remote Access"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Local Access"}),": Connecting to your Dappnode when you're on the same local network. Generally, this means that your Dappnode machine and the device you're using to access it are connected to the same router."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Remote Access"}),": Connecting to your Dappnode from a different network or location. This is one of the major advantages of using a VPN."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"VPN provides a balance of security, versatility, and remote access capability. You can choose the VPN technology that best suits your needs and preferences, both fufill the requirements of most users."})})]})}function l(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},1151:(e,n,o)=>{o.d(n,{Z:()=>a,a:()=>i});var s=o(7294);const r={},t=s.createContext(r);function i(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5f877448.cda86ebe.js b/assets/js/5f877448.cda86ebe.js deleted file mode 100644 index 54a0c7660..000000000 --- a/assets/js/5f877448.cda86ebe.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[839],{4137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>y});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t =0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),c=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},d=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},u="mdxType",l={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),u=c(n),m=o,y=u["".concat(p,".").concat(m)]||u[m]||l[m]||a;return n?r.createElement(y,s(s({ref:t},d),{},{components:n})):r.createElement(y,s({ref:t},d))}));function y(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,s=new Array(a);s[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[u]="string"==typeof e?e:o,s[1]=i;for(var c=2;c{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>l,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var r=n(7462),o=(n(7294),n(4137));const a={},s="VPN Access to Dappnode",i={unversionedId:"user/access-your-dappnode/vpn/overview",id:"user/access-your-dappnode/vpn/overview",title:"VPN Access to Dappnode",description:"Virtual Private Network (VPN) is a robust method for accessing your Dappnode. It ensures a secure and encrypted connection between your device and the Dappnode, allowing you to manage your Dappnode from virtually anywhere. Depending on your needs and preferences, Dappnode offers support for two primary VPN technologies: WireGuard and OpenVPN.",source:"@site/docs/user/access-your-dappnode/vpn/overview.md",sourceDirName:"user/access-your-dappnode/vpn",slug:"/user/access-your-dappnode/vpn/overview",permalink:"/docs/user/access-your-dappnode/vpn/overview",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/access-your-dappnode/vpn/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Wi-Fi Access to Dappnode",permalink:"/docs/user/access-your-dappnode/wifi"},next:{title:"WireGuard Access to Dappnode",permalink:"/docs/user/access-your-dappnode/vpn/wireguard"}},p={},c=[{value:"VPN Clients",id:"vpn-clients",level:2},{value:"WireGuard (Recommended)",id:"wireguard-recommended",level:3},{value:"OpenVPN",id:"openvpn",level:3},{value:"Local vs. Remote Access",id:"local-vs-remote-access",level:2}],d={toc:c},u="wrapper";function l(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"vpn-access-to-dappnode"},"VPN Access to Dappnode"),(0,o.kt)("p",null,"Virtual Private Network (VPN) is a robust method for accessing your Dappnode. It ensures a secure and encrypted connection between your device and the Dappnode, allowing you to manage your Dappnode from virtually anywhere. Depending on your needs and preferences, Dappnode offers support for two primary VPN technologies: ",(0,o.kt)("strong",{parentName:"p"},"WireGuard")," and ",(0,o.kt)("strong",{parentName:"p"},"OpenVPN"),"."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"It is not possible to use both Dappnode WiFi hotspot and VPN at the same time. If you want to use VPN, you'll need to disconnect your device from the WiFi hotspot.")),(0,o.kt)("h2",{id:"vpn-clients"},"VPN Clients"),(0,o.kt)("h3",{id:"wireguard-recommended"},(0,o.kt)("a",{parentName:"h3",href:"/docs/user/access-your-dappnode/vpn/wireguard"},"WireGuard")," (Recommended)"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"WireGuard is a newer, streamlined VPN protocol known for its simplicity, speed, and security."),(0,o.kt)("li",{parentName:"ul"},"It requires less configuration and is considered more efficient in terms of CPU usage. ",(0,o.kt)("a",{parentName:"li",href:"https://www.wireguard.com/"},"Learn more"))),(0,o.kt)("h3",{id:"openvpn"},(0,o.kt)("a",{parentName:"h3",href:"/docs/user/access-your-dappnode/vpn/openvpn"},"OpenVPN")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"OpenVPN is a well-established VPN protocol praised for its security and reliability."),(0,o.kt)("li",{parentName:"ul"},"It's more versatile and can bypass most network restrictions and firewalls. ",(0,o.kt)("a",{parentName:"li",href:"https://openvpn.net/"},"Learn more"))),(0,o.kt)("h2",{id:"local-vs-remote-access"},"Local vs. Remote Access"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Local Access"),": Connecting to your Dappnode when you're on the same local network. Generally, this means that your Dappnode machine and the device you're using to access it are connected to the same router."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Remote Access"),": Connecting to your Dappnode from a different network or location. This is one of the major advantages of using a VPN.")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"VPN provides a balance of security, versatility, and remote access capability. You can choose the VPN technology that best suits your needs and preferences, both fufill the requirements of most users.")))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/67625ece.a4dc0a22.js b/assets/js/67625ece.a4dc0a22.js new file mode 100644 index 000000000..487da0278 --- /dev/null +++ b/assets/js/67625ece.a4dc0a22.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[120],{8386:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>r,contentTitle:()=>s,default:()=>l,frontMatter:()=>a,metadata:()=>d,toc:()=>p});var t=o(5893),i=o(1151);const a={},s="DappnodeSDK",d={id:"dev/sdk/overview",title:"DappnodeSDK",description:"The DappnodeSDK dappnodesdk is a tool that makes creating and publishing new Dappnode packages as simple as possible. It helps to initialize, build, test, and publish the new package/repo to an APM tracked on the Ethereum Mainnet.",source:"@site/docs/dev/sdk/overview.md",sourceDirName:"dev/sdk",slug:"/dev/sdk/overview",permalink:"/docs/dev/sdk/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/sdk/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"Introduction",permalink:"/docs/dev"},next:{title:"Main commands",permalink:"/docs/dev/sdk/commands"}},r={},p=[{value:"Command-line options",id:"command-line-options",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"dappnodesdk",children:"DappnodeSDK"}),"\n",(0,t.jsxs)(n.p,{children:["The DappnodeSDK ",(0,t.jsx)(n.code,{children:"dappnodesdk"})," is a tool that makes creating and publishing new Dappnode packages as simple as possible. It helps to initialize, build, test, and publish the new package/repo to an APM tracked on the Ethereum Mainnet."]}),"\n",(0,t.jsxs)(n.p,{children:["We have deployed a public APM (Aragon Package Manager) registry in which anyone can create their own APM repository: ",(0,t.jsx)(n.a,{href:"https://etherscan.io/address/public.dappnode.eth",children:"public.dappnode.eth"})]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Demo GIF",src:o(4702).Z+"",width:"1049",height:"638"})}),"\n",(0,t.jsx)(n.h2,{id:"command-line-options",children:"Command-line options"}),"\n",(0,t.jsx)(n.p,{children:"DappnodeSDK is usually executed from the command line. The following are all the available commands."}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["You can run ",(0,t.jsx)(n.code,{children:"dappnodesdk help"})," to get more information about each command."]})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:'Usage: dappnodesdk [options]\n\nCommands:\n build Build a new version (only generates the ipfs hash)\n from_github [repoSlug] Gets an existing DNP Github release (assets) and uploa\n d it to IPFS\n increase [type] Increases the version defined in the manifest\n init Initialize a new DAppNodePackage (DNP) repository\n next [type] Compute the next release version from local\n publish [type] Publish a new version of the package in an Aragon Pack\n age Manager Repository\n github-action Github actions tooling to be run in CI. Uses a specifi\n c set of options for internal DAppNode use. Caution: o\n ptions may change without notice.\n\nOptions:\n --dir, --directory Change the base directory [string] [default: "./"]\n --compose_file_name Compose file for docker-compose\n [string] [default: "docker-compose.yml"]\n --silent Silence output to terminal [boolean]\n --verbose, --debug Show more output to terminal [boolean]\n -h, --help Show help [boolean]\n -v, --version Show version number [boolean]```\n'})})]})}function l(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},4702:(e,n,o)=>{o.d(n,{Z:()=>t});const t=o.p+"assets/images/demo-3ae4e5dc0c026dfb372657f396712b72.gif"},1151:(e,n,o)=>{o.d(n,{Z:()=>d,a:()=>s});var t=o(7294);const i={},a=t.createContext(i);function s(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/67625ece.d4d8382e.js b/assets/js/67625ece.d4d8382e.js deleted file mode 100644 index 0877dad39..000000000 --- a/assets/js/67625ece.d4d8382e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[120],{4137:(e,n,t)=>{t.d(n,{Zo:()=>l,kt:()=>h});var o=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function i(e){for(var n=1;n =0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o =0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=o.createContext({}),d=function(e){var n=o.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},l=function(e){var n=d(e.components);return o.createElement(s.Provider,{value:n},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},m=o.forwardRef((function(e,n){var t=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,l=p(e,["components","mdxType","originalType","parentName"]),c=d(t),m=a,h=c["".concat(s,".").concat(m)]||c[m]||u[m]||r;return t?o.createElement(h,i(i({ref:n},l),{},{components:t})):o.createElement(h,i({ref:n},l))}));function h(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var r=t.length,i=new Array(r);i[0]=m;var p={};for(var s in n)hasOwnProperty.call(n,s)&&(p[s]=n[s]);p.originalType=e,p[c]="string"==typeof e?e:a,i[1]=p;for(var d=2;d {t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>p,toc:()=>d});var o=t(7462),a=(t(7294),t(4137));const r={},i="DappnodeSDK",p={unversionedId:"dev/sdk/overview",id:"dev/sdk/overview",title:"DappnodeSDK",description:"The DappnodeSDK dappnodesdk is a tool that makes creating and publishing new Dappnode packages as simple as possible. It helps to initialize, build, test, and publish the new package/repo to an APM tracked on the Ethereum Mainnet.",source:"@site/docs/dev/sdk/overview.md",sourceDirName:"dev/sdk",slug:"/dev/sdk/overview",permalink:"/docs/dev/sdk/overview",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/sdk/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"Introduction",permalink:"/docs/dev"},next:{title:"Main commands",permalink:"/docs/dev/sdk/commands"}},s={},d=[{value:"Command-line options",id:"command-line-options",level:2}],l={toc:d},c="wrapper";function u(e){let{components:n,...r}=e;return(0,a.kt)(c,(0,o.Z)({},l,r,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"dappnodesdk"},"DappnodeSDK"),(0,a.kt)("p",null,"The DappnodeSDK ",(0,a.kt)("inlineCode",{parentName:"p"},"dappnodesdk")," is a tool that makes creating and publishing new Dappnode packages as simple as possible. It helps to initialize, build, test, and publish the new package/repo to an APM tracked on the Ethereum Mainnet."),(0,a.kt)("p",null,"We have deployed a public APM (Aragon Package Manager) registry in which anyone can create their own APM repository: ",(0,a.kt)("a",{parentName:"p",href:"https://etherscan.io/address/public.dappnode.eth"},"public.dappnode.eth")),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Demo GIF",src:t(4702).Z,width:"1049",height:"638"})),(0,a.kt)("h2",{id:"command-line-options"},"Command-line options"),(0,a.kt)("p",null,"DappnodeSDK is usually executed from the command line. The following are all the available commands. "),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"You can run ",(0,a.kt)("inlineCode",{parentName:"p"},"dappnodesdk help")," to get more information about each command.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},'Usage: dappnodesdk [options]\n\nCommands:\n build Build a new version (only generates the ipfs hash)\n from_github [repoSlug] Gets an existing DNP Github release (assets) and uploa\n d it to IPFS\n increase [type] Increases the version defined in the manifest\n init Initialize a new DAppNodePackage (DNP) repository\n next [type] Compute the next release version from local\n publish [type] Publish a new version of the package in an Aragon Pack\n age Manager Repository\n github-action Github actions tooling to be run in CI. Uses a specifi\n c set of options for internal DAppNode use. Caution: o\n ptions may change without notice.\n\nOptions:\n --dir, --directory Change the base directory [string] [default: "./"]\n --compose_file_name Compose file for docker-compose\n [string] [default: "docker-compose.yml"]\n --silent Silence output to terminal [boolean]\n --verbose, --debug Show more output to terminal [boolean]\n -h, --help Show help [boolean]\n -v, --version Show version number [boolean]```\n')))}u.isMDXComponent=!0},4702:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/demo-3ae4e5dc0c026dfb372657f396712b72.gif"}}]); \ No newline at end of file diff --git a/assets/js/6875c492.464585ab.js b/assets/js/6875c492.464585ab.js new file mode 100644 index 000000000..a14e2bed1 --- /dev/null +++ b/assets/js/6875c492.464585ab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8610],{9703:(e,t,n)=>{n.d(t,{Z:()=>l});n(7294);var s=n(5999),a=n(2244),i=n(5893);function l(e){const{metadata:t}=e,{previousPage:n,nextPage:l}=t;return(0,i.jsxs)("nav",{className:"pagination-nav","aria-label":(0,s.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[n&&(0,i.jsx)(a.Z,{permalink:n,title:(0,i.jsx)(s.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer Entries"})}),l&&(0,i.jsx)(a.Z,{permalink:l,title:(0,i.jsx)(s.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older Entries"}),isNext:!0})]})}},9985:(e,t,n)=>{n.d(t,{Z:()=>l});n(7294);var s=n(9460),a=n(390),i=n(5893);function l(e){let{items:t,component:n=a.Z}=e;return(0,i.jsx)(i.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,i.jsx)(s.n,{content:t,children:(0,i.jsx)(n,{children:(0,i.jsx)(t,{})})},t.metadata.permalink)}))})}},1714:(e,t,n)=>{n.r(t),n.d(t,{default:()=>f});n(7294);var s=n(6010),a=n(5999),i=n(8824),l=n(1944),r=n(5281),o=n(9960),c=n(1460),d=n(9703),g=n(197),u=n(9985),p=n(2212),h=n(2503),m=n(5893);function x(e){const t=function(){const{selectMessage:e}=(0,i.c)();return t=>e(t,(0,a.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:t}))}();return(0,a.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}function j(e){let{tag:t}=e;const n=x(t);return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(l.d,{title:n}),(0,m.jsx)(g.Z,{tag:"blog_tags_posts"})]})}function b(e){let{tag:t,items:n,sidebar:s,listMetadata:i}=e;const l=x(t);return(0,m.jsxs)(c.Z,{sidebar:s,children:[t.unlisted&&(0,m.jsx)(p.Z,{}),(0,m.jsxs)("header",{className:"margin-bottom--xl",children:[(0,m.jsx)(h.Z,{as:"h1",children:l}),(0,m.jsx)(o.Z,{href:t.allTagsPath,children:(0,m.jsx)(a.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page",children:"View All Tags"})})]}),(0,m.jsx)(u.Z,{items:n}),(0,m.jsx)(d.Z,{metadata:i})]})}function f(e){return(0,m.jsxs)(l.FG,{className:(0,s.Z)(r.k.wrapper.blogPages,r.k.page.blogTagPostListPage),children:[(0,m.jsx)(j,{...e}),(0,m.jsx)(b,{...e})]})}},2212:(e,t,n)=>{n.d(t,{Z:()=>p});n(7294);var s=n(6010),a=n(5999),i=n(5742),l=n(5893);function r(){return(0,l.jsx)(a.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function o(){return(0,l.jsx)(a.Z,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,l.jsx)(i.Z,{children:(0,l.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=n(5281),g=n(9047);function u(e){let{className:t}=e;return(0,l.jsx)(g.Z,{type:"caution",title:(0,l.jsx)(r,{}),className:(0,s.Z)(t,d.k.common.unlistedBanner),children:(0,l.jsx)(o,{})})}function p(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c,{}),(0,l.jsx)(u,{...e})]})}}}]); \ No newline at end of file diff --git a/assets/js/6875c492.b010a3d3.js b/assets/js/6875c492.b010a3d3.js deleted file mode 100644 index d46aa28d3..000000000 --- a/assets/js/6875c492.b010a3d3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8610],{2568:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(7294),l=a(7325),r=a(3672);function s(e){const{metadata:t}=e,{previousPage:a,nextPage:s}=t;return n.createElement("nav",{className:"pagination-nav","aria-label":(0,l.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"})},a&&n.createElement(r.Z,{permalink:a,title:n.createElement(l.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)"},"Newer Entries")}),s&&n.createElement(r.Z,{permalink:s,title:n.createElement(l.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)"},"Older Entries"),isNext:!0}))}},8389:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(7294),l=a(9107),r=a(1116);function s(e){let{items:t,component:a=r.Z}=e;return n.createElement(n.Fragment,null,t.map((e=>{let{content:t}=e;return n.createElement(l.n,{key:t.metadata.permalink,content:t},n.createElement(a,null,n.createElement(t,null)))})))}},4883:(e,t,a)=>{a.r(t),a.d(t,{default:()=>E});var n=a(7294),l=a(6010),r=a(7325),s=a(3777),o=a(5463),i=a(3702),g=a(3699),c=a(2506),m=a(2568),p=a(3647),u=a(8389);function d(e){const t=function(){const{selectMessage:e}=(0,s.c)();return t=>e(t,(0,r.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:t}))}();return(0,r.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}function h(e){let{tag:t}=e;const a=d(t);return n.createElement(n.Fragment,null,n.createElement(o.d,{title:a}),n.createElement(p.Z,{tag:"blog_tags_posts"}))}function b(e){let{tag:t,items:a,sidebar:l,listMetadata:s}=e;const o=d(t);return n.createElement(c.Z,{sidebar:l},n.createElement("header",{className:"margin-bottom--xl"},n.createElement("h1",null,o),n.createElement(g.Z,{href:t.allTagsPath},n.createElement(r.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page"},"View All Tags"))),n.createElement(u.Z,{items:a}),n.createElement(m.Z,{metadata:s}))}function E(e){return n.createElement(o.FG,{className:(0,l.Z)(i.k.wrapper.blogPages,i.k.page.blogTagPostListPage)},n.createElement(h,e),n.createElement(b,e))}}}]); \ No newline at end of file diff --git a/assets/js/6e504cb9.0b0e4ccf.js b/assets/js/6e504cb9.0b0e4ccf.js new file mode 100644 index 000000000..2c0f1cf35 --- /dev/null +++ b/assets/js/6e504cb9.0b0e4ccf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9402],{865:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>t,metadata:()=>d,toc:()=>a});var s=n(5893),r=n(1151);const t={},i="More coming soon",d={id:"user/dappnode-cloud/providers/coming-soon",title:"More coming soon",description:"We are aiming to deploy Dappnode Images in more cloud providers in a nearly future.",source:"@site/docs/user/dappnode-cloud/providers/coming-soon.md",sourceDirName:"user/dappnode-cloud/providers",slug:"/user/dappnode-cloud/providers/coming-soon",permalink:"/docs/user/dappnode-cloud/providers/coming-soon",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/dappnode-cloud/providers/coming-soon.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"FAQs & Troubleshooting",permalink:"/docs/user/dappnode-cloud/providers/aws/faqs"},next:{title:"1. Initial Dappnode Setup",permalink:"/docs/user/videos-and-tutorials/driving-school/initial-setup"}},p={},a=[];function c(e){const o={a:"a",h1:"h1",p:"p",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.h1,{id:"more-coming-soon",children:"More coming soon"}),"\n",(0,s.jsx)(o.p,{children:"We are aiming to deploy Dappnode Images in more cloud providers in a nearly future."}),"\n",(0,s.jsxs)(o.p,{children:["If you are willing to run Dappnode in a specific provider you can open an Issue in ",(0,s.jsx)(o.a,{href:"https://github.com/dappnode/DNP_DAPPMANAGER/issues/new?assignees=&labels=&projects=&template=feature_request.md",children:"Dappnode's GitHub"})," and tell us more about it!"]})]})}function u(e={}){const{wrapper:o}={...(0,r.a)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},1151:(e,o,n)=>{n.d(o,{Z:()=>d,a:()=>i});var s=n(7294);const r={},t=s.createContext(r);function i(e){const o=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function d(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(t.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6e504cb9.6f3e8a52.js b/assets/js/6e504cb9.6f3e8a52.js deleted file mode 100644 index 1b3e3c0a6..000000000 --- a/assets/js/6e504cb9.6f3e8a52.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9402],{4137:(e,r,n)=>{n.d(r,{Zo:()=>d,kt:()=>f});var o=n(7294);function t(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function a(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var r=1;r =0||(t[n]=e[n]);return t}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(t[n]=e[n])}return t}var s=o.createContext({}),c=function(e){var r=o.useContext(s),n=r;return e&&(n="function"==typeof e?e(r):i(i({},r),e)),n},d=function(e){var r=c(e.components);return o.createElement(s.Provider,{value:r},e.children)},u="mdxType",l={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},m=o.forwardRef((function(e,r){var n=e.components,t=e.mdxType,a=e.originalType,s=e.parentName,d=p(e,["components","mdxType","originalType","parentName"]),u=c(n),m=t,f=u["".concat(s,".").concat(m)]||u[m]||l[m]||a;return n?o.createElement(f,i(i({ref:r},d),{},{components:n})):o.createElement(f,i({ref:r},d))}));function f(e,r){var n=arguments,t=r&&r.mdxType;if("string"==typeof e||t){var a=n.length,i=new Array(a);i[0]=m;var p={};for(var s in r)hasOwnProperty.call(r,s)&&(p[s]=r[s]);p.originalType=e,p[u]="string"==typeof e?e:t,i[1]=p;for(var c=2;c{n.r(r),n.d(r,{assets:()=>s,contentTitle:()=>i,default:()=>l,frontMatter:()=>a,metadata:()=>p,toc:()=>c});var o=n(7462),t=(n(7294),n(4137));const a={},i="More coming soon",p={unversionedId:"user/dappnode-cloud/providers/coming-soon",id:"user/dappnode-cloud/providers/coming-soon",title:"More coming soon",description:"We are aiming to deploy Dappnode Images in more cloud providers in a nearly future.",source:"@site/docs/user/dappnode-cloud/providers/coming-soon.md",sourceDirName:"user/dappnode-cloud/providers",slug:"/user/dappnode-cloud/providers/coming-soon",permalink:"/docs/user/dappnode-cloud/providers/coming-soon",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/dappnode-cloud/providers/coming-soon.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"FAQs & Troubleshooting",permalink:"/docs/user/dappnode-cloud/providers/aws/faqs"},next:{title:"1. Initial Dappnode Setup",permalink:"/docs/user/videos-and-tutorials/driving-school/initial-setup"}},s={},c=[],d={toc:c},u="wrapper";function l(e){let{components:r,...n}=e;return(0,t.kt)(u,(0,o.Z)({},d,n,{components:r,mdxType:"MDXLayout"}),(0,t.kt)("h1",{id:"more-coming-soon"},"More coming soon"),(0,t.kt)("p",null,"We are aiming to deploy Dappnode Images in more cloud providers in a nearly future."),(0,t.kt)("p",null,"If you are willing to run Dappnode in a specific provider you can open an Issue in ",(0,t.kt)("a",{parentName:"p",href:"https://github.com/dappnode/DNP_DAPPMANAGER/issues/new?assignees=&labels=&projects=&template=feature_request.md"},"Dappnode's GitHub")," and tell us more about it!"))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6e93d9f5.65732374.js b/assets/js/6e93d9f5.65732374.js new file mode 100644 index 000000000..e061d6c2c --- /dev/null +++ b/assets/js/6e93d9f5.65732374.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[935],{1830:(o,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var e=s(5893),n=s(1151);const i={},r="Unsubscribing from Smooth.",a={id:"smooth/unsubscribe-from-smooth",title:"Unsubscribing from Smooth.",description:"Unsubscribing from Smooth is as simple as subscribing to it. You can unsubscribe from Smooth at any time, it is done through Smooth's website and it only takes one simple transaction.",source:"@site/docs/smooth/unsubscribe-from-smooth.md",sourceDirName:"smooth",slug:"/smooth/unsubscribe-from-smooth",permalink:"/docs/smooth/unsubscribe-from-smooth",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/unsubscribe-from-smooth.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Manual Subscription",permalink:"/docs/smooth/subscribe-to-smooth/manual"},next:{title:"FAQ & Glossary",permalink:"/docs/smooth/faq-glossary"}},c={},l=[{value:"Step 1: Log in to Smooth's website.",id:"step-1-log-in-to-smooths-website",level:2},{value:"Step 2: Click on the "Unsubscribe" button of the validator you want to unsubscribe.",id:"step-2-click-on-the-unsubscribe-button-of-the-validator-you-want-to-unsubscribe",level:2},{value:"Step 3: Follow the dialog instructions.",id:"step-3-follow-the-dialog-instructions",level:2}];function h(o){const t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",img:"img",p:"p",strong:"strong",...(0,n.a)(),...o.components};return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(t.h1,{id:"unsubscribing-from-smooth",children:"Unsubscribing from Smooth."}),"\n",(0,e.jsxs)(t.p,{children:["Unsubscribing from ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," is as simple as subscribing to it. You can unsubscribe from ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," at any time, it is done through ",(0,e.jsx)(t.strong,{children:(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth's website"})})," and it only takes one simple transaction."]}),"\n",(0,e.jsx)(t.admonition,{type:"caution",children:(0,e.jsxs)(t.p,{children:["When unsubscribing a validator from ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),", you will lose all pending rewards attached to it. We recommend unsubscribing just after successfully proposing a block, so lost pending rewards are minimized."]})}),"\n",(0,e.jsx)(t.h2,{id:"step-1-log-in-to-smooths-website",children:"Step 1: Log in to Smooth's website."}),"\n",(0,e.jsxs)(t.p,{children:["Go to ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth's website"})," and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear."]}),"\n",(0,e.jsx)(t.h2,{id:"step-2-click-on-the-unsubscribe-button-of-the-validator-you-want-to-unsubscribe",children:'Step 2: Click on the "Unsubscribe" button of the validator you want to unsubscribe.'}),"\n",(0,e.jsxs)(t.p,{children:['Once logged in, click on the "Unsubscribe" button of the validator you want to unsubscribe from ',(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),"."]}),"\n",(0,e.jsx)(t.p,{children:(0,e.jsx)(t.img,{alt:"my-unsub-table",src:s(9742).Z+"",width:"1021",height:"258"})}),"\n",(0,e.jsx)(t.h2,{id:"step-3-follow-the-dialog-instructions",children:"Step 3: Follow the dialog instructions."}),"\n",(0,e.jsx)("p",{align:"center",children:(0,e.jsx)("img",{src:"/img/smooth-unsub-initial-dialog.png",alt:"unsub-initial-dialog",width:"400"})}),"\n",(0,e.jsxs)(t.p,{children:['Once clicking on the "Unsubscribe" button, a dialog will appear warning you that you are about to unsubscribe from ',(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),", and that it is recommended to do it when pending rewards are low. Click on ",(0,e.jsx)("em",{children:'"Claim my rewards"'})," to continue and follow the dialog instructions. If you have any claimable rewards, a transaction that claims them will be prepared. If no claimable rewards are available, you will jump directly into the unsubscribe transaction."]}),"\n",(0,e.jsx)("p",{align:"center",children:(0,e.jsx)("img",{src:"/img/smooth-unsubscribe-done.png",alt:"unsub-done",width:"400"})}),"\n",(0,e.jsxs)(t.p,{children:["Once the subscription transaction is processed by the chain, your validator will have been unsubscribed sucessfully from ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". You can check it by reloading your validator's table."]}),"\n",(0,e.jsx)(t.admonition,{type:"caution",children:(0,e.jsxs)(t.p,{children:["After unsubscribing, we recommend to change your validator's fee recipient back to another address as soon as possible, in order to avoid automatically subscribing to ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," again."]})})]})}function d(o={}){const{wrapper:t}={...(0,n.a)(),...o.components};return t?(0,e.jsx)(t,{...o,children:(0,e.jsx)(h,{...o})}):h(o)}},9742:(o,t,s)=>{s.d(t,{Z:()=>e});const e=s.p+"assets/images/smooth-unsub-table-bebccc787b3582ee85af18702df67c05.png"},1151:(o,t,s)=>{s.d(t,{Z:()=>a,a:()=>r});var e=s(7294);const n={},i=e.createContext(n);function r(o){const t=e.useContext(i);return e.useMemo((function(){return"function"==typeof o?o(t):{...t,...o}}),[t,o])}function a(o){let t;return t=o.disableParentContext?"function"==typeof o.components?o.components(n):o.components||n:r(o.components),e.createElement(i.Provider,{value:t},o.children)}}}]); \ No newline at end of file diff --git a/assets/js/6e93d9f5.a76a2c8c.js b/assets/js/6e93d9f5.a76a2c8c.js deleted file mode 100644 index 4ed86cc0b..000000000 --- a/assets/js/6e93d9f5.a76a2c8c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[935],{4137:(t,e,o)=>{o.d(e,{Zo:()=>c,kt:()=>d});var n=o(7294);function r(t,e,o){return e in t?Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0,writable:!0}):t[e]=o,t}function i(t,e){var o=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),o.push.apply(o,n)}return o}function s(t){for(var e=1;e =0||(r[o]=t[o]);return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(t,o)&&(r[o]=t[o])}return r}var l=n.createContext({}),u=function(t){var e=n.useContext(l),o=e;return t&&(o="function"==typeof t?t(e):s(s({},e),t)),o},c=function(t){var e=u(t.components);return n.createElement(l.Provider,{value:e},t.children)},p="mdxType",m={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},b=n.forwardRef((function(t,e){var o=t.components,r=t.mdxType,i=t.originalType,l=t.parentName,c=a(t,["components","mdxType","originalType","parentName"]),p=u(o),b=r,d=p["".concat(l,".").concat(b)]||p[b]||m[b]||i;return o?n.createElement(d,s(s({ref:e},c),{},{components:o})):n.createElement(d,s({ref:e},c))}));function d(t,e){var o=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var i=o.length,s=new Array(i);s[0]=b;var a={};for(var l in e)hasOwnProperty.call(e,l)&&(a[l]=e[l]);a.originalType=t,a[p]="string"==typeof t?t:r,s[1]=a;for(var u=2;u{o.r(e),o.d(e,{assets:()=>l,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>a,toc:()=>u});var n=o(7462),r=(o(7294),o(4137));const i={},s="Unsubscribing from Smooth.",a={unversionedId:"smooth/unsubscribe-from-smooth",id:"smooth/unsubscribe-from-smooth",title:"Unsubscribing from Smooth.",description:"Unsubscribing from Smooth is as simple as subscribing to it. You can unsubscribe from Smooth at any time, it is done through Smooth's website and it only takes one simple transaction.",source:"@site/docs/smooth/unsubscribe-from-smooth.md",sourceDirName:"smooth",slug:"/smooth/unsubscribe-from-smooth",permalink:"/docs/smooth/unsubscribe-from-smooth",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/unsubscribe-from-smooth.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Manual Subscription",permalink:"/docs/smooth/subscribe-to-smooth/manual"},next:{title:"FAQ & Glossary",permalink:"/docs/smooth/faq-glossary"}},l={},u=[{value:"Step 1: Log in to Smooth's website.",id:"step-1-log-in-to-smooths-website",level:2},{value:"Step 2: Click on the "Unsubscribe" button of the validator you want to unsubscribe.",id:"step-2-click-on-the-unsubscribe-button-of-the-validator-you-want-to-unsubscribe",level:2},{value:"Step 3: Follow the dialog instructions.",id:"step-3-follow-the-dialog-instructions",level:2}],c={toc:u},p="wrapper";function m(t){let{components:e,...i}=t;return(0,r.kt)(p,(0,n.Z)({},c,i,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"unsubscribing-from-smooth"},"Unsubscribing from Smooth."),(0,r.kt)("p",null,"Unsubscribing from ",(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," is as simple as subscribing to it. You can unsubscribe from ",(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," at any time, it is done through ",(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("a",{parentName:"strong",href:"https://smooth.dappnode.io/"},"Smooth's website"))," and it only takes one simple transaction."),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"When unsubscribing a validator from ",(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),", you will lose all pending rewards attached to it. We recommend unsubscribing just after successfully proposing a block, so lost pending rewards are minimized.")),(0,r.kt)("h2",{id:"step-1-log-in-to-smooths-website"},"Step 1: Log in to Smooth's website."),(0,r.kt)("p",null,"Go to ",(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth's website")," and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear."),(0,r.kt)("h2",{id:"step-2-click-on-the-unsubscribe-button-of-the-validator-you-want-to-unsubscribe"},'Step 2: Click on the "Unsubscribe" button of the validator you want to unsubscribe.'),(0,r.kt)("p",null,'Once logged in, click on the "Unsubscribe" button of the validator you want to unsubscribe from ',(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),"."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"my-unsub-table",src:o(9742).Z,width:"1021",height:"258"})),(0,r.kt)("h2",{id:"step-3-follow-the-dialog-instructions"},"Step 3: Follow the dialog instructions."),(0,r.kt)("p",{align:"center"},(0,r.kt)("img",{src:"/img/smooth-unsub-initial-dialog.png",alt:"unsub-initial-dialog",width:"400"})),(0,r.kt)("p",null,'Once clicking on the "Unsubscribe" button, a dialog will appear warning you that you are about to unsubscribe from ',(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),", and that it is recommended to do it when pending rewards are low. Click on ",(0,r.kt)("em",null,'"Claim my rewards"')," to continue and follow the dialog instructions. If you have any claimable rewards, a transaction that claims them will be prepared. If no claimable rewards are available, you will jump directly into the unsubscribe transaction."),(0,r.kt)("p",{align:"center"},(0,r.kt)("img",{src:"/img/smooth-unsubscribe-done.png",alt:"unsub-done",width:"400"})),(0,r.kt)("p",null,"Once the subscription transaction is processed by the chain, your validator will have been unsubscribed sucessfully from ",(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". You can check it by reloading your validator's table."),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"After unsubscribing, we recommend to change your validator's fee recipient back to another address as soon as possible, in order to avoid automatically subscribing to ",(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," again.")))}m.isMDXComponent=!0},9742:(t,e,o)=>{o.d(e,{Z:()=>n});const n=o.p+"assets/images/smooth-unsub-table-bebccc787b3582ee85af18702df67c05.png"}}]); \ No newline at end of file diff --git a/assets/js/73664a40.a988e157.js b/assets/js/73664a40.a988e157.js deleted file mode 100644 index 2f9f43b67..000000000 --- a/assets/js/73664a40.a988e157.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3514],{4137:(e,t,i)=>{i.d(t,{Zo:()=>a,kt:()=>g});var o=i(7294);function s(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function r(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,o)}return i}function n(e){for(var t=1;t =0||(s[i]=e[i]);return s}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o =0||Object.prototype.propertyIsEnumerable.call(e,i)&&(s[i]=e[i])}return s}var u=o.createContext({}),m=function(e){var t=o.useContext(u),i=t;return e&&(i="function"==typeof e?e(t):n(n({},t),e)),i},a=function(e){var t=m(e.components);return o.createElement(u.Provider,{value:t},e.children)},c="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var i=e.components,s=e.mdxType,r=e.originalType,u=e.parentName,a=l(e,["components","mdxType","originalType","parentName"]),c=m(i),d=s,g=c["".concat(u,".").concat(d)]||c[d]||p[d]||r;return i?o.createElement(g,n(n({ref:t},a),{},{components:i})):o.createElement(g,n({ref:t},a))}));function g(e,t){var i=arguments,s=t&&t.mdxType;if("string"==typeof e||s){var r=i.length,n=new Array(r);n[0]=d;var l={};for(var u in t)hasOwnProperty.call(t,u)&&(l[u]=t[u]);l.originalType=e,l[c]="string"==typeof e?e:s,n[1]=l;for(var m=2;m {i.r(t),i.d(t,{assets:()=>u,contentTitle:()=>n,default:()=>p,frontMatter:()=>r,metadata:()=>l,toc:()=>m});var o=i(7462),s=(i(7294),i(4137));const r={slug:"long-blog-post",title:"Long Blog Post",authors:"endi",tags:["hello","docusaurus"]},n=void 0,l={permalink:"/blog/long-blog-post",source:"@site/blog/2019-05-29-long-blog-post.md",title:"Long Blog Post",description:"This is the summary of a very long blog post,",date:"2019-05-29T00:00:00.000Z",formattedDate:"May 29, 2019",tags:[{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:2.05,hasTruncateMarker:!0,authors:[{name:"Endilie Yacop Sucipto",title:"Maintainer of Docusaurus",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png",key:"endi"}],frontMatter:{slug:"long-blog-post",title:"Long Blog Post",authors:"endi",tags:["hello","docusaurus"]},prevItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"},nextItem:{title:"First Blog Post",permalink:"/blog/first-blog-post"}},u={authorsImageUrls:[void 0]},m=[],a={toc:m},c="wrapper";function p(e){let{components:t,...i}=e;return(0,s.kt)(c,(0,o.Z)({},a,i,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("p",null,"This is the summary of a very long blog post,"),(0,s.kt)("p",null,"Use a ",(0,s.kt)("inlineCode",{parentName:"p"},"\x3c!--")," ",(0,s.kt)("inlineCode",{parentName:"p"},"truncate")," ",(0,s.kt)("inlineCode",{parentName:"p"},"--\x3e")," comment to limit blog post size in the list view."),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/73664a40.c26c9299.js b/assets/js/73664a40.c26c9299.js new file mode 100644 index 000000000..77748a34f --- /dev/null +++ b/assets/js/73664a40.c26c9299.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3514],{1985:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>m,contentTitle:()=>u,default:()=>a,frontMatter:()=>n,metadata:()=>r,toc:()=>l});var t=i(5893),o=i(1151);const n={slug:"long-blog-post",title:"Long Blog Post",authors:"endi",tags:["hello","docusaurus"]},u=void 0,r={permalink:"/blog/long-blog-post",source:"@site/blog/2019-05-29-long-blog-post.md",title:"Long Blog Post",description:"This is the summary of a very long blog post,",date:"2019-05-29T00:00:00.000Z",formattedDate:"May 29, 2019",tags:[{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:2.05,hasTruncateMarker:!0,authors:[{name:"Endilie Yacop Sucipto",title:"Maintainer of Docusaurus",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png",key:"endi"}],frontMatter:{slug:"long-blog-post",title:"Long Blog Post",authors:"endi",tags:["hello","docusaurus"]},unlisted:!1,prevItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"},nextItem:{title:"First Blog Post",permalink:"/blog/first-blog-post"}},m={authorsImageUrls:[void 0]},l=[];function c(e){const s={code:"code",p:"p",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.p,{children:"This is the summary of a very long blog post,"}),"\n",(0,t.jsxs)(s.p,{children:["Use a ",(0,t.jsx)(s.code,{children:"\x3c!--"})," ",(0,t.jsx)(s.code,{children:"truncate"})," ",(0,t.jsx)(s.code,{children:"--\x3e"})," comment to limit blog post size in the list view."]}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"})]})}function a(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},1151:(e,s,i)=>{i.d(s,{Z:()=>r,a:()=>u});var t=i(7294);const o={},n=t.createContext(o);function u(e){const s=t.useContext(n);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:u(e.components),t.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/747b92bf.93f2077a.js b/assets/js/747b92bf.93f2077a.js new file mode 100644 index 000000000..fc259b34f --- /dev/null +++ b/assets/js/747b92bf.93f2077a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4743],{2164:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>u,contentTitle:()=>a,default:()=>l,frontMatter:()=>s,metadata:()=>i,toc:()=>d});var t=n(5893),r=n(1151);const s={},a="Connect your dappnode to the router and power",i={id:"user/getting-started/connect-dappnode-to-the-router",title:"Connect your dappnode to the router and power",description:"Dappnode offers a seamless plug-and-play experience. For optimal performance and to ensure smooth operation, please connect your Dappnode to your router and enable UPnP settings within the router.",source:"@site/docs/user/getting-started/connect-dappnode-to-the-router.md",sourceDirName:"user/getting-started",slug:"/user/getting-started/connect-dappnode-to-the-router",permalink:"/docs/user/getting-started/connect-dappnode-to-the-router",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/getting-started/connect-dappnode-to-the-router.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Choose your path",permalink:"/docs/user/getting-started/choose-your-path"},next:{title:"Access Dappnode via Wi-Fi",permalink:"/docs/user/getting-started/access-dappnode-via-wifi"}},u={},d=[{value:"Enable UPnP in your router",id:"enable-upnp-in-your-router",level:2},{value:"Troubleshooting",id:"troubleshooting",level:3}];function p(e){const o={code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",...(0,r.a)(),...e.components},{Details:s}=o;return s||function(e,o){throw new Error("Expected "+(o?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h1,{id:"connect-your-dappnode-to-the-router-and-power",children:"Connect your dappnode to the router and power"}),"\n",(0,t.jsx)(o.p,{children:"Dappnode offers a seamless plug-and-play experience. For optimal performance and to ensure smooth operation, please connect your Dappnode to your router and enable UPnP settings within the router."}),"\n",(0,t.jsx)(o.p,{children:(0,t.jsx)(o.img,{alt:"Connect to router",src:n(2647).Z+"",width:"200",height:"100"})}),"\n",(0,t.jsx)(o.p,{children:"Make sure you also connect your Dappnode to a power outlet and you are ready to turn it on."}),"\n",(0,t.jsx)(o.h2,{id:"enable-upnp-in-your-router",children:"Enable UPnP in your router"}),"\n",(0,t.jsx)(o.p,{children:"Enabling UPnP (Universal Plug and Play) on a router allows devices on your network to set up port forwarding rules for themselves automatically. This simplifies device communication and functions, especially for applications that require open ports, like some games and peer-to-peer programs."}),"\n",(0,t.jsx)(o.p,{children:"Here are basic instructions to enable UPnP on most routers:"}),"\n",(0,t.jsxs)(o.ol,{children:["\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:"Log into Your Router"}),": Open a web browser on a computer connected to your network.\nEnter your router's IP address in the address bar. Common addresses include 192.168.1.1, 192.168.0.1, or 10.0.0.1. If you're unsure of your router's IP, you can check your device's network settings or consult the router's manual.\nYou'll be prompted for a username and password. If you haven't changed them, the default details are usually admin/admin, admin/password, or some similar combination. Refer to your router's documentation if you're unsure."]}),"\n"]}),"\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:"Navigate to the UPnP Section"}),': Once logged in, look for a section labeled "UPnP", often found under "Advanced Settings", "WAN", "NAT", or similar categories. The exact path can vary based on the router manufacturer and model.']}),"\n"]}),"\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:"Enable UPnP"}),': There should be an option to enable or disable UPnP. Make sure it\'s set to "Enable" or "On".\nSave or apply the changes.']}),"\n"]}),"\n"]}),"\n",(0,t.jsx)("hr",{}),"\n",(0,t.jsx)(o.h3,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"How can I verify that the ports were successfully opened by UPnP? "})}),(0,t.jsxs)(o.p,{children:["Access your dappnode ",(0,t.jsx)("a",{href:"http://my.dappnode/support/ports",children:"support > ports"})," view and execute an API scan of the ports."]}),(0,t.jsx)(o.p,{children:"An alternative is to manually check if the ports have been opened successfully, follow these steps:"}),(0,t.jsxs)(o.ol,{children:["\n",(0,t.jsx)(o.li,{children:'Use an online port checker tool, like "YouGetSignal" or "Canyouseeme."'}),"\n",(0,t.jsx)(o.li,{children:"Enter your external IP address and the port number you want to check."}),"\n",(0,t.jsx)(o.li,{children:'Click "Check." If the port is open and accessible from the outside, the tool will confirm it.'}),"\n"]}),(0,t.jsxs)(o.p,{children:["Alternatively, you can use tools like ",(0,t.jsx)(o.code,{children:"nmap"})," to scan your own ports from a different network."]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"Why can't I connect my DappNode to the router via Wi-Fi?"})}),(0,t.jsx)(o.p,{children:"Currently, Dappnode doesn't support Wi-Fi connections to a router. Ensure your Dappnode is connected directly to the router using an ethernet cable."})]})]})}function l(e={}){const{wrapper:o}={...(0,r.a)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},2647:(e,o,n)=>{n.d(o,{Z:()=>t});const t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAYAAADDhn8LAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABqnSURBVHgB7Z0LXFzVmcC/79w7wwwQoHmQqNGkNlqrboylSYAEmCQwSBsfqcbtWrVat3a7ff1Wf13brlujfezWx7arfah1bWu7/tpSW83WEEhQkhAIGqyvpE1NNJoY81QIAeZx7/n2O3dmeIUAMzDDgOf/Y2bu49wH957vnO9xHgAajUaj0SQCDtxQULAy0+MJTJcGTIM4sKUhe06KFgG4wAI6Al1Hj7a2toZBo5mAmH1XqqqqMto7w49LMEoRKJNg5BiC+iQ3eFkKN0A7ZE17lDf8O38s0GgmGEbflfzTz/465+ybeTELIsKT6McV/eXz0Mdmzzln1/439+wAjWaCIWILRUWrvQR4OaiMTfQjQriMf8tJwmUI2DSSk3Ed8jMJVAkkypHkSoHYwAqXB0hWgUYzAelRsUzzYLYN3rlKT5Igf9qyqX6n2l5YesknieSFJ1srJ8OCVOoRoVsaGjacUOtLyvzn8o8PNJoJiuhdzB48BcmlnPNzYCQgfThouX2xVUnQCRrNBKaPgJwYPAXCWRAX5I0tGUAu0GgmMGK4BKxZTYEEsYc9u0aT3gyfhRHk4JuhDYY7lCgEGs0Exhw+CYkB8cRjvNZJQIcEoGDpKTjlkWp3PMEUjSbNSEQJUi5fF6ngOUAOIur4hmbSEreAoOOcQg/XHhcjVxEcJzkCGs0kZQQq1kksZOWpgYOCSAIDLCGrtBalmazELSAsDKfz12KuSo6zcKjAYgZoNJOURGoQpWedzt+n65pDM9nRkQqNZgi0gGg0Q6AFRKMZgrhtEHbzvsOm+gsgjDYpYS4CXczrmaDRTELirkGIvVf86ZKW9Rqg7OYtusWuZtISvxeL4MP83c4R9BwiWsB1ynTQaCYpibl5ARcR4lFWr7RwaCYl5/t82XnS/WCCAqJsES0cmsnJ4sUrZgppPMFxviXai6XR9KGgoCBTZIjHeHEJf9oSrkEmAuXl5bldXTIvti6lHEHP+vGFKKe7pWXtIdCMC67sqd9mT5Sfbe3jZIhVk1pAuoJ4L5nmTaDGoQASCGbaCwhA4K/89RHQpJyi0spruIS6hRctNIybmhtqNk1qAQHED/D3cZaOpxAwrZuOIdEcvl8fS7AHNCnHx0Z5UNKP1TJnlJ+wcDyhFie1gEhVEgB0iHDuPzU3V3dDGlPoq7gBpR4iabwISPdtnFfy2Pl01AXBewEifWEntZHOpbJ2QmiG5UL2WrGGcYOzgnjX8uXL347tm+QqllMKyIyMI3rw7FHA6ofZHnblZ9hht1qXbokC3B4pbffAtKY00RKChBVsV+vvGTnHdm1d2wFpTJbLuJIrjNkE9HZepvnLNWvW9AxUkqiAnIh+ZsCA8X01E5/58+dnZeXNepiIVL8fCNhgZhh4MRpuNWZzzws3xMkVtKqzDVUuuSOyMxUCBwtLKv4a3f1LYRu7mprWNw9yWeVASbmduHr1amP/4fYvqCtzLVJds25dB9ciPfsTaax4ggx5lRT0IoZd9yHIT4NmUpGbe9oFFtCliDjcmGhqxP5jnCu6OV+ElE1LCNM4s6mROGO5bBafZ1Z02UemtIpK/S2881tNm+ue6XOucXGi7Dv03rkI4oNqWbhgHQtHv/uIW0AkYADR8+oxt92WT9BCFmgBmWSQaSDYzmwVxzm3PICEa8nAwwPTGWFLWp7MoNEdIMtr22pbpu32BrDX+SNCaKBbLrMl/R1nvU+w2HyINy/h8z5RXOp/jmNT/7GtcWMDjBcSZrIl7tSMFSXF9Vvr6/rtTqAGoelghe6absFmisz7MWlgVeBZLu18kERIYsW2xtqNkMbYaMdK0XfPnJl7R3V1tQ2jY0/096vFZSsWkjTvZg9KCV/Ej0L4i0r8LxPgj0zq/H1jY6MakDB1tYkQq6JL/WyPGInaIJ/lKvKzoIkbNCkbRsG8efMy8vPPzrVtD0ppofTYjiojAkZCmUpkdZmyM5PtapMsd9AxKtCSeZxhVWYxXz/w3hn8uw/GKNM2bap/nn+WFZb5q1jn/1c+7UJen88F78M2Zt5eXFL+HbDFU01NdUcg2YKyZo0QzzRfTI4BInYNlmRye7HSELTlqJwaM06bU8V6/iPC7DYiJrLjqkP0hhPLTNKVIbzhoDIn3MT2NarzoRp0XAUsc10Gbigs9f+ZpfD+9qP7t+/cuTOu4WSVByxouS5lcetsatrQo79s21RXwz81xT7/hXz7X2WHwFW8fhaheJhz5bf4mr/gm3v8kuVLdw1Wso+WgoICV2Z9S56F5IwMiiS3DpZOxwlSDJrm6AKWhpjJ39P4THmRjwpuQW7vetwfb+w8LGtslJMyzGPR/BNswObw+f+elzfkTTvjIZ/vhrgi/QHLXAoC/8DFwvq5c30eVXMUlparpjROzdfUULfjcKb4EoTxQyyZ9/DG13nzbP69na/9cm190xNLyipLYIzJz8/3WoKW8qLqDXvADtq7IvdE/Zoj6RpkgkFCSJSOUrAPwbgcIAzkhgBI6YUE4KBFmO0A9rWYHnUuQ1KQz+vnK6hocpsMyuWYgR/llD/k7HNDwD7gLSoqurG5uTkuQWfbDs+Y613AamE1oti7uKqqWHRZldKUm1tqag7tBuBaDL6+ZEnFDy1DlJtA/8L/4wK+5hWSZEVxaUW9RfTwc1s2Pg1jwJvZ2YHczvbPRG+uvqWlPtpAtH9zPS0gKUYSDakusKoxtKoklYqG6jXazZtr/gxJoNBXUYCRhs/o9YaPNDQ0/HbRihUbzZChhORaNLNV4PU6iBMCezafMosX5hmd8nOsyn1fhA01tvOC4hL/lRaZL29tXPc3Xn+sqGh1Nbjar+GH8Tn+by/i38sMxMtY9VrHT/BbLY11rTAKphxqmwORKQeBbHjsVOne1yqW0kPVtNesJ3tUPwBIAdIwhvQIcUE76P6C8vJcdb+C0A2po6c4fa6+/ljTlrrr2FX7EiFeyxn6UxAnXPEFo7/sJ5PqeSt7LKewtOpqVmyqBdrfKC31f7CwxP8TSxw9u3lz3aMeEVrKtWYV30k1p+3gG/q4QPjDIl/Fx2AUsLF1dfQffNFjBrcPlobzRd77VkBUBNWdPe1xV1bw+aB0N7uypzVxSVUAScYgGrLJfdR71A9Waaa6wrjenTWtnjPX1yB1yHA43E9ghQmf5+d0lCuY7y0s9Z8JcZAB6Mwpw7E49Qx6nwPaZbFF9gB8hv0EXzCF+T+LSvyXB2zXBrJkx+z83H9g4bxZZWg16xkXM7+P2jJxo+6ba6SvqmWusNdyDTnoXDcB6b71fatiKd9+UVnFQn7Zc9S6Ez9NUm8RNVQSSWpWg32DFY57NHzbyJxuEBZGzxWBBe1jS1ec7RJGPYwRnFn2btuyYVmfTUY47OlXY5kU2hVE1/2cx+9yIagYwv0wQmxhhCIBSLSFQDWbsrNdgOClAeUC4kwD6Eu84GOt9Kq3D7VfQQK+wDb0t0GFGJBdwwQ1BcXLV7Q2PbNnhLcgliy75Bzbkr/l41Uzqf3CAw+dKjE/60WJCohqW/MCf66BCcsarj1Vk6Dkx6T4Ch9gT85iXpSWwHuGSstO1pNqEC5RY+9pE2eQJ1maf6CK4e1bSvYuLmu6GSxyJdrfhQ10CRRGEkauSbh3wG7bNSsr6tYtYNdvq9VlGIZJrsfAtv+NBer68vLyX27cuLF9RNeywqbTzondyQLIFftHT2V38VbDaRaFwkPK20SqGQtdwvf8j7yvlh/WHLdpbi8q9ferASjiinqVF/dwORIS/NhZLeT3TSulLWfzOdlrR22c8IZpXu+gDSl9vivygnbXhYkISBebide2PFvXWuyrVCXjrZDGqBhBR0dHb93AwaH5TU3evEDj2WHVyTA1sGcIHuGi8gTnwjeGTkrWwC0CsSd2QoZsixrQbExvOwtsqo1akgkJiCq5URjKLcYOLVQF3wX9Ehw7Fl1odVpEK1tEbS0srWhkoVzR1gln8/qInAVSYmaspSMpZ0Vvo8Ah7129Jf4LOIkQ3E2b1j/Pxvr9vO0OiLinXdGzZEWSODjtq1TTKuqpd53fbt74JhLd3LRlw6lqXwzIri/y7Z2eiIBIEQhFBouTapTFCQYHnTyl/vww+9ghdWTwS7pJuXFOWKYyCBtgDDh+eMqB3OltX+ZzT+fyMQiJIB2fGCkRZF3/byM+juA3fOAK0xAqRpEUb9opGBhoPSglfNkQ9ttc4ZzPmdrNtUUG1zBu/q+WIsgLSBUwRHtYItexk/ytIwdx7e7dtad8XvP9/kwM0udUPZSIgGSBy3130dKKt1g2PwkTECltNERKW+l3c0n9FmfGkG0MP/npUBDXehgtcHPyO07nTHAfr2bAKGLNTlTF6bUvlID8sc8udLlcxiluZLdTAwiYCuODk3fZq/dA85ba30e3DWxGfzckQHYQr2YBm9NzkThR9dSlkDLtZHQo7aO7+2y+2V63uRBG8g2PvpCazxSPcXXfzorFMEO14pBZXShdOqqyeyDQxh64O7mgS3gSIz6fy1aNupRrieDoiI8zzCBrSTarKql0O/fAL/Sj6tcGeQBGjbJHI81ZFi1aMY3Vv69Er/HopPdiKRskN3f/+HbqQsxm23sRG4y2NOi+YVIP0/uxV346pXuKS7AeTokLiLKPRcwWQNrL3z8ayXE24j5B0M4HL4TxgHD62I3DEREOn+/js4K29RtQEXyCt1j6//N96eZNvYpFb3M+/CMXSR1GwBhSxYrnlWeJUEe37fq+ITg6IRPUsYSAWA3CAtw28G66vd7BT2yEwigNi/+vmZBC+D4j94Mwpt2oi4pWnhG0g7/mC5Q5nQIRvlu1fMmeSS8gyql4+Ehev5ecahUL1byOQlzJWdAmt1QtWveeOi2N+N4C4MkTgj4TGX4j8ZivED3tgvfyzw/73A2Zx48Pfj8h10xCp/3XC5BCKDYQB3KogaCY731Uur7qPqBaSPM/dCcLx3znGgB3ZojQo6oV8fujBjmHP7t7V6V0cQ0SVs2bL+LPqPpnjARSRrqUb6icZiF1D50WT3rhrO+HpB0tOCnaVFGl7cZ30S1fU27OYdtwjQAEHLEDAcmayv7hKTSEsA9xIWWU2bGygB0YJg4ZpVXmkVIj+6XZ7+whWnX+6tX/u7O6OgxxVMBFRUVeMKdU8im/zKvLI7eF7/BN3V61vPgXsSb27wsbxOru7vdktzc+rZpUL+VI+l5+9kkXEH6L7fz0W5R73W2Zx4dKyi/ppDiIZYUNEQ2FqKa8qqUG/1+G10tTgxLejhyWuELOtgQH6lUbL5kitz05DbJiZQEOUij0T00ufk8ZfVOpAiG6emnuoeNri0v9jXyid3mz0zSGI58cLZIRC0s5eW3eK8jDR53LR1dyQeTlpzi7z0U2khW+YVtT/QHs8yx1a95UgDiHX+ZtapFVrG3Q2wV1EE6OpEvT5PI29s7Y3oiEvth0kDa/8CL2a2XgKGoQ5Tnmw1Ur4b+wqTqiPMHR7GudYxG2QpJhlTjMmTnYz8wiOtgrVyrDQyVEI4mR+4oFCCnyRCOLsa9INzMnSgq/ChHeD11HX9m+fbuFox20YbLAVaiofTbp7zbGbi4ln1DR46C034RRodTiSCYQbKSjdG8j1SMEwUrkbBxH4DqJdU5SPTaA4yANfJ4KZ5/KQjk5OQN7EGLBypVe6AgVcoI2DIrXIG5QIjp1SGydhtKOSFUEKEKRqCbSohWrpolw1yejquYbvPEp/s3nlPNUG65Tn8gRlS38OcAn/PO2LbW/63dXg1RkiU6gc4RLrV1844UwQYVsx44dJhczb0L/ensOJId5/DJvU/k6Qxibef0vp05KJ3VpZUOUY/C2KgsvYMf/p2OqeLdhZPCeT3DmzmMBTNCrQ45do764Nnpu4N7uXvXUKYN9Pp8RaO86D9DkCDU9sm3b+r0wSoZrJ8r5WiVxXNm8+JoR7lrDz0JJ8QlJ4oqWLeuT1ioikczdzi/sMhd0vxpE9zf5v/sGTECqq6tVRizruy0Vo5oIjL8/h7ClIzSoprtDWNqzvasrjK4pV7Oge8kgFyQA+9XYE6YUOGGBSf1UP9UEKhwOq/MGCgoKzNbW1vCMGTNo/6H2B1TzW1brfwVjAKmwymA7ULDdRmVsIr1FLlFnWHIbC4tqhft9ZzfSHS2b178CSST+YX+4nAl3dR7a+tzmE4VlFW1Dex80Y0FzQ+2epUtXfJhcrAlJup5VtW+q7bNnz25nQX8GkkZv3xUlHOp33zvtX2TtoZgr3see31y3GcYAdmEdi+lbSPaLbE2/ztXmd5o31f6i0HfJg1bHkbfd+IHz+Hbm8XW/Erk1uCc367wfA2xIqss+bgHhajjPyPD8pKi0ci/LyuWpbbMRP0q5zTx8eMxHxRgFQz5zVngGGzWEGhvrnYaES8r8R2PPfAzGqxoGpI6srJ5nt7i4ws8eoe9xJmizDKHaOfWYviM6m2l4IOJkUi6onNiR7HT/aQjsM6VlP81epCcXlfpfsl32u2wn4vr6ljNcWdPu5ysVkzNYhXP00yEj4+6amgcSa6AZB4nZDwiXRJu4pT3K5Z6fny937twJEwEuIYd86azZBFLXU5p1t3bTUF1PQ+BaSRJZtaJuU+KNzZtrd8R5Moh5ZjnftLETtp4EzWaNZG1Dw7qD0GecNbvTfchNgZLaZ5qu4edxPUQPYv7K1tIDZ5yW90hURU462s2bYizbDgy1n4Yb1AEjY0PzUh7bTD+HJIA2zI1ozihMt3V10HarIUOv4E8nb7u+sbHuT5AAKI1XwZB/4vO/6i8vquEaot8IJUVFlVPBsK8AEbyJC4Hi6Gal2u1jG+lr2W6rfuPGDcchhZMhaQFJMaxCBWAUcAAsGhFhzxXCDZBcTmN/7M8gohI9SwK+pjrKxXMCtI2XUdA6PjZUvnzh3paWlquys7OtvoPBLeAaymO7r+N/7hYWjLk9xyI8yc6AezJE6LmGhoaoGzu1Nq8WkL4IPJhsvVGoLq5DMFzXWUTxCqtZj6nuqACJxT6GhWAmZ85yUM29UDwuyb63ZdOGBOId7GBorn2XPWBXXHrppXZUKHpUyIXFFQsMA29zZtZCiI0A38EP4Of8oH4QYuM85hwYL7SA9MGDoRsD6Emq21r14RgywTACurVhfSOrYVvvvPNOTMaQnIrS5VXLw5ZdyrfyXk6GvKWutq6rN160mgXTcQ6M2EBXmZw/PeuLllVeZFh0O0SEMDYL8QEW/vtCdvjJ7Vs2vjGapjNjiRaQPnA1rtSfvTCOqD4jw6WJNodIWgbi2kn1oVfC53ov4PQY7FItDyIC2eM5i+v6aozeMLgWkC2+wrGX6yDaz5y/XrJJ/rpl88Z7exJj+oQOtICkGzj+zkErMv2B+uRxBnmosLSyvRZBFpb66yAU2jQwvTHFFUIOub9rmuEpXq+wTsgsVzjY24nLZa4KSjVsEV4dbVXSwTLwgkS4b9umuv/rfzbl6XIkJC1c85NbQJzWakQq+gsThMGG/Uk5luxga0k1y1cDWVf1dDhUwzy5T24IQEE4IUXm4VwJIThhu9xqaj63O+cUZ99LUt7avHXjHwbfndzaMV5GIyDqASY0YHIqYXVE7NjhGLRJDqqNDVx+jvtol02bNrxavKyyDGzMYYfAR/khFkZujgx+nspumNU3PUX61ES6DQzUjhDaOcuvl2rYHhL/5TUCbzVsbhjVwBWpJBEBCfIrvJ31yGZ+WHdBtLNJukJOoPCInCBxQjV19bjXIFEbJzbxpprw5kG1oAJ9i5Z9YqYB0sM1ncmfnqkQbFv17bMMFCLMNQRCWISli2xEI9y8afQNGseL+JuaAHZ0heixl5s2HC4uu+QJfp9pKyCqJTe/xJyAdN/O+jOkM2yaXwSREWvTTR3suZ+o4ByE9xGJzFGYl2Xg54tLKl/mkmJVOrdVjDTjdiaYuQPSnZ7niCdAkzYkomKZnPPuokiQKq2NfMNt3m7Z9sMwQWBjOCMcNhIKyGmSw2gyeNp7wBrrnb7nr8MEQen4mCYBMk0Ek3XzNWohRJAlIDL471jDJeOC2HUGIhD35GaK39XU1CS96XK6o4Uj/TBj+nlyg5e4ANVodYPApWagrVOqaK2aZ0JnEE1aIdRQ8M5w8ABjMMbpKemKXeekD4CHgL5b6PPNAY0mzTCbN9XOVQsLF/pmubzul7kInyHVOF5jCNcSv9u2ue7GgdsXLVo1zfB0NvPFziHLnAvj3A5KoxlIT9TW4/GmPNJs228d57iKCkSpSYc+CBpNmjFoswYhrJTYAq2trZaIju1qGFAEGk2a0UdAeuNT/VUsTLjpAwENp6pR2A6t54RdkmjeypUrUzIVs0YzUoavQcgZ8TsxaPixmoSL2vku1CSCy460d88FjSaN6CMgJ43hHBmBAsU+9s+POEZhgHyp5wQjmPT+rBkz3uF0LzorJJI+T7lGEw890fBZs7Lb9x9u28sSMUOg+Oei0opXpKQQ2OQl4YwsMZJZjHbbwrVsSUlFqVqRgFcOd4Aa22lJWWUTEVRyLOZC0GjSiB4BUeMMLSnzV7PVMJ8Iv6i2JTA3yTwWiwdl/6hj0JBQPcQxasILNXuHGn6yCqKjoGs06UC/9lRWwHhIZMg5rBt9amBCZ4pHcIaVH3wYVTq5mQRvaufE/71164Z1cGooQxjPBKV1hAOHUwsKfNNbWxtGPJmkRpNM+glIS0vN8Xnz5t06c+aHfio8aFgYMdZdIbBY3YqMGenKdFkifPIEf2GzW/WVMSzLsWuIJNqWp7OqavGBpk11Q46AMWNG1pH9h47v4yQfEVnifN40JmO+ajSThuKSikeLSvzBwlL/j0GjSRPGvf9zDCnoFfabubmeObd3di2NZnxJGwERwlD9NiwWkvMWL148FTSaNCBtBKTp2dqnuPbYBWqoGfcHZoNGkwakjYA4CDzCulWugXYJaDRpQFoJCAtHU+QXF4NGkwaY4PONT9/yhgabr21ARweq9iXt7flCSqtTzTRKiGeCRpMGmEWUsRvGg1K/auyLkB1pwTI9yxa8nuusUKQm0WjGGzOJUx8PT5+57zH6xfXH827DmDBD9WgmNyYgfhvSAGfIG9a0bJf3Vw31aw+DRqPRaDQajUajmYz8P5+EKwLJLbE5AAAAAElFTkSuQmCC"},1151:(e,o,n)=>{n.d(o,{Z:()=>i,a:()=>a});var t=n(7294);const r={},s=t.createContext(r);function a(e){const o=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),t.createElement(s.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/747b92bf.bf5aff42.js b/assets/js/747b92bf.bf5aff42.js deleted file mode 100644 index 7ca33360d..000000000 --- a/assets/js/747b92bf.bf5aff42.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4743],{4137:(e,t,r)=>{r.d(t,{Zo:()=>i,kt:()=>y});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function p(e){for(var t=1;t =0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=o.createContext({}),l=function(e){var t=o.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):p(p({},t),e)),r},i=function(e){var t=l(e.components);return o.createElement(s.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,s=e.parentName,i=u(e,["components","mdxType","originalType","parentName"]),d=l(r),h=n,y=d["".concat(s,".").concat(h)]||d[h]||c[h]||a;return r?o.createElement(y,p(p({ref:t},i),{},{components:r})):o.createElement(y,p({ref:t},i))}));function y(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,p=new Array(a);p[0]=h;var u={};for(var s in t)hasOwnProperty.call(t,s)&&(u[s]=t[s]);u.originalType=e,u[d]="string"==typeof e?e:n,p[1]=u;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>p,default:()=>c,frontMatter:()=>a,metadata:()=>u,toc:()=>l});var o=r(7462),n=(r(7294),r(4137));const a={},p="Connect your dappnode to the router and power",u={unversionedId:"user/getting-started/connect-dappnode-to-the-router",id:"user/getting-started/connect-dappnode-to-the-router",title:"Connect your dappnode to the router and power",description:"Dappnode offers a seamless plug-and-play experience. For optimal performance and to ensure smooth operation, please connect your Dappnode to your router and enable UPnP settings within the router.",source:"@site/docs/user/getting-started/connect-dappnode-to-the-router.md",sourceDirName:"user/getting-started",slug:"/user/getting-started/connect-dappnode-to-the-router",permalink:"/docs/user/getting-started/connect-dappnode-to-the-router",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/getting-started/connect-dappnode-to-the-router.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Choose your path",permalink:"/docs/user/getting-started/choose-your-path"},next:{title:"Access Dappnode via Wi-Fi",permalink:"/docs/user/getting-started/access-dappnode-via-wifi"}},s={},l=[{value:"Enable UPnP in your router",id:"enable-upnp-in-your-router",level:2},{value:"Troubleshooting",id:"troubleshooting",level:3}],i={toc:l},d="wrapper";function c(e){let{components:t,...a}=e;return(0,n.kt)(d,(0,o.Z)({},i,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"connect-your-dappnode-to-the-router-and-power"},"Connect your dappnode to the router and power"),(0,n.kt)("p",null,"Dappnode offers a seamless plug-and-play experience. For optimal performance and to ensure smooth operation, please connect your Dappnode to your router and enable UPnP settings within the router."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Connect to router",src:r(2647).Z,width:"200",height:"100"})),(0,n.kt)("p",null,"Make sure you also connect your Dappnode to a power outlet and you are ready to turn it on."),(0,n.kt)("h2",{id:"enable-upnp-in-your-router"},"Enable UPnP in your router"),(0,n.kt)("p",null,"Enabling UPnP (Universal Plug and Play) on a router allows devices on your network to set up port forwarding rules for themselves automatically. This simplifies device communication and functions, especially for applications that require open ports, like some games and peer-to-peer programs."),(0,n.kt)("p",null,"Here are basic instructions to enable UPnP on most routers:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"Log into Your Router"),": Open a web browser on a computer connected to your network.\nEnter your router's IP address in the address bar. Common addresses include 192.168.1.1, 192.168.0.1, or 10.0.0.1. If you're unsure of your router's IP, you can check your device's network settings or consult the router's manual.\nYou'll be prompted for a username and password. If you haven't changed them, the default details are usually admin/admin, admin/password, or some similar combination. Refer to your router's documentation if you're unsure.")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"Navigate to the UPnP Section"),': Once logged in, look for a section labeled "UPnP", often found under "Advanced Settings", "WAN", "NAT", or similar categories. The exact path can vary based on the router manufacturer and model.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"Enable UPnP"),': There should be an option to enable or disable UPnP. Make sure it\'s set to "Enable" or "On".\nSave or apply the changes.'))),(0,n.kt)("hr",null),(0,n.kt)("h3",{id:"troubleshooting"},"Troubleshooting"),(0,n.kt)("details",null,(0,n.kt)("summary",null,(0,n.kt)("b",null,"How can I verify that the ports were successfully opened by UPnP? ")),(0,n.kt)("p",null,"Access your dappnode ",(0,n.kt)("a",{href:"http://my.dappnode/support/ports"},"support > ports")," view and execute an API scan of the ports."),(0,n.kt)("p",null,"An alternative is to manually check if the ports have been opened successfully, follow these steps:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},'Use an online port checker tool, like "YouGetSignal" or "Canyouseeme."'),(0,n.kt)("li",{parentName:"ol"},"Enter your external IP address and the port number you want to check."),(0,n.kt)("li",{parentName:"ol"},'Click "Check." If the port is open and accessible from the outside, the tool will confirm it.')),(0,n.kt)("p",null,"Alternatively, you can use tools like ",(0,n.kt)("inlineCode",{parentName:"p"},"nmap")," to scan your own ports from a different network.")),(0,n.kt)("details",null,(0,n.kt)("summary",null,(0,n.kt)("b",null,"Why can't I connect my DappNode to the router via Wi-Fi?")),"Currently, Dappnode doesn't support Wi-Fi connections to a router. Ensure your Dappnode is connected directly to the router using an ethernet cable."))}c.isMDXComponent=!0},2647:(e,t,r)=>{r.d(t,{Z:()=>o});const o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAYAAADDhn8LAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABqnSURBVHgB7Z0LXFzVmcC/79w7wwwQoHmQqNGkNlqrboylSYAEmCQwSBsfqcbtWrVat3a7ff1Wf13brlujfezWx7arfah1bWu7/tpSW83WEEhQkhAIGqyvpE1NNJoY81QIAeZx7/n2O3dmeIUAMzDDgOf/Y2bu49wH957vnO9xHgAajUaj0SQCDtxQULAy0+MJTJcGTIM4sKUhe06KFgG4wAI6Al1Hj7a2toZBo5mAmH1XqqqqMto7w49LMEoRKJNg5BiC+iQ3eFkKN0A7ZE17lDf8O38s0GgmGEbflfzTz/465+ybeTELIsKT6McV/eXz0Mdmzzln1/439+wAjWaCIWILRUWrvQR4OaiMTfQjQriMf8tJwmUI2DSSk3Ed8jMJVAkkypHkSoHYwAqXB0hWgUYzAelRsUzzYLYN3rlKT5Igf9qyqX6n2l5YesknieSFJ1srJ8OCVOoRoVsaGjacUOtLyvzn8o8PNJoJiuhdzB48BcmlnPNzYCQgfThouX2xVUnQCRrNBKaPgJwYPAXCWRAX5I0tGUAu0GgmMGK4BKxZTYEEsYc9u0aT3gyfhRHk4JuhDYY7lCgEGs0Exhw+CYkB8cRjvNZJQIcEoGDpKTjlkWp3PMEUjSbNSEQJUi5fF6ngOUAOIur4hmbSEreAoOOcQg/XHhcjVxEcJzkCGs0kZQQq1kksZOWpgYOCSAIDLCGrtBalmazELSAsDKfz12KuSo6zcKjAYgZoNJOURGoQpWedzt+n65pDM9nRkQqNZgi0gGg0Q6AFRKMZgrhtEHbzvsOm+gsgjDYpYS4CXczrmaDRTELirkGIvVf86ZKW9Rqg7OYtusWuZtISvxeL4MP83c4R9BwiWsB1ynTQaCYpibl5ARcR4lFWr7RwaCYl5/t82XnS/WCCAqJsES0cmsnJ4sUrZgppPMFxviXai6XR9KGgoCBTZIjHeHEJf9oSrkEmAuXl5bldXTIvti6lHEHP+vGFKKe7pWXtIdCMC67sqd9mT5Sfbe3jZIhVk1pAuoJ4L5nmTaDGoQASCGbaCwhA4K/89RHQpJyi0spruIS6hRctNIybmhtqNk1qAQHED/D3cZaOpxAwrZuOIdEcvl8fS7AHNCnHx0Z5UNKP1TJnlJ+wcDyhFie1gEhVEgB0iHDuPzU3V3dDGlPoq7gBpR4iabwISPdtnFfy2Pl01AXBewEifWEntZHOpbJ2QmiG5UL2WrGGcYOzgnjX8uXL347tm+QqllMKyIyMI3rw7FHA6ofZHnblZ9hht1qXbokC3B4pbffAtKY00RKChBVsV+vvGTnHdm1d2wFpTJbLuJIrjNkE9HZepvnLNWvW9AxUkqiAnIh+ZsCA8X01E5/58+dnZeXNepiIVL8fCNhgZhh4MRpuNWZzzws3xMkVtKqzDVUuuSOyMxUCBwtLKv4a3f1LYRu7mprWNw9yWeVASbmduHr1amP/4fYvqCtzLVJds25dB9ciPfsTaax4ggx5lRT0IoZd9yHIT4NmUpGbe9oFFtCliDjcmGhqxP5jnCu6OV+ElE1LCNM4s6mROGO5bBafZ1Z02UemtIpK/S2881tNm+ue6XOucXGi7Dv03rkI4oNqWbhgHQtHv/uIW0AkYADR8+oxt92WT9BCFmgBmWSQaSDYzmwVxzm3PICEa8nAwwPTGWFLWp7MoNEdIMtr22pbpu32BrDX+SNCaKBbLrMl/R1nvU+w2HyINy/h8z5RXOp/jmNT/7GtcWMDjBcSZrIl7tSMFSXF9Vvr6/rtTqAGoelghe6absFmisz7MWlgVeBZLu18kERIYsW2xtqNkMbYaMdK0XfPnJl7R3V1tQ2jY0/096vFZSsWkjTvZg9KCV/Ej0L4i0r8LxPgj0zq/H1jY6MakDB1tYkQq6JL/WyPGInaIJ/lKvKzoIkbNCkbRsG8efMy8vPPzrVtD0ppofTYjiojAkZCmUpkdZmyM5PtapMsd9AxKtCSeZxhVWYxXz/w3hn8uw/GKNM2bap/nn+WFZb5q1jn/1c+7UJen88F78M2Zt5eXFL+HbDFU01NdUcg2YKyZo0QzzRfTI4BInYNlmRye7HSELTlqJwaM06bU8V6/iPC7DYiJrLjqkP0hhPLTNKVIbzhoDIn3MT2NarzoRp0XAUsc10Gbigs9f+ZpfD+9qP7t+/cuTOu4WSVByxouS5lcetsatrQo79s21RXwz81xT7/hXz7X2WHwFW8fhaheJhz5bf4mr/gm3v8kuVLdw1Wso+WgoICV2Z9S56F5IwMiiS3DpZOxwlSDJrm6AKWhpjJ39P4THmRjwpuQW7vetwfb+w8LGtslJMyzGPR/BNswObw+f+elzfkTTvjIZ/vhrgi/QHLXAoC/8DFwvq5c30eVXMUlparpjROzdfUULfjcKb4EoTxQyyZ9/DG13nzbP69na/9cm190xNLyipLYIzJz8/3WoKW8qLqDXvADtq7IvdE/Zoj6RpkgkFCSJSOUrAPwbgcIAzkhgBI6YUE4KBFmO0A9rWYHnUuQ1KQz+vnK6hocpsMyuWYgR/llD/k7HNDwD7gLSoqurG5uTkuQWfbDs+Y613AamE1oti7uKqqWHRZldKUm1tqag7tBuBaDL6+ZEnFDy1DlJtA/8L/4wK+5hWSZEVxaUW9RfTwc1s2Pg1jwJvZ2YHczvbPRG+uvqWlPtpAtH9zPS0gKUYSDakusKoxtKoklYqG6jXazZtr/gxJoNBXUYCRhs/o9YaPNDQ0/HbRihUbzZChhORaNLNV4PU6iBMCezafMosX5hmd8nOsyn1fhA01tvOC4hL/lRaZL29tXPc3Xn+sqGh1Nbjar+GH8Tn+by/i38sMxMtY9VrHT/BbLY11rTAKphxqmwORKQeBbHjsVOne1yqW0kPVtNesJ3tUPwBIAdIwhvQIcUE76P6C8vJcdb+C0A2po6c4fa6+/ljTlrrr2FX7EiFeyxn6UxAnXPEFo7/sJ5PqeSt7LKewtOpqVmyqBdrfKC31f7CwxP8TSxw9u3lz3aMeEVrKtWYV30k1p+3gG/q4QPjDIl/Fx2AUsLF1dfQffNFjBrcPlobzRd77VkBUBNWdPe1xV1bw+aB0N7uypzVxSVUAScYgGrLJfdR71A9Waaa6wrjenTWtnjPX1yB1yHA43E9ghQmf5+d0lCuY7y0s9Z8JcZAB6Mwpw7E49Qx6nwPaZbFF9gB8hv0EXzCF+T+LSvyXB2zXBrJkx+z83H9g4bxZZWg16xkXM7+P2jJxo+6ba6SvqmWusNdyDTnoXDcB6b71fatiKd9+UVnFQn7Zc9S6Ez9NUm8RNVQSSWpWg32DFY57NHzbyJxuEBZGzxWBBe1jS1ec7RJGPYwRnFn2btuyYVmfTUY47OlXY5kU2hVE1/2cx+9yIagYwv0wQmxhhCIBSLSFQDWbsrNdgOClAeUC4kwD6Eu84GOt9Kq3D7VfQQK+wDb0t0GFGJBdwwQ1BcXLV7Q2PbNnhLcgliy75Bzbkr/l41Uzqf3CAw+dKjE/60WJCohqW/MCf66BCcsarj1Vk6Dkx6T4Ch9gT85iXpSWwHuGSstO1pNqEC5RY+9pE2eQJ1maf6CK4e1bSvYuLmu6GSxyJdrfhQ10CRRGEkauSbh3wG7bNSsr6tYtYNdvq9VlGIZJrsfAtv+NBer68vLyX27cuLF9RNeywqbTzondyQLIFftHT2V38VbDaRaFwkPK20SqGQtdwvf8j7yvlh/WHLdpbi8q9ferASjiinqVF/dwORIS/NhZLeT3TSulLWfzOdlrR22c8IZpXu+gDSl9vivygnbXhYkISBebide2PFvXWuyrVCXjrZDGqBhBR0dHb93AwaH5TU3evEDj2WHVyTA1sGcIHuGi8gTnwjeGTkrWwC0CsSd2QoZsixrQbExvOwtsqo1akgkJiCq5URjKLcYOLVQF3wX9Ehw7Fl1odVpEK1tEbS0srWhkoVzR1gln8/qInAVSYmaspSMpZ0Vvo8Ah7129Jf4LOIkQ3E2b1j/Pxvr9vO0OiLinXdGzZEWSODjtq1TTKuqpd53fbt74JhLd3LRlw6lqXwzIri/y7Z2eiIBIEQhFBouTapTFCQYHnTyl/vww+9ghdWTwS7pJuXFOWKYyCBtgDDh+eMqB3OltX+ZzT+fyMQiJIB2fGCkRZF3/byM+juA3fOAK0xAqRpEUb9opGBhoPSglfNkQ9ttc4ZzPmdrNtUUG1zBu/q+WIsgLSBUwRHtYItexk/ytIwdx7e7dtad8XvP9/kwM0udUPZSIgGSBy3130dKKt1g2PwkTECltNERKW+l3c0n9FmfGkG0MP/npUBDXehgtcHPyO07nTHAfr2bAKGLNTlTF6bUvlID8sc8udLlcxiluZLdTAwiYCuODk3fZq/dA85ba30e3DWxGfzckQHYQr2YBm9NzkThR9dSlkDLtZHQo7aO7+2y+2V63uRBG8g2PvpCazxSPcXXfzorFMEO14pBZXShdOqqyeyDQxh64O7mgS3gSIz6fy1aNupRrieDoiI8zzCBrSTarKql0O/fAL/Sj6tcGeQBGjbJHI81ZFi1aMY3Vv69Er/HopPdiKRskN3f/+HbqQsxm23sRG4y2NOi+YVIP0/uxV346pXuKS7AeTokLiLKPRcwWQNrL3z8ayXE24j5B0M4HL4TxgHD62I3DEREOn+/js4K29RtQEXyCt1j6//N96eZNvYpFb3M+/CMXSR1GwBhSxYrnlWeJUEe37fq+ITg6IRPUsYSAWA3CAtw28G66vd7BT2yEwigNi/+vmZBC+D4j94Mwpt2oi4pWnhG0g7/mC5Q5nQIRvlu1fMmeSS8gyql4+Ehev5ecahUL1byOQlzJWdAmt1QtWveeOi2N+N4C4MkTgj4TGX4j8ZivED3tgvfyzw/73A2Zx48Pfj8h10xCp/3XC5BCKDYQB3KogaCY731Uur7qPqBaSPM/dCcLx3znGgB3ZojQo6oV8fujBjmHP7t7V6V0cQ0SVs2bL+LPqPpnjARSRrqUb6icZiF1D50WT3rhrO+HpB0tOCnaVFGl7cZ30S1fU27OYdtwjQAEHLEDAcmayv7hKTSEsA9xIWWU2bGygB0YJg4ZpVXmkVIj+6XZ7+whWnX+6tX/u7O6OgxxVMBFRUVeMKdU8im/zKvLI7eF7/BN3V61vPgXsSb27wsbxOru7vdktzc+rZpUL+VI+l5+9kkXEH6L7fz0W5R73W2Zx4dKyi/ppDiIZYUNEQ2FqKa8qqUG/1+G10tTgxLejhyWuELOtgQH6lUbL5kitz05DbJiZQEOUij0T00ufk8ZfVOpAiG6emnuoeNri0v9jXyid3mz0zSGI58cLZIRC0s5eW3eK8jDR53LR1dyQeTlpzi7z0U2khW+YVtT/QHs8yx1a95UgDiHX+ZtapFVrG3Q2wV1EE6OpEvT5PI29s7Y3oiEvth0kDa/8CL2a2XgKGoQ5Tnmw1Ur4b+wqTqiPMHR7GudYxG2QpJhlTjMmTnYz8wiOtgrVyrDQyVEI4mR+4oFCCnyRCOLsa9INzMnSgq/ChHeD11HX9m+fbuFox20YbLAVaiofTbp7zbGbi4ln1DR46C034RRodTiSCYQbKSjdG8j1SMEwUrkbBxH4DqJdU5SPTaA4yANfJ4KZ5/KQjk5OQN7EGLBypVe6AgVcoI2DIrXIG5QIjp1SGydhtKOSFUEKEKRqCbSohWrpolw1yejquYbvPEp/s3nlPNUG65Tn8gRlS38OcAn/PO2LbW/63dXg1RkiU6gc4RLrV1844UwQYVsx44dJhczb0L/ensOJId5/DJvU/k6Qxibef0vp05KJ3VpZUOUY/C2KgsvYMf/p2OqeLdhZPCeT3DmzmMBTNCrQ45do764Nnpu4N7uXvXUKYN9Pp8RaO86D9DkCDU9sm3b+r0wSoZrJ8r5WiVxXNm8+JoR7lrDz0JJ8QlJ4oqWLeuT1ioikczdzi/sMhd0vxpE9zf5v/sGTECqq6tVRizruy0Vo5oIjL8/h7ClIzSoprtDWNqzvasrjK4pV7Oge8kgFyQA+9XYE6YUOGGBSf1UP9UEKhwOq/MGCgoKzNbW1vCMGTNo/6H2B1TzW1brfwVjAKmwymA7ULDdRmVsIr1FLlFnWHIbC4tqhft9ZzfSHS2b178CSST+YX+4nAl3dR7a+tzmE4VlFW1Dex80Y0FzQ+2epUtXfJhcrAlJup5VtW+q7bNnz25nQX8GkkZv3xUlHOp33zvtX2TtoZgr3see31y3GcYAdmEdi+lbSPaLbE2/ztXmd5o31f6i0HfJg1bHkbfd+IHz+Hbm8XW/Erk1uCc367wfA2xIqss+bgHhajjPyPD8pKi0ci/LyuWpbbMRP0q5zTx8eMxHxRgFQz5zVngGGzWEGhvrnYaES8r8R2PPfAzGqxoGpI6srJ5nt7i4ws8eoe9xJmizDKHaOfWYviM6m2l4IOJkUi6onNiR7HT/aQjsM6VlP81epCcXlfpfsl32u2wn4vr6ljNcWdPu5ysVkzNYhXP00yEj4+6amgcSa6AZB4nZDwiXRJu4pT3K5Z6fny937twJEwEuIYd86azZBFLXU5p1t3bTUF1PQ+BaSRJZtaJuU+KNzZtrd8R5Moh5ZjnftLETtp4EzWaNZG1Dw7qD0GecNbvTfchNgZLaZ5qu4edxPUQPYv7K1tIDZ5yW90hURU462s2bYizbDgy1n4Yb1AEjY0PzUh7bTD+HJIA2zI1ozihMt3V10HarIUOv4E8nb7u+sbHuT5AAKI1XwZB/4vO/6i8vquEaot8IJUVFlVPBsK8AEbyJC4Hi6Gal2u1jG+lr2W6rfuPGDcchhZMhaQFJMaxCBWAUcAAsGhFhzxXCDZBcTmN/7M8gohI9SwK+pjrKxXMCtI2XUdA6PjZUvnzh3paWlquys7OtvoPBLeAaymO7r+N/7hYWjLk9xyI8yc6AezJE6LmGhoaoGzu1Nq8WkL4IPJhsvVGoLq5DMFzXWUTxCqtZj6nuqACJxT6GhWAmZ85yUM29UDwuyb63ZdOGBOId7GBorn2XPWBXXHrppXZUKHpUyIXFFQsMA29zZtZCiI0A38EP4Of8oH4QYuM85hwYL7SA9MGDoRsD6Emq21r14RgywTACurVhfSOrYVvvvPNOTMaQnIrS5VXLw5ZdyrfyXk6GvKWutq6rN160mgXTcQ6M2EBXmZw/PeuLllVeZFh0O0SEMDYL8QEW/vtCdvjJ7Vs2vjGapjNjiRaQPnA1rtSfvTCOqD4jw6WJNodIWgbi2kn1oVfC53ov4PQY7FItDyIC2eM5i+v6aozeMLgWkC2+wrGX6yDaz5y/XrJJ/rpl88Z7exJj+oQOtICkGzj+zkErMv2B+uRxBnmosLSyvRZBFpb66yAU2jQwvTHFFUIOub9rmuEpXq+wTsgsVzjY24nLZa4KSjVsEV4dbVXSwTLwgkS4b9umuv/rfzbl6XIkJC1c85NbQJzWakQq+gsThMGG/Uk5luxga0k1y1cDWVf1dDhUwzy5T24IQEE4IUXm4VwJIThhu9xqaj63O+cUZ99LUt7avHXjHwbfndzaMV5GIyDqASY0YHIqYXVE7NjhGLRJDqqNDVx+jvtol02bNrxavKyyDGzMYYfAR/khFkZujgx+nspumNU3PUX61ES6DQzUjhDaOcuvl2rYHhL/5TUCbzVsbhjVwBWpJBEBCfIrvJ31yGZ+WHdBtLNJukJOoPCInCBxQjV19bjXIFEbJzbxpprw5kG1oAJ9i5Z9YqYB0sM1ncmfnqkQbFv17bMMFCLMNQRCWISli2xEI9y8afQNGseL+JuaAHZ0heixl5s2HC4uu+QJfp9pKyCqJTe/xJyAdN/O+jOkM2yaXwSREWvTTR3suZ+o4ByE9xGJzFGYl2Xg54tLKl/mkmJVOrdVjDTjdiaYuQPSnZ7niCdAkzYkomKZnPPuokiQKq2NfMNt3m7Z9sMwQWBjOCMcNhIKyGmSw2gyeNp7wBrrnb7nr8MEQen4mCYBMk0Ek3XzNWohRJAlIDL471jDJeOC2HUGIhD35GaK39XU1CS96XK6o4Uj/TBj+nlyg5e4ANVodYPApWagrVOqaK2aZ0JnEE1aIdRQ8M5w8ABjMMbpKemKXeekD4CHgL5b6PPNAY0mzTCbN9XOVQsLF/pmubzul7kInyHVOF5jCNcSv9u2ue7GgdsXLVo1zfB0NvPFziHLnAvj3A5KoxlIT9TW4/GmPNJs228d57iKCkSpSYc+CBpNmjFoswYhrJTYAq2trZaIju1qGFAEGk2a0UdAeuNT/VUsTLjpAwENp6pR2A6t54RdkmjeypUrUzIVs0YzUoavQcgZ8TsxaPixmoSL2vku1CSCy460d88FjSaN6CMgJ43hHBmBAsU+9s+POEZhgHyp5wQjmPT+rBkz3uF0LzorJJI+T7lGEw890fBZs7Lb9x9u28sSMUOg+Oei0opXpKQQ2OQl4YwsMZJZjHbbwrVsSUlFqVqRgFcOd4Aa22lJWWUTEVRyLOZC0GjSiB4BUeMMLSnzV7PVMJ8Iv6i2JTA3yTwWiwdl/6hj0JBQPcQxasILNXuHGn6yCqKjoGs06UC/9lRWwHhIZMg5rBt9amBCZ4pHcIaVH3wYVTq5mQRvaufE/71164Z1cGooQxjPBKV1hAOHUwsKfNNbWxtGPJmkRpNM+glIS0vN8Xnz5t06c+aHfio8aFgYMdZdIbBY3YqMGenKdFkifPIEf2GzW/WVMSzLsWuIJNqWp7OqavGBpk11Q46AMWNG1pH9h47v4yQfEVnifN40JmO+ajSThuKSikeLSvzBwlL/j0GjSRPGvf9zDCnoFfabubmeObd3di2NZnxJGwERwlD9NiwWkvMWL148FTSaNCBtBKTp2dqnuPbYBWqoGfcHZoNGkwakjYA4CDzCulWugXYJaDRpQFoJCAtHU+QXF4NGkwaY4PONT9/yhgabr21ARweq9iXt7flCSqtTzTRKiGeCRpMGmEWUsRvGg1K/auyLkB1pwTI9yxa8nuusUKQm0WjGGzOJUx8PT5+57zH6xfXH827DmDBD9WgmNyYgfhvSAGfIG9a0bJf3Vw31aw+DRqPRaDQajUajmYz8P5+EKwLJLbE5AAAAAElFTkSuQmCC"}}]); \ No newline at end of file diff --git a/assets/js/7661071f.655fc62f.js b/assets/js/7661071f.655fc62f.js deleted file mode 100644 index d3da7dd27..000000000 --- a/assets/js/7661071f.655fc62f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9642],{4137:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),i=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=i(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=u(e,["components","mdxType","originalType","parentName"]),p=i(r),m=o,d=p["".concat(s,".").concat(m)]||p[m]||g[m]||a;return r?n.createElement(d,l(l({ref:t},c),{},{components:r})):n.createElement(d,l({ref:t},c))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var u={};for(var s in t)hasOwnProperty.call(t,s)&&(u[s]=t[s]);u.originalType=e,u[p]="string"==typeof e?e:o,l[1]=u;for(var i=2;i{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>g,frontMatter:()=>a,metadata:()=>u,toc:()=>i});var n=r(7462),o=(r(7294),r(4137));const a={slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},l=void 0,u={permalink:"/blog/welcome",source:"@site/blog/2021-08-26-welcome/index.md",title:"Welcome",description:"Docusaurus blogging features are powered by the blog plugin.",date:"2021-08-26T00:00:00.000Z",formattedDate:"August 26, 2021",tags:[{label:"facebook",permalink:"/blog/tags/facebook"},{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.405,hasTruncateMarker:!1,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Yangshun Tay",title:"Front End Engineer @ Facebook",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},nextItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"}},s={authorsImageUrls:[void 0,void 0]},i=[],c={toc:i},p="wrapper";function g(e){let{components:t,...a}=e;return(0,o.kt)(p,(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://docusaurus.io/docs/blog"},"Docusaurus blogging features")," are powered by the ",(0,o.kt)("a",{parentName:"p",href:"https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog"},"blog plugin"),"."),(0,o.kt)("p",null,"Simply add Markdown files (or folders) to the ",(0,o.kt)("inlineCode",{parentName:"p"},"blog")," directory."),(0,o.kt)("p",null,"Regular blog authors can be added to ",(0,o.kt)("inlineCode",{parentName:"p"},"authors.yml"),"."),(0,o.kt)("p",null,"The blog post date can be extracted from filenames, such as:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"2019-05-30-welcome.md")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"2019-05-30-welcome/index.md"))),(0,o.kt)("p",null,"A blog post folder can be convenient to co-locate blog post images:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Docusaurus Plushie",src:r(250).Z,width:"1500",height:"500"})),(0,o.kt)("p",null,"The blog supports tags as well!"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"And if you don't want a blog"),": just delete this directory, and use ",(0,o.kt)("inlineCode",{parentName:"p"},"blog: false")," in your Docusaurus config."))}g.isMDXComponent=!0},250:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg"}}]); \ No newline at end of file diff --git a/assets/js/7661071f.ae9f9558.js b/assets/js/7661071f.ae9f9558.js new file mode 100644 index 000000000..05c96dd36 --- /dev/null +++ b/assets/js/7661071f.ae9f9558.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9642],{3174:(e,o,s)=>{s.r(o),s.d(o,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>l,metadata:()=>a,toc:()=>u});var n=s(5893),t=s(1151);const l={slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},r=void 0,a={permalink:"/blog/welcome",source:"@site/blog/2021-08-26-welcome/index.md",title:"Welcome",description:"Docusaurus blogging features are powered by the blog plugin.",date:"2021-08-26T00:00:00.000Z",formattedDate:"August 26, 2021",tags:[{label:"facebook",permalink:"/blog/tags/facebook"},{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.405,hasTruncateMarker:!1,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Yangshun Tay",title:"Front End Engineer @ Facebook",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},unlisted:!1,nextItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"}},c={authorsImageUrls:[void 0,void 0]},u=[];function i(e){const o={a:"a",code:"code",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(o.p,{children:[(0,n.jsx)(o.a,{href:"https://docusaurus.io/docs/blog",children:"Docusaurus blogging features"})," are powered by the ",(0,n.jsx)(o.a,{href:"https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog",children:"blog plugin"}),"."]}),"\n",(0,n.jsxs)(o.p,{children:["Simply add Markdown files (or folders) to the ",(0,n.jsx)(o.code,{children:"blog"})," directory."]}),"\n",(0,n.jsxs)(o.p,{children:["Regular blog authors can be added to ",(0,n.jsx)(o.code,{children:"authors.yml"}),"."]}),"\n",(0,n.jsx)(o.p,{children:"The blog post date can be extracted from filenames, such as:"}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.code,{children:"2019-05-30-welcome.md"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.code,{children:"2019-05-30-welcome/index.md"})}),"\n"]}),"\n",(0,n.jsx)(o.p,{children:"A blog post folder can be convenient to co-locate blog post images:"}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.img,{alt:"Docusaurus Plushie",src:s(250).Z+"",width:"1500",height:"500"})}),"\n",(0,n.jsx)(o.p,{children:"The blog supports tags as well!"}),"\n",(0,n.jsxs)(o.p,{children:[(0,n.jsx)(o.strong,{children:"And if you don't want a blog"}),": just delete this directory, and use ",(0,n.jsx)(o.code,{children:"blog: false"})," in your Docusaurus config."]})]})}function d(e={}){const{wrapper:o}={...(0,t.a)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(i,{...e})}):i(e)}},250:(e,o,s)=>{s.d(o,{Z:()=>n});const n=s.p+"assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg"},1151:(e,o,s)=>{s.d(o,{Z:()=>a,a:()=>r});var n=s(7294);const t={},l=n.createContext(t);function r(e){const o=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),n.createElement(l.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/769f9326.b3090ddc.js b/assets/js/769f9326.b3090ddc.js new file mode 100644 index 000000000..460927aff --- /dev/null +++ b/assets/js/769f9326.b3090ddc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8233],{2125:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>d});var r=n(5893),o=n(1151);const s={},a="Temperature",i={id:"user/hardware/temperature",title:"Temperature",description:"Keeping a close eye to your Dappnode's temperature is part of the Node Runner's basic good practices. Dappnode provides you with metrics \ud83d\udcca in the main dashboard to do so.",source:"@site/docs/user/hardware/temperature.md",sourceDirName:"user/hardware",slug:"/user/hardware/temperature",permalink:"/docs/user/hardware/temperature",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/hardware/temperature.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Maintenance",permalink:"/docs/user/hardware/maintenance"},next:{title:"Earn with Staking in Dappnode",permalink:"/docs/user/staking/overview"}},c={},d=[];function p(e){const t={a:"a",code:"code",h1:"h1",li:"li",ol:"ol",p:"p",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"temperature",children:"Temperature"}),"\n",(0,r.jsxs)(t.p,{children:["Keeping a close eye to your Dappnode's temperature is part of the Node Runner's basic good practices. Dappnode provides you with metrics \ud83d\udcca in the ",(0,r.jsx)(t.a,{href:"http://my.dappnode/dashboard",children:"main dashboard"})," to do so."]}),"\n",(0,r.jsx)("p",{align:"center",children:(0,r.jsx)("img",{width:"100%",src:"/img/temp_dashboard.png",alt:"CPU_temp"})}),"\n",(0,r.jsx)(t.p,{children:"If you want to configure notifications \ud83d\udd14 for temperature changes, you can find two options:"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.a,{href:"http://dms.dappnode/dashboards",children:"DMS Dashboard"})," you'll be able to configure Grafana notifications."]}),"\n",(0,r.jsxs)(t.li,{children:["You can also set ",(0,r.jsx)(t.a,{href:"http://my.dappnode/system/notifications",children:"Ethical Metrics"})," up to get email notifications while keeping your privacy."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Some additional tips that will contribute to an optimal temperature are:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["BIOS Adjustments: if you shut your Dappnode down you can access your NUC's BIOS setup with the ",(0,r.jsx)(t.code,{children:"F2"})," key while booting. The UI includes different options that you can check in ",(0,r.jsx)(t.a,{href:"https://www.intel.com/content/www/us/en/support/articles/000096279/intel-nuc.html",children:"Intel's documentation"})," and tweak according to your preferences."]}),"\n",(0,r.jsxs)(t.li,{children:["If you're using an 11th Generation NUC, check its ambient temperature recomendations ",(0,r.jsx)(t.a,{href:"https://www.intel.com/content/dam/support/us/en/documents/intel-nuc/NUC11AT_TechProdSpec.pdf",children:"here"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["If you're using a 12th Generation NUC, check its ambient temperature recomendations ",(0,r.jsx)(t.a,{href:"https://www.intel.com/content/dam/support/us/en/documents/intel-nuc/NUC12WSK_L10_UserGuide.pdf",children:"here"}),"."]}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>a});var r=n(7294);const o={},s=r.createContext(o);function a(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/769f9326.b68781fb.js b/assets/js/769f9326.b68781fb.js deleted file mode 100644 index b02245697..000000000 --- a/assets/js/769f9326.b68781fb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8233],{4137:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t =0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},l="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,u=p(e,["components","mdxType","originalType","parentName"]),l=s(r),m=a,f=l["".concat(c,".").concat(m)]||l[m]||d[m]||o;return r?n.createElement(f,i(i({ref:t},u),{},{components:r})):n.createElement(f,i({ref:t},u))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=m;var p={};for(var c in t)hasOwnProperty.call(t,c)&&(p[c]=t[c]);p.originalType=e,p[l]="string"==typeof e?e:a,i[1]=p;for(var s=2;s {r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>p,toc:()=>s});var n=r(7462),a=(r(7294),r(4137));const o={},i="Temperature",p={unversionedId:"user/hardware/temperature",id:"user/hardware/temperature",title:"Temperature",description:"Keeping a close eye to your Dappnode's temperature is part of the Node Runner's basic good practices. Dappnode provides you with metrics \ud83d\udcca in the main dashboard to do so.",source:"@site/docs/user/hardware/temperature.md",sourceDirName:"user/hardware",slug:"/user/hardware/temperature",permalink:"/docs/user/hardware/temperature",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/hardware/temperature.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Maintenance",permalink:"/docs/user/hardware/maintenance"},next:{title:"Earn with Staking in Dappnode",permalink:"/docs/user/staking/overview"}},c={},s=[],u={toc:s},l="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(l,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"temperature"},"Temperature"),(0,a.kt)("p",null,"Keeping a close eye to your Dappnode's temperature is part of the Node Runner's basic good practices. Dappnode provides you with metrics \ud83d\udcca in the ",(0,a.kt)("a",{parentName:"p",href:"http://my.dappnode/dashboard"},"main dashboard")," to do so."),(0,a.kt)("p",{align:"center"},(0,a.kt)("img",{width:"100%",src:"/img/temp_dashboard.png",alt:"CPU_temp"})),(0,a.kt)("p",null,"If you want to configure notifications \ud83d\udd14 for temperature changes, you can find two options:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"In the ",(0,a.kt)("a",{parentName:"li",href:"http://dms.dappnode/dashboards"},"DMS Dashboard")," you'll be able to configure Grafana notifications."),(0,a.kt)("li",{parentName:"ol"},"You can also set ",(0,a.kt)("a",{parentName:"li",href:"http://my.dappnode/system/notifications"},"Ethical Metrics")," up to get email notifications while keeping your privacy.")),(0,a.kt)("p",null,"Some additional tips that will contribute to an optimal temperature are:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"BIOS Adjustments: if you shut your Dappnode down you can access your NUC's BIOS setup with the ",(0,a.kt)("inlineCode",{parentName:"li"},"F2")," key while booting. The UI includes different options that you can check in ",(0,a.kt)("a",{parentName:"li",href:"https://www.intel.com/content/www/us/en/support/articles/000096279/intel-nuc.html"},"Intel's documentation")," and tweak according to your preferences."),(0,a.kt)("li",{parentName:"ul"},"If you're using an 11th Generation NUC, check its ambient temperature recomendations ",(0,a.kt)("a",{parentName:"li",href:"https://www.intel.com/content/dam/support/us/en/documents/intel-nuc/NUC11AT_TechProdSpec.pdf"},"here"),"."),(0,a.kt)("li",{parentName:"ul"},"If you're using a 12th Generation NUC, check its ambient temperature recomendations ",(0,a.kt)("a",{parentName:"li",href:"https://www.intel.com/content/dam/support/us/en/documents/intel-nuc/NUC12WSK_L10_UserGuide.pdf"},"here"),".")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/773dc9fa.1f43c6cc.js b/assets/js/773dc9fa.1f43c6cc.js new file mode 100644 index 000000000..267057d39 --- /dev/null +++ b/assets/js/773dc9fa.1f43c6cc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6471],{740:(o,t,s)=>{s.r(t),s.d(t,{assets:()=>h,contentTitle:()=>n,default:()=>l,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var e=s(5893),i=s(1151);const r={},n="Subscribing to Smooth",a={id:"smooth/subscribe-to-smooth/overview",title:"Subscribing to Smooth",description:"Hello! In this section you will find all the information on how to subscribe your Validators to Smooth. Even though the process is simple, it is important to follow the steps carefully.",source:"@site/docs/smooth/subscribe-to-smooth/overview.md",sourceDirName:"smooth/subscribe-to-smooth",slug:"/smooth/subscribe-to-smooth/overview",permalink:"/docs/smooth/subscribe-to-smooth/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/subscribe-to-smooth/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Smooth's architecture",permalink:"/docs/smooth/deep-dive-into-smooth/oracle-sm"},next:{title:"Automatic Subscription",permalink:"/docs/smooth/subscribe-to-smooth/automatic"}},h={},d=[];function c(o){const t={a:"a",admonition:"admonition",h1:"h1",li:"li",ol:"ol",p:"p",strong:"strong",...(0,i.a)(),...o.components};return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(t.h1,{id:"subscribing-to-smooth",children:"Subscribing to Smooth"}),"\n",(0,e.jsxs)(t.p,{children:["Hello! In this section you will find all the information on how to subscribe your Validators to ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". Even though the process is simple, it is important to follow the steps carefully."]}),"\n",(0,e.jsxs)(t.admonition,{title:"Before subscribing to Smooth!",type:"danger",children:[(0,e.jsxs)(t.p,{children:["Only validators with ETH1 withdrawal addresses can be subscribed to ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". If you have a validator with a BLS withdrawal address, please update it to an ETH1 withdrawal address before subscribing to ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),"."]}),(0,e.jsxs)(t.p,{children:["Ensure that you have control over the ETH1 withdrawal address of the validators you plan to subscribe to ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". This address is the one you will need to use when logging into Smooth's website and manage your validators going forward. Only the withdrawal address has the capability to claim rewards generated by your validators from ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),"."]})]}),"\n",(0,e.jsxs)(t.p,{children:["You have ",(0,e.jsx)(t.strong,{children:"two options"})," to subscribe to ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),":"]}),"\n",(0,e.jsxs)(t.ol,{children:["\n",(0,e.jsxs)(t.li,{children:["\n",(0,e.jsxs)(t.p,{children:[(0,e.jsx)(t.a,{href:"/docs/smooth/subscribe-to-smooth/automatic",children:(0,e.jsx)(t.strong,{children:"Automatic subscription"})}),": The simplest way to subscribe, change the fee recipient of your validators to Smooth's address and subscribe automatically when proposing your next block!"]}),"\n"]}),"\n",(0,e.jsxs)(t.li,{children:["\n",(0,e.jsxs)(t.p,{children:[(0,e.jsx)(t.a,{href:"/docs/smooth/subscribe-to-smooth/manual",children:(0,e.jsx)(t.strong,{children:"Manual subscription"})}),": Change the fee recipient of your validators to Smooth's address and use the Smooth's website to subscribe right now, without waiting for your validators to propose a block. Start earning rewards right away!"]}),"\n"]}),"\n"]})]})}function l(o={}){const{wrapper:t}={...(0,i.a)(),...o.components};return t?(0,e.jsx)(t,{...o,children:(0,e.jsx)(c,{...o})}):c(o)}},1151:(o,t,s)=>{s.d(t,{Z:()=>a,a:()=>n});var e=s(7294);const i={},r=e.createContext(i);function n(o){const t=e.useContext(r);return e.useMemo((function(){return"function"==typeof o?o(t):{...t,...o}}),[t,o])}function a(o){let t;return t=o.disableParentContext?"function"==typeof o.components?o.components(i):o.components||i:n(o.components),e.createElement(r.Provider,{value:t},o.children)}}}]); \ No newline at end of file diff --git a/assets/js/773dc9fa.5ecc2397.js b/assets/js/773dc9fa.5ecc2397.js deleted file mode 100644 index 9dac0fe75..000000000 --- a/assets/js/773dc9fa.5ecc2397.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6471],{4137:(t,e,o)=>{o.d(e,{Zo:()=>l,kt:()=>d});var r=o(7294);function a(t,e,o){return e in t?Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0,writable:!0}):t[e]=o,t}function n(t,e){var o=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),o.push.apply(o,r)}return o}function s(t){for(var e=1;e =0||(a[o]=t[o]);return a}(t,e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(t,o)&&(a[o]=t[o])}return a}var p=r.createContext({}),c=function(t){var e=r.useContext(p),o=e;return t&&(o="function"==typeof t?t(e):s(s({},e),t)),o},l=function(t){var e=c(t.components);return r.createElement(p.Provider,{value:e},t.children)},m="mdxType",h={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},u=r.forwardRef((function(t,e){var o=t.components,a=t.mdxType,n=t.originalType,p=t.parentName,l=i(t,["components","mdxType","originalType","parentName"]),m=c(o),u=a,d=m["".concat(p,".").concat(u)]||m[u]||h[u]||n;return o?r.createElement(d,s(s({ref:e},l),{},{components:o})):r.createElement(d,s({ref:e},l))}));function d(t,e){var o=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var n=o.length,s=new Array(n);s[0]=u;var i={};for(var p in e)hasOwnProperty.call(e,p)&&(i[p]=e[p]);i.originalType=t,i[m]="string"==typeof t?t:a,s[1]=i;for(var c=2;c {o.r(e),o.d(e,{assets:()=>p,contentTitle:()=>s,default:()=>h,frontMatter:()=>n,metadata:()=>i,toc:()=>c});var r=o(7462),a=(o(7294),o(4137));const n={},s="Subscribing to Smooth",i={unversionedId:"smooth/subscribe-to-smooth/overview",id:"smooth/subscribe-to-smooth/overview",title:"Subscribing to Smooth",description:"Hello! In this section you will find all the information on how to subscribe your Validators to Smooth. Even though the process is simple, it is important to follow the steps carefully.",source:"@site/docs/smooth/subscribe-to-smooth/overview.md",sourceDirName:"smooth/subscribe-to-smooth",slug:"/smooth/subscribe-to-smooth/overview",permalink:"/docs/smooth/subscribe-to-smooth/overview",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/subscribe-to-smooth/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Smooth's architecture",permalink:"/docs/smooth/deep-dive-into-smooth/oracle-sm"},next:{title:"Automatic Subscription",permalink:"/docs/smooth/subscribe-to-smooth/automatic"}},p={},c=[],l={toc:c},m="wrapper";function h(t){let{components:e,...o}=t;return(0,a.kt)(m,(0,r.Z)({},l,o,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"subscribing-to-smooth"},"Subscribing to Smooth"),(0,a.kt)("p",null,"Hello! In this section you will find all the information on how to subscribe your Validators to ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". Even though the process is simple, it is important to follow the steps carefully. "),(0,a.kt)("admonition",{title:"Before subscribing to Smooth!",type:"danger"},(0,a.kt)("p",{parentName:"admonition"},"Only validators with ETH1 withdrawal addresses can be subscribed to ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". If you have a validator with a BLS withdrawal address, please update it to an ETH1 withdrawal address before subscribing to ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". "),(0,a.kt)("p",{parentName:"admonition"},"Ensure that you have control over the ETH1 withdrawal address of the validators you plan to subscribe to ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". This address is the one you will need to use when logging into Smooth's website and manage your validators going forward. Only the withdrawal address has the capability to claim rewards generated by your validators from ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),".")),(0,a.kt)("p",null,"You have ",(0,a.kt)("strong",{parentName:"p"},"two options")," to subscribe to ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),":"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("a",{parentName:"p",href:"/docs/smooth/subscribe-to-smooth/automatic"},(0,a.kt)("strong",{parentName:"a"},"Automatic subscription")),": The simplest way to subscribe, change the fee recipient of your validators to Smooth's address and subscribe automatically when proposing your next block!")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("a",{parentName:"p",href:"/docs/smooth/subscribe-to-smooth/manual"},(0,a.kt)("strong",{parentName:"a"},"Manual subscription")),": Change the fee recipient of your validators to Smooth's address and use the Smooth's website to subscribe right now, without waiting for your validators to propose a block. Start earning rewards right away!"))))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7874.528a2ea3.js b/assets/js/7874.528a2ea3.js new file mode 100644 index 000000000..274ae0170 --- /dev/null +++ b/assets/js/7874.528a2ea3.js @@ -0,0 +1 @@ +(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7874],{9047:(e,t,n)=>{"use strict";n.d(t,{Z:()=>L});var s=n(7294),o=n(5893);function a(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=s.Children.toArray(e),n=t.find((e=>s.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),a=t.filter((e=>e!==n)),c=n?.props.children;return{mdxAdmonitionTitle:c,rest:a.length>0?(0,o.jsx)(o.Fragment,{children:a}):null}}(e.children),a=e.title??t;return{...e,...a&&{title:a},children:n}}var c=n(6010),i=n(5999),r=n(5281);const l={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function d(e){let{type:t,className:n,children:s}=e;return(0,o.jsx)("div",{className:(0,c.Z)(r.k.common.admonition,r.k.common.admonitionType(t),l.admonition,n),children:s})}function u(e){let{icon:t,title:n}=e;return(0,o.jsxs)("div",{className:l.admonitionHeading,children:[(0,o.jsx)("span",{className:l.admonitionIcon,children:t}),n]})}function m(e){let{children:t}=e;return t?(0,o.jsx)("div",{className:l.admonitionContent,children:t}):null}function h(e){const{type:t,icon:n,title:s,children:a,className:c}=e;return(0,o.jsxs)(d,{type:t,className:c,children:[(0,o.jsx)(u,{title:s,icon:n}),(0,o.jsx)(m,{children:a})]})}function p(e){return(0,o.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})}const f={icon:(0,o.jsx)(p,{}),title:(0,o.jsx)(i.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function g(e){return(0,o.jsx)(h,{...f,...e,className:(0,c.Z)("alert alert--secondary",e.className),children:e.children})}function x(e){return(0,o.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})}const j={icon:(0,o.jsx)(x,{}),title:(0,o.jsx)(i.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function b(e){return(0,o.jsx)(h,{...j,...e,className:(0,c.Z)("alert alert--success",e.className),children:e.children})}function v(e){return(0,o.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})}const N={icon:(0,o.jsx)(v,{}),title:(0,o.jsx)(i.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function k(e){return(0,o.jsx)(h,{...N,...e,className:(0,c.Z)("alert alert--info",e.className),children:e.children})}function y(e){return(0,o.jsx)("svg",{viewBox:"0 0 16 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}const C={icon:(0,o.jsx)(y,{}),title:(0,o.jsx)(i.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function B(e){return(0,o.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})}const w={icon:(0,o.jsx)(B,{}),title:(0,o.jsx)(i.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const Z={icon:(0,o.jsx)(y,{}),title:(0,o.jsx)(i.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const _={...{note:g,tip:b,info:k,warning:function(e){return(0,o.jsx)(h,{...C,...e,className:(0,c.Z)("alert alert--warning",e.className),children:e.children})},danger:function(e){return(0,o.jsx)(h,{...w,...e,className:(0,c.Z)("alert alert--danger",e.className),children:e.children})}},...{secondary:e=>(0,o.jsx)(g,{title:"secondary",...e}),important:e=>(0,o.jsx)(k,{title:"important",...e}),success:e=>(0,o.jsx)(b,{title:"success",...e}),caution:function(e){return(0,o.jsx)(h,{...Z,...e,className:(0,c.Z)("alert alert--warning",e.className),children:e.children})}}};function L(e){const t=a(e),n=(s=t.type,_[s]||(console.warn(`No admonition component found for admonition type "${s}". Using Info as fallback.`),_.info));var s;return(0,o.jsx)(n,{...t})}},4881:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});n(7294);var s=n(5999),o=n(5281),a=n(9960),c=n(6010);const i={iconEdit:"iconEdit_Z9Sw"};var r=n(5893);function l(e){let{className:t,...n}=e;return(0,r.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,c.Z)(i.iconEdit,t),"aria-hidden":"true",...n,children:(0,r.jsx)("g",{children:(0,r.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})})}function d(e){let{editUrl:t}=e;return(0,r.jsxs)(a.Z,{to:t,className:o.k.common.editThisPage,children:[(0,r.jsx)(l,{}),(0,r.jsx)(s.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}},2459:(e,t,n)=>{"use strict";n.d(t,{Z:()=>se});var s=n(7294),o=n(1151),a=n(5742),c=n(2389),i=n(6010),r=n(2949),l=n(6668);function d(){const{prism:e}=(0,l.L)(),{colorMode:t}=(0,r.I)(),n=e.theme,s=e.darkTheme||n;return"dark"===t?s:n}var u=n(5281),m=n(7594),h=n.n(m);const p=/title=(? ["'])(?.*?)\1/,f=/\{(? [\d,-]+)\}/,g={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"},lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""}};function x(e,t){const n=e.map((e=>{const{start:n,end:s}=g[e];return`(?:${n}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${s})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function j(e,t){let n=e.replace(/\n$/,"");const{language:s,magicComments:o,metastring:a}=t;if(a&&f.test(a)){const e=a.match(f).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${a}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,s=h()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(s),code:n}}if(void 0===s)return{lineClassNames:{},code:n};const c=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return x(["js","jsBlock"],t);case"jsx":case"tsx":return x(["js","jsBlock","jsx"],t);case"html":return x(["js","jsBlock","html"],t);case"python":case"py":case"bash":return x(["bash"],t);case"markdown":case"md":return x(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return x(["tex"],t);case"lua":case"haskell":case"sql":return x(["lua"],t);case"wasm":return x(["wasm"],t);default:return x(Object.keys(g).filter((e=>!["lua","wasm","tex","latex","matlab"].includes(e))),t)}}(s,o),i=n.split("\n"),r=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(o.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),d=Object.fromEntries(o.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),u=Object.fromEntries(o.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let h=0;h void 0!==e));l[t]?r[l[t]].range+=`${h},`:d[t]?r[d[t]].start=h:u[t]&&(r[u[t]].range+=`${r[u[t]].start}-${h-1},`),i.splice(h,1)}n=i.join("\n");const m={};return Object.entries(r).forEach((e=>{let[t,{range:n}]=e;h()(n).forEach((e=>{m[e]??=[],m[e].push(t)}))})),{lineClassNames:m,code:n}}const b={codeBlockContainer:"codeBlockContainer_Ckt0"};var v=n(5893);function N(e){let{as:t,...n}=e;const s=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[s,o]=e;const a=t[s];a&&"string"==typeof o&&(n[a]=o)})),n}(d());return(0,v.jsx)(t,{...n,style:s,className:(0,i.Z)(n.className,b.codeBlockContainer,u.k.common.codeBlock)})}const k={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function y(e){let{children:t,className:n}=e;return(0,v.jsx)(N,{as:"pre",tabIndex:0,className:(0,i.Z)(k.codeBlockStandalone,"thin-scrollbar",n),children:(0,v.jsx)("code",{className:k.codeBlockLines,children:t})})}var C=n(902);const B={attributes:!0,characterData:!0,childList:!0,subtree:!0};function w(e,t){const[n,o]=(0,s.useState)(),a=(0,s.useCallback)((()=>{o(e.current?.closest("[role=tabpanel][hidden]"))}),[e,o]);(0,s.useEffect)((()=>{a()}),[a]),function(e,t,n){void 0===n&&(n=B);const o=(0,C.zX)(t),a=(0,C.Ql)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(o);return e&&t.observe(e,a),()=>t.disconnect()}),[e,o,a])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),a())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var Z=n(4965);const _={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function L(e){let{line:t,classNames:n,showLineNumbers:s,getLineProps:o,getTokenProps:a}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const c=o({line:t,className:(0,i.Z)(n,s&&_.codeLine)}),r=t.map(((e,t)=>(0,v.jsx)("span",{...a({token:e,key:t})},t)));return(0,v.jsxs)("span",{...c,children:[s?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)("span",{className:_.codeLineNumber}),(0,v.jsx)("span",{className:_.codeLineContent,children:r})]}):r,(0,v.jsx)("br",{})]})}var E=n(5999);function T(e){return(0,v.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,v.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})})}function S(e){return(0,v.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,v.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const z={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function I(e){let{code:t,className:n}=e;const[o,a]=(0,s.useState)(!1),c=(0,s.useRef)(void 0),r=(0,s.useCallback)((()=>{!function(e,t){let{target:n=document.body}=void 0===t?{}:t;if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const s=document.createElement("textarea"),o=document.activeElement;s.value=e,s.setAttribute("readonly",""),s.style.contain="strict",s.style.position="absolute",s.style.left="-9999px",s.style.fontSize="12pt";const a=document.getSelection(),c=a.rangeCount>0&&a.getRangeAt(0);n.append(s),s.select(),s.selectionStart=0,s.selectionEnd=e.length;let i=!1;try{i=document.execCommand("copy")}catch{}s.remove(),c&&(a.removeAllRanges(),a.addRange(c)),o&&o.focus()}(t),a(!0),c.current=window.setTimeout((()=>{a(!1)}),1e3)}),[t]);return(0,s.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),(0,v.jsx)("button",{type:"button","aria-label":o?(0,E.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,E.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,E.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,z.copyButton,o&&z.copyButtonCopied),onClick:r,children:(0,v.jsxs)("span",{className:z.copyButtonIcons,"aria-hidden":"true",children:[(0,v.jsx)(T,{className:z.copyButtonIcon}),(0,v.jsx)(S,{className:z.copyButtonSuccessIcon})]})})}function A(e){return(0,v.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,v.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})})}const M={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function H(e){let{className:t,onClick:n,isEnabled:s}=e;const o=(0,E.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,v.jsx)("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",t,s&&M.wordWrapButtonEnabled),"aria-label":o,title:o,children:(0,v.jsx)(A,{className:M.wordWrapButtonIcon,"aria-hidden":"true"})})}function R(e){let{children:t,className:n="",metastring:o,title:a,showLineNumbers:c,language:r}=e;const{prism:{defaultLanguage:u,magicComments:m}}=(0,l.L)(),h=function(e){return e?.toLowerCase()}(r??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return t?.replace(/language-/,"")}(n)??u),f=d(),g=function(){const[e,t]=(0,s.useState)(!1),[n,o]=(0,s.useState)(!1),a=(0,s.useRef)(null),c=(0,s.useCallback)((()=>{const n=a.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[a,e]),i=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=a.current,n=e>t||a.current.querySelector("code").hasAttribute("style");o(n)}),[a]);return w(a,i),(0,s.useEffect)((()=>{i()}),[e,i]),(0,s.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:a,isEnabled:e,isCodeScrollable:n,toggle:c}}(),x=function(e){return e?.match(p)?.groups.title??""}(o)||a,{lineClassNames:b,code:y}=j(t,{metastring:o,language:h,magicComments:m}),C=c??function(e){return Boolean(e?.includes("showLineNumbers"))}(o);return(0,v.jsxs)(N,{as:"div",className:(0,i.Z)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[x&&(0,v.jsx)("div",{className:k.codeBlockTitle,children:x}),(0,v.jsxs)("div",{className:k.codeBlockContent,children:[(0,v.jsx)(Z.y$,{theme:f,code:y,language:h??"text",children:e=>{let{className:t,style:n,tokens:s,getLineProps:o,getTokenProps:a}=e;return(0,v.jsx)("pre",{tabIndex:0,ref:g.codeBlockRef,className:(0,i.Z)(t,k.codeBlock,"thin-scrollbar"),style:n,children:(0,v.jsx)("code",{className:(0,i.Z)(k.codeBlockLines,C&&k.codeBlockLinesWithNumbering),children:s.map(((e,t)=>(0,v.jsx)(L,{line:e,getLineProps:o,getTokenProps:a,classNames:b[t],showLineNumbers:C},t)))})})}}),(0,v.jsxs)("div",{className:k.buttonGroup,children:[(g.isEnabled||g.isCodeScrollable)&&(0,v.jsx)(H,{className:k.codeButton,onClick:()=>g.toggle(),isEnabled:g.isEnabled}),(0,v.jsx)(I,{className:k.codeButton,code:y})]})]})]})}function V(e){let{children:t,...n}=e;const o=(0,c.Z)(),a=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),i="string"==typeof a?R:y;return(0,v.jsx)(i,{...n,children:a},String(o))}var W=n(9960);var $=n(6043);const P={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function q(e){return!!e&&("SUMMARY"===e.tagName||q(e.parentElement))}function D(e,t){return!!e&&(e===t||D(e.parentElement,t))}function O(e){let{summary:t,children:n,...o}=e;const a=(0,c.Z)(),r=(0,s.useRef)(null),{collapsed:l,setCollapsed:d}=(0,$.u)({initialState:!o.open}),[u,m]=(0,s.useState)(o.open),h=s.isValidElement(t)?t:(0,v.jsx)("summary",{children:t??"Details"});return(0,v.jsxs)("details",{...o,ref:r,open:u,"data-collapsed":l,className:(0,i.Z)(P.details,a&&P.isBrowser,o.className),onMouseDown:e=>{q(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;q(t)&&D(t,r.current)&&(e.preventDefault(),l?(d(!1),m(!0)):d(!0))},children:[h,(0,v.jsx)($.z,{lazy:!1,collapsed:l,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{d(e),m(!e)},children:(0,v.jsx)("div",{className:P.collapsibleContent,children:n})})]})}const F={details:"details_b_Ee"},G="alert alert--info";function U(e){let{...t}=e;return(0,v.jsx)(O,{...t,className:(0,i.Z)(G,F.details,t.className)})}function J(e){const t=s.Children.toArray(e.children),n=t.find((e=>s.isValidElement(e)&&"summary"===e.type)),o=(0,v.jsx)(v.Fragment,{children:t.filter((e=>e!==n))});return(0,v.jsx)(U,{...e,summary:n,children:o})}var Q=n(2503);function X(e){return(0,v.jsx)(Q.Z,{...e})}const Y={containsTaskList:"containsTaskList_mC6p"};function K(e){if(void 0!==e)return(0,i.Z)(e,e?.includes("contains-task-list")&&Y.containsTaskList)}const ee={img:"img_ev3q"};var te=n(9047);const ne={Head:a.Z,details:J,Details:J,code:function(e){return s.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")))?(0,v.jsx)("code",{...e}):(0,v.jsx)(V,{...e})},a:function(e){return(0,v.jsx)(W.Z,{...e})},pre:function(e){return(0,v.jsx)(v.Fragment,{children:e.children})},ul:function(e){return(0,v.jsx)("ul",{...e,className:K(e.className)})},img:function(e){return(0,v.jsx)("img",{loading:"lazy",...e,className:(t=e.className,(0,i.Z)(t,ee.img))});var t},h1:e=>(0,v.jsx)(X,{as:"h1",...e}),h2:e=>(0,v.jsx)(X,{as:"h2",...e}),h3:e=>(0,v.jsx)(X,{as:"h3",...e}),h4:e=>(0,v.jsx)(X,{as:"h4",...e}),h5:e=>(0,v.jsx)(X,{as:"h5",...e}),h6:e=>(0,v.jsx)(X,{as:"h6",...e}),admonition:te.Z,mermaid:()=>null};function se(e){let{children:t}=e;return(0,v.jsx)(o.Z,{components:ne,children:t})}},2244:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});n(7294);var s=n(6010),o=n(9960),a=n(5893);function c(e){const{permalink:t,title:n,subLabel:c,isNext:i}=e;return(0,a.jsxs)(o.Z,{className:(0,s.Z)("pagination-nav__link",i?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[c&&(0,a.jsx)("div",{className:"pagination-nav__sublabel",children:c}),(0,a.jsx)("div",{className:"pagination-nav__label",children:n})]})}},3008:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});n(7294);var s=n(6010),o=n(9960);const a={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var c=n(5893);function i(e){let{permalink:t,label:n,count:i}=e;return(0,c.jsxs)(o.Z,{href:t,className:(0,s.Z)(a.tag,i?a.tagWithCount:a.tagRegular),children:[n,i&&(0,c.jsx)("span",{children:i})]})}},1526:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});n(7294);var s=n(6010),o=n(5999),a=n(3008);const c={tags:"tags_jXut",tag:"tag_QGVx"};var i=n(5893);function r(e){let{tags:t}=e;return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("b",{children:(0,i.jsx)(o.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,i.jsx)("ul",{className:(0,s.Z)(c.tags,"padding--none","margin-left--sm"),children:t.map((e=>{let{label:t,permalink:n}=e;return(0,i.jsx)("li",{className:c.tag,children:(0,i.jsx)(a.Z,{label:t,permalink:n})},n)}))})]})}},7594:(e,t)=>{function n(e){let t,n=[];for(let s of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(s))n.push(parseInt(s,10));else if(t=s.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,s,o,a]=t;if(s&&a){s=parseInt(s),a=parseInt(a);const e=s{"use strict";n.d(t,{Z:()=>i,a:()=>c});var s=n(7294);const o={},a=s.createContext(o);function c(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7b2e8791.8224c8fa.js b/assets/js/7b2e8791.8224c8fa.js deleted file mode 100644 index 738131d19..000000000 --- a/assets/js/7b2e8791.8224c8fa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8804],{4137:(e,n,o)=>{o.d(n,{Zo:()=>d,kt:()=>h});var t=o(7294);function a(e,n,o){return n in e?Object.defineProperty(e,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[n]=o,e}function r(e,n){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),o.push.apply(o,t)}return o}function i(e){for(var n=1;n =0||(a[o]=e[o]);return a}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(t=0;t =0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var l=t.createContext({}),s=function(e){var n=t.useContext(l),o=n;return e&&(o="function"==typeof e?e(n):i(i({},n),e)),o},d=function(e){var n=s(e.components);return t.createElement(l.Provider,{value:n},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},m=t.forwardRef((function(e,n){var o=e.components,a=e.mdxType,r=e.originalType,l=e.parentName,d=p(e,["components","mdxType","originalType","parentName"]),c=s(o),m=a,h=c["".concat(l,".").concat(m)]||c[m]||u[m]||r;return o?t.createElement(h,i(i({ref:n},d),{},{components:o})):t.createElement(h,i({ref:n},d))}));function h(e,n){var o=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var r=o.length,i=new Array(r);i[0]=m;var p={};for(var l in n)hasOwnProperty.call(n,l)&&(p[l]=n[l]);p.originalType=e,p[c]="string"==typeof e?e:a,i[1]=p;for(var s=2;s {o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>p,toc:()=>s});var t=o(7462),a=(o(7294),o(4137));const r={},i="Main commands",p={unversionedId:"dev/sdk/commands",id:"dev/sdk/commands",title:"Main commands",description:"This page covers the top three functionalities of DappnodeSDK: init, build, and publish. Each command plays a crucial role in the development and deployment process of dappnode packages (DNPs).",source:"@site/docs/dev/sdk/commands.md",sourceDirName:"dev/sdk",slug:"/dev/sdk/commands",permalink:"/docs/dev/sdk/commands",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/sdk/commands.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"DappnodeSDK",permalink:"/docs/dev/sdk/overview"},next:{title:"Docker compose file",permalink:"/docs/dev/references/docker-compose"}},l={},s=[{value:" init
",id:"init",level:2},{value:"build
",id:"build",level:2},{value:"publish
",id:"publish",level:2}],d={toc:s},c="wrapper";function u(e){let{components:n,...o}=e;return(0,a.kt)(c,(0,t.Z)({},d,o,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"main-commands"},"Main commands"),(0,a.kt)("p",null,"This page covers the top three functionalities of DappnodeSDK: ",(0,a.kt)("inlineCode",{parentName:"p"},"init"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"build"),", and ",(0,a.kt)("inlineCode",{parentName:"p"},"publish"),". Each command plays a crucial role in the development and deployment process of dappnode packages (DNPs)."),(0,a.kt)("h2",{id:"init"},(0,a.kt)("inlineCode",{parentName:"h2"},"init")),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"init")," command allows you to initialize a new DAppNodePackage (DNP) repository. This is the first step when creating a new DNP. To use the ",(0,a.kt)("inlineCode",{parentName:"p"},"init")," command, run the following:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},"npx @dappnode/dappnodesdk init\n")),(0,a.kt)("p",null,"The following are all the possible ",(0,a.kt)("inlineCode",{parentName:"p"},"init")," options:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-Options:"},' --dir, --directory Change the base directory [string] [default: "./"]\n --compose_file_name Compose file for docker-compose\n [string] [default: "docker-compose.yml"]\n --silent Silence output to terminal [boolean]\n --verbose, --debug Show more output to terminal [boolean]\n -y, --yes Answer yes or the default option to all initializatio\n n questions [boolean]\n -f, --force Overwrite previous project if necessary [boolean]\n -h, --help Show help [boolean]\n -v, --version Show version number [boolean]\n')),(0,a.kt)("h2",{id:"build"},(0,a.kt)("inlineCode",{parentName:"h2"},"build")),(0,a.kt)("p",null,"The build command is used to build a new version of a DNP. It generates the IPFS hash for the package. To use the build command, run the following:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},"npx @dappnode/dappnodesdk build\n")),(0,a.kt)("p",null,"The following are all the possible ",(0,a.kt)("inlineCode",{parentName:"p"},"build")," options:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-Options:"},' --dir, --directory Change the base directory [string] [default: "./"]\n --compose_file_name Compose file for docker-compose\n [string] [default: "docker-compose.yml"]\n --silent Silence output to terminal [boolean]\n --verbose, --debug Show more output to terminal [boolean]\n -p, --provider Specify an ipfs provider: "dappnode" (default), "infu\n ra", "localhost:5002" [default: "dappnode"]\n -t, --timeout Overrides default build timeout: "15h", "20min 15s",\n "5000". Specs npmjs.com/package/timestring\n [default: "60min"]\n --skip_save For testing only: do not save image to disk [boolean]\n --skip_upload For testing only: do not upload image from disk\n [boolean]\n -h, --help Show help [boolean]\n -v, --version Show version number [boolean]\n')),(0,a.kt)("h2",{id:"publish"},(0,a.kt)("inlineCode",{parentName:"h2"},"publish")),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"publish")," command is used to publish a new version of the DNP in an Aragon Package Manager Repository. To use the ",(0,a.kt)("inlineCode",{parentName:"p"},"publish")," command, run the following:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},"npx @dappnode/dappnodesdk publish\n")),(0,a.kt)("p",null,"The following are all the possible ",(0,a.kt)("inlineCode",{parentName:"p"},"publish")," options:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-Options:"},' --dir, --directory Change the base directory [string] [default: "./"]\n --compose_file_name Compose file for docker-compose\n [string] [default: "docker-compose.yml"]\n --silent Silence output to terminal [boolean]\n --verbose, --debug Show more output to terminal [boolean]\n --type Semver update type. Can also be provided with env\n RELEASE_TYPE=[type] or via TRAVIS_TAG=release (pat\n ch), TRAVIS_TAG=release/[type]\n [string] [choices: "major", "minor", "patch"]\n -p, --provider Specify a provider (overwrittes content_provider a\n nd eth_provider): "dappnode" (default), "infura",\n "http://localhost:8545" [string]\n --eth_provider Specify an eth provider: "dappnode" (default), "in\n fura", "localhost:8545"\n [string] [default: "dappnode"]\n --content_provider Specify an ipfs provider: "dappnode" (default), "i\n nfura", "http://localhost:5001"\n [string] [default: "dappnode"]\n --upload_to Specify where to upload the release\n [choices: "ipfs", "swarm"] [default: "ipfs"]\n -a, --developer_address If there is no existing repo for this DNP the publ\n ish command needs a developer address. If it is no\n t provided as an option a prompt will request it\n [string]\n -t, --timeout Overrides default build timeout: "15h", "20min 15s\n ", "5000". Specs npmjs.com/package/timestring\n [string]\n --github_release Publish the release on the Github repo specified i\n n the manifest. Requires a GITHUB_TOKEN ENV to aut\n henticate [boolean]\n --dappnode_team_preset Specific set of options used for internal DAppNode\n releases. Caution: options may change without not\n ice. [boolean]\n -h, --help Show help [boolean]\n -v, --version Show version number [boolean]```\n')))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7b2e8791.9388802d.js b/assets/js/7b2e8791.9388802d.js new file mode 100644 index 000000000..f5cb43d99 --- /dev/null +++ b/assets/js/7b2e8791.9388802d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8804],{2935:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>r,contentTitle:()=>d,default:()=>c,frontMatter:()=>t,metadata:()=>a,toc:()=>l});var i=o(5893),s=o(1151);const t={},d="Main commands",a={id:"dev/sdk/commands",title:"Main commands",description:"This page covers the top three functionalities of DappnodeSDK: init, build, and publish. Each command plays a crucial role in the development and deployment process of dappnode packages (DNPs).",source:"@site/docs/dev/sdk/commands.md",sourceDirName:"dev/sdk",slug:"/dev/sdk/commands",permalink:"/docs/dev/sdk/commands",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/sdk/commands.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"DappnodeSDK",permalink:"/docs/dev/sdk/overview"},next:{title:"Docker compose file",permalink:"/docs/dev/references/docker-compose"}},r={},l=[{value:"init
",id:"init",level:2},{value:"build
",id:"build",level:2},{value:"publish
",id:"publish",level:2}];function p(e){const n={code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"main-commands",children:"Main commands"}),"\n",(0,i.jsxs)(n.p,{children:["This page covers the top three functionalities of DappnodeSDK: ",(0,i.jsx)(n.code,{children:"init"}),", ",(0,i.jsx)(n.code,{children:"build"}),", and ",(0,i.jsx)(n.code,{children:"publish"}),". Each command plays a crucial role in the development and deployment process of dappnode packages (DNPs)."]}),"\n",(0,i.jsx)(n.h2,{id:"init",children:(0,i.jsx)(n.code,{children:"init"})}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"init"})," command allows you to initialize a new DAppNodePackage (DNP) repository. This is the first step when creating a new DNP. To use the ",(0,i.jsx)(n.code,{children:"init"})," command, run the following:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"npx @dappnode/dappnodesdk init\n"})}),"\n",(0,i.jsxs)(n.p,{children:["The following are all the possible ",(0,i.jsx)(n.code,{children:"init"})," options:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-Options:",children:' --dir, --directory Change the base directory [string] [default: "./"]\n --compose_file_name Compose file for docker-compose\n [string] [default: "docker-compose.yml"]\n --silent Silence output to terminal [boolean]\n --verbose, --debug Show more output to terminal [boolean]\n -y, --yes Answer yes or the default option to all initializatio\n n questions [boolean]\n -f, --force Overwrite previous project if necessary [boolean]\n -h, --help Show help [boolean]\n -v, --version Show version number [boolean]\n'})}),"\n",(0,i.jsx)(n.h2,{id:"build",children:(0,i.jsx)(n.code,{children:"build"})}),"\n",(0,i.jsx)(n.p,{children:"The build command is used to build a new version of a DNP. It generates the IPFS hash for the package. To use the build command, run the following:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"npx @dappnode/dappnodesdk build\n"})}),"\n",(0,i.jsxs)(n.p,{children:["The following are all the possible ",(0,i.jsx)(n.code,{children:"build"})," options:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-Options:",children:' --dir, --directory Change the base directory [string] [default: "./"]\n --compose_file_name Compose file for docker-compose\n [string] [default: "docker-compose.yml"]\n --silent Silence output to terminal [boolean]\n --verbose, --debug Show more output to terminal [boolean]\n -p, --provider Specify an ipfs provider: "dappnode" (default), "infu\n ra", "localhost:5002" [default: "dappnode"]\n -t, --timeout Overrides default build timeout: "15h", "20min 15s",\n "5000". Specs npmjs.com/package/timestring\n [default: "60min"]\n --skip_save For testing only: do not save image to disk [boolean]\n --skip_upload For testing only: do not upload image from disk\n [boolean]\n -h, --help Show help [boolean]\n -v, --version Show version number [boolean]\n'})}),"\n",(0,i.jsx)(n.h2,{id:"publish",children:(0,i.jsx)(n.code,{children:"publish"})}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"publish"})," command is used to publish a new version of the DNP in an Aragon Package Manager Repository. To use the ",(0,i.jsx)(n.code,{children:"publish"})," command, run the following:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"npx @dappnode/dappnodesdk publish\n"})}),"\n",(0,i.jsxs)(n.p,{children:["The following are all the possible ",(0,i.jsx)(n.code,{children:"publish"})," options:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-Options:",children:' --dir, --directory Change the base directory [string] [default: "./"]\n --compose_file_name Compose file for docker-compose\n [string] [default: "docker-compose.yml"]\n --silent Silence output to terminal [boolean]\n --verbose, --debug Show more output to terminal [boolean]\n --type Semver update type. Can also be provided with env\n RELEASE_TYPE=[type] or via TRAVIS_TAG=release (pat\n ch), TRAVIS_TAG=release/[type]\n [string] [choices: "major", "minor", "patch"]\n -p, --provider Specify a provider (overwrittes content_provider a\n nd eth_provider): "dappnode" (default), "infura",\n "http://localhost:8545" [string]\n --eth_provider Specify an eth provider: "dappnode" (default), "in\n fura", "localhost:8545"\n [string] [default: "dappnode"]\n --content_provider Specify an ipfs provider: "dappnode" (default), "i\n nfura", "http://localhost:5001"\n [string] [default: "dappnode"]\n --upload_to Specify where to upload the release\n [choices: "ipfs", "swarm"] [default: "ipfs"]\n -a, --developer_address If there is no existing repo for this DNP the publ\n ish command needs a developer address. If it is no\n t provided as an option a prompt will request it\n [string]\n -t, --timeout Overrides default build timeout: "15h", "20min 15s\n ", "5000". Specs npmjs.com/package/timestring\n [string]\n --github_release Publish the release on the Github repo specified i\n n the manifest. Requires a GITHUB_TOKEN ENV to aut\n henticate [boolean]\n --dappnode_team_preset Specific set of options used for internal DAppNode\n releases. Caution: options may change without not\n ice. [boolean]\n -h, --help Show help [boolean]\n -v, --version Show version number [boolean]```\n'})})]})}function c(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}},1151:(e,n,o)=>{o.d(n,{Z:()=>a,a:()=>d});var i=o(7294);const s={},t=i.createContext(s);function d(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:d(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7ef68c32.6a742b13.js b/assets/js/7ef68c32.6a742b13.js new file mode 100644 index 000000000..0dd8ec7c3 --- /dev/null +++ b/assets/js/7ef68c32.6a742b13.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3036],{611:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>u,contentTitle:()=>r,default:()=>l,frontMatter:()=>a,metadata:()=>s,toc:()=>d});var n=o(5893),i=o(1151);const a={},r="NODEstream",s={id:"dao/node-stream",title:"NODEstream",description:'"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."',source:"@site/docs/dao/node-stream.md",sourceDirName:"dao",slug:"/dao/node-stream",permalink:"/docs/dao/node-stream",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dao/node-stream.md",tags:[],version:"current",frontMatter:{}},u={},d=[];function c(e){const t={h1:"h1",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"nodestream",children:"NODEstream"}),"\n",(0,n.jsx)(t.p,{children:'"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."'})]})}function l(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},1151:(e,t,o)=>{o.d(t,{Z:()=>s,a:()=>r});var n=o(7294);const i={},a=n.createContext(i);function r(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7ef68c32.75c64508.js b/assets/js/7ef68c32.75c64508.js deleted file mode 100644 index 29ee9492a..000000000 --- a/assets/js/7ef68c32.75c64508.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3036],{4137:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},s=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),d=l(r),m=o,f=d["".concat(c,".").concat(m)]||d[m]||p[m]||a;return r?n.createElement(f,i(i({ref:t},s),{},{components:r})):n.createElement(f,i({ref:t},s))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var u={};for(var c in t)hasOwnProperty.call(t,c)&&(u[c]=t[c]);u.originalType=e,u[d]="string"==typeof e?e:o,i[1]=u;for(var l=2;l{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>u,toc:()=>l});var n=r(7462),o=(r(7294),r(4137));const a={},i="NODEstream",u={unversionedId:"dao/node-stream",id:"dao/node-stream",title:"NODEstream",description:'"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."',source:"@site/docs/dao/node-stream.md",sourceDirName:"dao",slug:"/dao/node-stream",permalink:"/docs/dao/node-stream",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dao/node-stream.md",tags:[],version:"current",frontMatter:{}},c={},l=[],s={toc:l},d="wrapper";function p(e){let{components:t,...r}=e;return(0,o.kt)(d,(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"nodestream"},"NODEstream"),(0,o.kt)("p",null,'"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."'))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/814f3328.3f452409.js b/assets/js/814f3328.3f452409.js deleted file mode 100644 index 2f77ed9f0..000000000 --- a/assets/js/814f3328.3f452409.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2535],{5641:o=>{o.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"Welcome","permalink":"/blog/welcome"},{"title":"MDX Blog Post","permalink":"/blog/mdx-blog-post"},{"title":"Long Blog Post","permalink":"/blog/long-blog-post"},{"title":"First Blog Post","permalink":"/blog/first-blog-post"}]}')}}]); \ No newline at end of file diff --git a/assets/js/814f3328.cf45552c.js b/assets/js/814f3328.cf45552c.js new file mode 100644 index 000000000..9bda3c4cc --- /dev/null +++ b/assets/js/814f3328.cf45552c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2535],{5641:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"Welcome","permalink":"/blog/welcome","unlisted":false},{"title":"MDX Blog Post","permalink":"/blog/mdx-blog-post","unlisted":false},{"title":"Long Blog Post","permalink":"/blog/long-blog-post","unlisted":false},{"title":"First Blog Post","permalink":"/blog/first-blog-post","unlisted":false}]}')}}]); \ No newline at end of file diff --git a/assets/js/82063238.21b18e62.js b/assets/js/82063238.21b18e62.js deleted file mode 100644 index d02e997ef..000000000 --- a/assets/js/82063238.21b18e62.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9984],{4137:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>k});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 i(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 o(e){for(var n=1;n =0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a =0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var p=a.createContext({}),s=function(e){var n=a.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},c=function(e){var n=s(e.components);return a.createElement(p.Provider,{value:n},e.children)},d="mdxType",m={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,i=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=s(t),u=r,k=d["".concat(p,".").concat(u)]||d[u]||m[u]||i;return t?a.createElement(k,o(o({ref:n},c),{},{components:t})):a.createElement(k,o({ref:n},c))}));function k(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=u;var l={};for(var p in n)hasOwnProperty.call(n,p)&&(l[p]=n[p]);l.originalType=e,l[d]="string"==typeof e?e:r,o[1]=l;for(var s=2;s{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var a=t(7462),r=(t(7294),t(4137));const i={},o="Docker compose file",l={unversionedId:"dev/references/docker-compose",id:"dev/references/docker-compose",title:"Docker compose file",description:"Dappnode packages are built upon Docker containers. The heart of defining how these containers run and interact lies in the docker-compose.yml file. In this guide, we will explain the typical structure of the docker-compose.yml file for a Dappnode package.",source:"@site/docs/dev/references/docker-compose.md",sourceDirName:"dev/references",slug:"/dev/references/docker-compose",permalink:"/docs/dev/references/docker-compose",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/references/docker-compose.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"Main commands",permalink:"/docs/dev/sdk/commands"},next:{title:"Dappnode Package (DNP) manifest",permalink:"/docs/dev/references/manifest"}},p={},s=[{value:"Basic Example",id:"basic-example",level:2},{value:"Complex Example",id:"complex-example",level:2},{value:"Notable Features",id:"notable-features",level:3},{value:"Environment Variables",id:"environment-variables",level:4},{value:"The UPSTREAM_VERSION
Argument",id:"the-upstream_version-argument",level:4},{value:"TheEXTRA_OPTS
Environment Variable",id:"the-extra_opts-environment-variable",level:4}],c={toc:s},d="wrapper";function m(e){let{components:n,...t}=e;return(0,r.kt)(d,(0,a.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"docker-compose-file"},"Docker compose file"),(0,r.kt)("p",null,"Dappnode packages are built upon Docker containers. The heart of defining how these containers run and interact lies in the ",(0,r.kt)("inlineCode",{parentName:"p"},"docker-compose.yml")," file. In this guide, we will explain the typical structure of the ",(0,r.kt)("inlineCode",{parentName:"p"},"docker-compose.yml")," file for a Dappnode package."),(0,r.kt)("h2",{id:"basic-example"},"Basic Example"),(0,r.kt)("p",null,"A simple ",(0,r.kt)("inlineCode",{parentName:"p"},"docker-compose.yml")," file looks like this:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},'version: "3.5"\nservices:\n test.public.dappnode.eth:\n build: .\n image: "test.public.dappnode.eth:0.1.0"\n restart: unless-stopped\n')),(0,r.kt)("p",null,"This example illustrates the basic elements, which include the version of the docker-compose file, services, and the service's basic attributes."),(0,r.kt)("h2",{id:"complex-example"},"Complex Example"),(0,r.kt)("p",null,"A more intricate ",(0,r.kt)("inlineCode",{parentName:"p"},"docker-compose.yml")," file could look like this:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},'version: "3.5"\nservices:\n beacon-chain:\n build:\n context: beacon-chain\n args:\n UPSTREAM_VERSION: v4.0.7\n volumes:\n - "beacon-chain-data:/data"\n ports:\n - "12603:12603/tcp"\n - "12603:12603/udp"\n restart: unless-stopped\n environment:\n P2P_PORT: 12603\n CHECKPOINT_SYNC_URL: "https://checkpoints.mainnet.lukso.network"\n EXTRA_OPTS: ""\n LOG_VERBOSITY: info\n MIN_SYNC_PEERS: "0"\n MAX_PEERS: "250"\n SUBSCRIBE_ALL_SUBNETS: "true"\n validator:\n build:\n context: validator\n args:\n UPSTREAM_VERSION: v4.0.7\n volumes:\n - "validator-data:/data"\n restart: unless-stopped\n environment:\n LOG_VERBOSITY: info\n GRAFFITI: validating_from_DAppNode\n ENABLE_DOPPELGANGER: "true"\n EXTRA_OPTS: ""\nvolumes:\n beacon-chain-data: {}\n validator-data: {}\n')),(0,r.kt)("p",null,"In the complex example, you'll find:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Multiple services (like ",(0,r.kt)("inlineCode",{parentName:"li"},"beacon-chain")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"validator"),")."),(0,r.kt)("li",{parentName:"ul"},"Build arguments, such as the relevant ",(0,r.kt)("inlineCode",{parentName:"li"},"UPSTREAM_VERSION"),"."),(0,r.kt)("li",{parentName:"ul"},"Defined volumes, ports, and environment variables.")),(0,r.kt)("h3",{id:"notable-features"},"Notable Features"),(0,r.kt)("h4",{id:"environment-variables"},"Environment Variables"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"All environment variables (",(0,r.kt)("inlineCode",{parentName:"li"},"envs"),") defined in the ",(0,r.kt)("inlineCode",{parentName:"li"},"docker-compose.yml")," file will be visible in the package config post-installation. Users can modify these."),(0,r.kt)("li",{parentName:"ul"},"If the package has a ",(0,r.kt)("inlineCode",{parentName:"li"},"setup-wizard"),', those environment variables not set within it will be hidden by default in the configuration. Users can view these by selecting "Show advanced config".')),(0,r.kt)("h4",{id:"the-upstream_version-argument"},"The ",(0,r.kt)("inlineCode",{parentName:"h4"},"UPSTREAM_VERSION")," Argument"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"The ",(0,r.kt)("inlineCode",{parentName:"p"},"UPSTREAM_VERSION")," argument is mandatory if you wish to leverage GitHub actions that automatically create PRs when there's a new release in the upstream repository.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"In the Dockerfile, ",(0,r.kt)("inlineCode",{parentName:"p"},"UPSTREAM_VERSION")," is usually declared and used like this:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-dockerfile"},"ARG UPSTREAM_VERSION\nFROM consensys/teku:$UPSTREAM_VERSION\n")))),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"The ",(0,r.kt)("inlineCode",{parentName:"p"},"upstreamVersion")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"upstreamRepo")," fields need to be defined in the ",(0,r.kt)("inlineCode",{parentName:"p"},"dappnode_package.json")," file for the GitHub actions to work. Here is an example:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre"},'{\n ...\n "upstreamVersion": "23.8.0",\n "upstreamRepo": "ConsenSys/teku",\n ...\n}\n'))),(0,r.kt)("h4",{id:"the-extra_opts-environment-variable"},"The ",(0,r.kt)("inlineCode",{parentName:"h4"},"EXTRA_OPTS")," Environment Variable"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"EXTRA_OPTS")," is an environment variable that allows users to add any flags that might not have been included by default. ")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Here's a typical use case for ",(0,r.kt)("inlineCode",{parentName:"p"},"EXTRA_OPTS")," in the entrypoint script:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"exec /opt/teku/bin/teku \\\n --network=prater \\\n ...(omitting other flags) \\\n --log-destination=CONSOLE \\\n $EXTRA_OPTS\n")))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/82063238.7513d20c.js b/assets/js/82063238.7513d20c.js new file mode 100644 index 000000000..828eccaff --- /dev/null +++ b/assets/js/82063238.7513d20c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9984],{6789:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>t,metadata:()=>a,toc:()=>c});var i=s(5893),o=s(1151);const t={},r="Docker compose file",a={id:"dev/references/docker-compose",title:"Docker compose file",description:"Dappnode packages are built upon Docker containers. The heart of defining how these containers run and interact lies in the docker-compose.yml file. In this guide, we will explain the typical structure of the docker-compose.yml file for a Dappnode package.",source:"@site/docs/dev/references/docker-compose.md",sourceDirName:"dev/references",slug:"/dev/references/docker-compose",permalink:"/docs/dev/references/docker-compose",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/references/docker-compose.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"Main commands",permalink:"/docs/dev/sdk/commands"},next:{title:"Dappnode Package (DNP) manifest",permalink:"/docs/dev/references/manifest"}},l={},c=[{value:"Basic Example",id:"basic-example",level:2},{value:"Complex Example",id:"complex-example",level:2},{value:"Notable Features",id:"notable-features",level:3},{value:"Environment Variables",id:"environment-variables",level:4},{value:"TheUPSTREAM_VERSION
Argument",id:"the-upstream_version-argument",level:4},{value:"TheEXTRA_OPTS
Environment Variable",id:"the-extra_opts-environment-variable",level:4}];function d(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"docker-compose-file",children:"Docker compose file"}),"\n",(0,i.jsxs)(n.p,{children:["Dappnode packages are built upon Docker containers. The heart of defining how these containers run and interact lies in the ",(0,i.jsx)(n.code,{children:"docker-compose.yml"})," file. In this guide, we will explain the typical structure of the ",(0,i.jsx)(n.code,{children:"docker-compose.yml"})," file for a Dappnode package."]}),"\n",(0,i.jsx)(n.h2,{id:"basic-example",children:"Basic Example"}),"\n",(0,i.jsxs)(n.p,{children:["A simple ",(0,i.jsx)(n.code,{children:"docker-compose.yml"})," file looks like this:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:'version: "3.5"\nservices:\n test.public.dappnode.eth:\n build: .\n image: "test.public.dappnode.eth:0.1.0"\n restart: unless-stopped\n'})}),"\n",(0,i.jsx)(n.p,{children:"This example illustrates the basic elements, which include the version of the docker-compose file, services, and the service's basic attributes."}),"\n",(0,i.jsx)(n.h2,{id:"complex-example",children:"Complex Example"}),"\n",(0,i.jsxs)(n.p,{children:["A more intricate ",(0,i.jsx)(n.code,{children:"docker-compose.yml"})," file could look like this:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:'version: "3.5"\nservices:\n beacon-chain:\n build:\n context: beacon-chain\n args:\n UPSTREAM_VERSION: v4.0.7\n volumes:\n - "beacon-chain-data:/data"\n ports:\n - "12603:12603/tcp"\n - "12603:12603/udp"\n restart: unless-stopped\n environment:\n P2P_PORT: 12603\n CHECKPOINT_SYNC_URL: "https://checkpoints.mainnet.lukso.network"\n EXTRA_OPTS: ""\n LOG_VERBOSITY: info\n MIN_SYNC_PEERS: "0"\n MAX_PEERS: "250"\n SUBSCRIBE_ALL_SUBNETS: "true"\n validator:\n build:\n context: validator\n args:\n UPSTREAM_VERSION: v4.0.7\n volumes:\n - "validator-data:/data"\n restart: unless-stopped\n environment:\n LOG_VERBOSITY: info\n GRAFFITI: validating_from_DAppNode\n ENABLE_DOPPELGANGER: "true"\n EXTRA_OPTS: ""\nvolumes:\n beacon-chain-data: {}\n validator-data: {}\n'})}),"\n",(0,i.jsx)(n.p,{children:"In the complex example, you'll find:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Multiple services (like ",(0,i.jsx)(n.code,{children:"beacon-chain"})," and ",(0,i.jsx)(n.code,{children:"validator"}),")."]}),"\n",(0,i.jsxs)(n.li,{children:["Build arguments, such as the relevant ",(0,i.jsx)(n.code,{children:"UPSTREAM_VERSION"}),"."]}),"\n",(0,i.jsx)(n.li,{children:"Defined volumes, ports, and environment variables."}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"notable-features",children:"Notable Features"}),"\n",(0,i.jsx)(n.h4,{id:"environment-variables",children:"Environment Variables"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["All environment variables (",(0,i.jsx)(n.code,{children:"envs"}),") defined in the ",(0,i.jsx)(n.code,{children:"docker-compose.yml"})," file will be visible in the package config post-installation. Users can modify these."]}),"\n",(0,i.jsxs)(n.li,{children:["If the package has a ",(0,i.jsx)(n.code,{children:"setup-wizard"}),', those environment variables not set within it will be hidden by default in the configuration. Users can view these by selecting "Show advanced config".']}),"\n"]}),"\n",(0,i.jsxs)(n.h4,{id:"the-upstream_version-argument",children:["The ",(0,i.jsx)(n.code,{children:"UPSTREAM_VERSION"})," Argument"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"UPSTREAM_VERSION"})," argument is mandatory if you wish to leverage GitHub actions that automatically create PRs when there's a new release in the upstream repository."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the Dockerfile, ",(0,i.jsx)(n.code,{children:"UPSTREAM_VERSION"})," is usually declared and used like this:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-dockerfile",children:"ARG UPSTREAM_VERSION\nFROM consensys/teku:$UPSTREAM_VERSION\n"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.admonition,{type:"note",children:[(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"upstreamVersion"})," and ",(0,i.jsx)(n.code,{children:"upstreamRepo"})," fields need to be defined in the ",(0,i.jsx)(n.code,{children:"dappnode_package.json"})," file for the GitHub actions to work. Here is an example:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:'{\n ...\n "upstreamVersion": "23.8.0",\n "upstreamRepo": "ConsenSys/teku",\n ...\n}\n'})})]}),"\n",(0,i.jsxs)(n.h4,{id:"the-extra_opts-environment-variable",children:["The ",(0,i.jsx)(n.code,{children:"EXTRA_OPTS"})," Environment Variable"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"EXTRA_OPTS"})," is an environment variable that allows users to add any flags that might not have been included by default."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Here's a typical use case for ",(0,i.jsx)(n.code,{children:"EXTRA_OPTS"})," in the entrypoint script:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"exec /opt/teku/bin/teku \\\n --network=prater \\\n ...(omitting other flags) \\\n --log-destination=CONSOLE \\\n $EXTRA_OPTS\n"})}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>r});var i=s(7294);const o={},t=i.createContext(o);function r(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8443.6d2e563d.js b/assets/js/8443.6d2e563d.js new file mode 100644 index 000000000..4b2d635bb --- /dev/null +++ b/assets/js/8443.6d2e563d.js @@ -0,0 +1,2 @@ +/*! For license information please see 8443.6d2e563d.js.LICENSE.txt */ +(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8443],{8443:(t,e,n)=>{"use strict";t.exports=n(295)},1228:(t,e,n)=>{"use strict";var i=n(2856),s={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},suggestions:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:"0"},defaultClasses:{root:"algolia-autocomplete",prefix:"aa",noPrefix:!1,dropdownMenu:"dropdown-menu",input:"input",hint:"hint",suggestions:"suggestions",suggestion:"suggestion",cursor:"cursor",dataset:"dataset",empty:"empty"},appendTo:{wrapper:{position:"absolute",zIndex:"100",display:"none"},input:{},inputWithNoHint:{},dropdown:{display:"block"}}};i.isMsie()&&i.mixin(s.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),i.isMsie()&&i.isMsie()<=7&&i.mixin(s.input,{marginTop:"-1px"}),t.exports=s},9050:(t,e,n)=>{"use strict";var i="aaDataset",s="aaValue",r="aaDatum",o=n(2856),a=n(4910),u=n(3561),c=n(1228),l=n(3109);function h(t){var e;(t=t||{}).templates=t.templates||{},t.source||o.error("missing source"),t.name&&(e=t.name,!/^[_a-zA-Z0-9-]+$/.test(e))&&o.error("invalid dataset name: "+t.name),this.query=null,this._isEmpty=!0,this.highlight=!!t.highlight,this.name=void 0===t.name||null===t.name?o.getUniqueId():t.name,this.source=t.source,this.displayFn=function(t){return t=t||"value",o.isFunction(t)?t:e;function e(e){return e[t]}}(t.display||t.displayKey),this.debounce=t.debounce,this.cache=!1!==t.cache,this.templates=function(t,e){return{empty:t.empty&&o.templatify(t.empty),header:t.header&&o.templatify(t.header),footer:t.footer&&o.templatify(t.footer),suggestion:t.suggestion||n};function n(t){return""+e(t)+"
"}}(t.templates,this.displayFn),this.css=o.mixin({},c,t.appendTo?c.appendTo:{}),this.cssClasses=t.cssClasses=o.mixin({},c.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||o.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix);var n=o.className(this.cssClasses.prefix,this.cssClasses.dataset);this.$el=t.$menu&&t.$menu.find(n+"-"+this.name).length>0?a.element(t.$menu.find(n+"-"+this.name)[0]):a.element(u.dataset.replace("%CLASS%",this.name).replace("%PREFIX%",this.cssClasses.prefix).replace("%DATASET%",this.cssClasses.dataset)),this.$menu=t.$menu,this.clearCachedSuggestions()}h.extractDatasetName=function(t){return a.element(t).data(i)},h.extractValue=function(t){return a.element(t).data(s)},h.extractDatum=function(t){var e=a.element(t).data(r);return"string"==typeof e&&(e=JSON.parse(e)),e},o.mixin(h.prototype,l,{_render:function(t,e){if(this.$el){var n,c=this,l=[].slice.call(arguments,2);if(this.$el.empty(),n=e&&e.length,this._isEmpty=!n,!n&&this.templates.empty)this.$el.html(function(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!0}].concat(e),c.templates.empty.apply(this,e)}.apply(this,l)).prepend(c.templates.header?h.apply(this,l):null).append(c.templates.footer?p.apply(this,l):null);else if(n)this.$el.html(function(){var t,n,l=[].slice.call(arguments,0),h=this,p=u.suggestions.replace("%PREFIX%",this.cssClasses.prefix).replace("%SUGGESTIONS%",this.cssClasses.suggestions);return t=a.element(p).css(this.css.suggestions),n=o.map(e,f),t.append.apply(t,n),t;function f(t){var e,n=u.suggestion.replace("%PREFIX%",h.cssClasses.prefix).replace("%SUGGESTION%",h.cssClasses.suggestion);return(e=a.element(n).attr({role:"option",id:["option",Math.floor(1e8*Math.random())].join("-")}).append(c.templates.suggestion.apply(this,[t].concat(l)))).data(i,c.name),e.data(s,c.displayFn(t)||void 0),e.data(r,JSON.stringify(t)),e.children().each((function(){a.element(this).css(h.css.suggestionChild)})),e}}.apply(this,l)).prepend(c.templates.header?h.apply(this,l):null).append(c.templates.footer?p.apply(this,l):null);else if(e&&!Array.isArray(e))throw new TypeError("suggestions must be an array");this.$menu&&this.$menu.addClass(this.cssClasses.prefix+(n?"with":"without")+"-"+this.name).removeClass(this.cssClasses.prefix+(n?"without":"with")+"-"+this.name),this.trigger("rendered",t)}function h(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),c.templates.header.apply(this,e)}function p(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),c.templates.footer.apply(this,e)}},getRoot:function(){return this.$el},update:function(t){function e(e){if(!this.canceled&&t===this.query){var n=[].slice.call(arguments,1);this.cacheSuggestions(t,e,n),this._render.apply(this,[t,e].concat(n))}}if(this.query=t,this.canceled=!1,this.shouldFetchFromCache(t))e.apply(this,[this.cachedSuggestions].concat(this.cachedRenderExtraArgs));else{var n=this,i=function(){n.canceled||n.source(t,e.bind(n))};if(this.debounce){clearTimeout(this.debounceTimeout),this.debounceTimeout=setTimeout((function(){n.debounceTimeout=null,i()}),this.debounce)}else i()}},cacheSuggestions:function(t,e,n){this.cachedQuery=t,this.cachedSuggestions=e,this.cachedRenderExtraArgs=n},shouldFetchFromCache:function(t){return this.cache&&this.cachedQuery===t&&this.cachedSuggestions&&this.cachedSuggestions.length},clearCachedSuggestions:function(){delete this.cachedQuery,delete this.cachedSuggestions,delete this.cachedRenderExtraArgs},cancel:function(){this.canceled=!0},clear:function(){this.$el&&(this.cancel(),this.$el.empty(),this.trigger("rendered",""))},isEmpty:function(){return this._isEmpty},destroy:function(){this.clearCachedSuggestions(),this.$el=null}}),t.exports=h},3354:(t,e,n)=>{"use strict";var i=n(2856),s=n(4910),r=n(3109),o=n(9050),a=n(1228);function u(t){var e,n,r,o=this;(t=t||{}).menu||i.error("menu is required"),i.isArray(t.datasets)||i.isObject(t.datasets)||i.error("1 or more datasets required"),t.datasets||i.error("datasets is required"),this.isOpen=!1,this.isEmpty=!0,this.minLength=t.minLength||0,this.templates={},this.appendTo=t.appendTo||!1,this.css=i.mixin({},a,t.appendTo?a.appendTo:{}),this.cssClasses=t.cssClasses=i.mixin({},a.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||i.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),e=i.bind(this._onSuggestionClick,this),n=i.bind(this._onSuggestionMouseEnter,this),r=i.bind(this._onSuggestionMouseLeave,this);var c=i.className(this.cssClasses.prefix,this.cssClasses.suggestion);this.$menu=s.element(t.menu).on("mouseenter.aa",c,n).on("mouseleave.aa",c,r).on("click.aa",c,e),this.$container=t.appendTo?t.wrapper:this.$menu,t.templates&&t.templates.header&&(this.templates.header=i.templatify(t.templates.header),this.$menu.prepend(this.templates.header())),t.templates&&t.templates.empty&&(this.templates.empty=i.templatify(t.templates.empty),this.$empty=s.element(''),this.$menu.append(this.$empty),this.$empty.hide()),this.datasets=i.map(t.datasets,(function(e){return function(t,e,n){return new u.Dataset(i.mixin({$menu:t,cssClasses:n},e))}(o.$menu,e,t.cssClasses)})),i.each(this.datasets,(function(t){var e=t.getRoot();e&&0===e.parent().length&&o.$menu.append(e),t.onSync("rendered",o._onRendered,o)})),t.templates&&t.templates.footer&&(this.templates.footer=i.templatify(t.templates.footer),this.$menu.append(this.templates.footer()));var l=this;s.element(window).resize((function(){l._redraw()}))}i.mixin(u.prototype,r,{_onSuggestionClick:function(t){this.trigger("suggestionClicked",s.element(t.currentTarget))},_onSuggestionMouseEnter:function(t){var e=s.element(t.currentTarget);if(!e.hasClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0))){this._removeCursor();var n=this;setTimeout((function(){n._setCursor(e,!1)}),0)}},_onSuggestionMouseLeave:function(t){if(t.relatedTarget&&s.element(t.relatedTarget).closest("."+i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).length>0)return;this._removeCursor(),this.trigger("cursorRemoved")},_onRendered:function(t,e){if(this.isEmpty=i.every(this.datasets,(function(t){return t.isEmpty()})),this.isEmpty)if(e.length>=this.minLength&&this.trigger("empty"),this.$empty)if(e.length=this.minLength?this._show():this._hide());this.trigger("datasetRendered")},_hide:function(){this.$container.hide()},_show:function(){this.$container.css("display","block"),this._redraw(),this.trigger("shown")},_redraw:function(){this.isOpen&&this.appendTo&&this.trigger("redrawn")},_getSuggestions:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.suggestion))},_getCursor:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.cursor)).first()},_setCursor:function(t,e){t.first().addClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).attr("aria-selected","true"),this.trigger("cursorMoved",e)},_removeCursor:function(){this._getCursor().removeClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).removeAttr("aria-selected")},_moveCursor:function(t){var e,n,i,s;this.isOpen&&(n=this._getCursor(),e=this._getSuggestions(),this._removeCursor(),-1!==(i=((i=e.index(n)+t)+1)%(e.length+1)-1)?(i<-1&&(i=e.length-1),this._setCursor(s=e.eq(i),!0),this._ensureVisible(s)):this.trigger("cursorRemoved"))},_ensureVisible:function(t){var e,n,i,s;n=(e=t.position().top)+t.height()+parseInt(t.css("margin-top"),10)+parseInt(t.css("margin-bottom"),10),i=this.$menu.scrollTop(),s=this.$menu.height()+parseInt(this.$menu.css("padding-top"),10)+parseInt(this.$menu.css("padding-bottom"),10),e<0?this.$menu.scrollTop(i+e):s {"use strict";var i=n(2856),s=n(4910);function r(t){t&&t.el||i.error("EventBus initialized without el"),this.$el=s.element(t.el)}i.mixin(r.prototype,{trigger:function(t,e,n,s){var r=i.Event("autocomplete:"+t);return this.$el.trigger(r,[e,n,s]),r}}),t.exports=r},3109:(t,e,n)=>{"use strict";var i=n(624),s=/\s+/;function r(t,e,n,i){var r;if(!n)return this;for(e=e.split(s),n=i?function(t,e){return t.bind?t.bind(e):function(){t.apply(e,[].slice.call(arguments,0))}}(n,i):n,this._callbacks=this._callbacks||{};r=e.shift();)this._callbacks[r]=this._callbacks[r]||{sync:[],async:[]},this._callbacks[r][t].push(n);return this}function o(t,e,n){return function(){for(var i,s=0,r=t.length;!i&&s {"use strict";t.exports={wrapper:'',dropdown:'',dataset:'',suggestions:'',suggestion:''}},2534:(t,e,n)=>{"use strict";var i;i={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"};var s=n(2856),r=n(4910),o=n(3109);function a(t){var e,n,o,a,u,c=this;(t=t||{}).input||s.error("input is missing"),e=s.bind(this._onBlur,this),n=s.bind(this._onFocus,this),o=s.bind(this._onKeydown,this),a=s.bind(this._onInput,this),this.$hint=r.element(t.hint),this.$input=r.element(t.input).on("blur.aa",e).on("focus.aa",n).on("keydown.aa",o),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=s.noop),s.isMsie()?this.$input.on("keydown.aa keypress.aa cut.aa paste.aa",(function(t){i[t.which||t.keyCode]||s.defer(s.bind(c._onInput,c,t))})):this.$input.on("input.aa",a),this.query=this.$input.val(),this.$overflowHelper=(u=this.$input,r.element('').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:u.css("font-family"),fontSize:u.css("font-size"),fontStyle:u.css("font-style"),fontVariant:u.css("font-variant"),fontWeight:u.css("font-weight"),wordSpacing:u.css("word-spacing"),letterSpacing:u.css("letter-spacing"),textIndent:u.css("text-indent"),textRendering:u.css("text-rendering"),textTransform:u.css("text-transform")}).insertAfter(u))}function u(t){return t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}a.normalizeQuery=function(t){return(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},s.mixin(a.prototype,o,{_onBlur:function(){this.resetInputValue(),this.$input.removeAttr("aria-activedescendant"),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(t){var e=i[t.which||t.keyCode];this._managePreventDefault(e,t),e&&this._shouldTrigger(e,t)&&this.trigger(e+"Keyed",t)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(t,e){var n,i,s;switch(t){case"tab":i=this.getHint(),s=this.getInputValue(),n=i&&i!==s&&!u(e);break;case"up":case"down":n=!u(e);break;default:n=!1}n&&e.preventDefault()},_shouldTrigger:function(t,e){var n;if("tab"===t)n=!u(e);else n=!0;return n},_checkInputValue:function(){var t,e,n,i,s;t=this.getInputValue(),i=t,s=this.query,n=!(!(e=a.normalizeQuery(i)===a.normalizeQuery(s))||!this.query)&&this.query.length!==t.length,this.query=t,e?n&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(t){this.query=t},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){void 0===t&&(t=this.query),this.$input.val(t),e?this.clearHint():this._checkInputValue()},expand:function(){this.$input.attr("aria-expanded","true")},collapse:function(){this.$input.attr("aria-expanded","false")},setActiveDescendant:function(t){this.$input.attr("aria-activedescendant",t)},removeActiveDescendant:function(){this.$input.removeAttr("aria-activedescendant")},resetInputValue:function(){this.setInputValue(this.query,!0)},getHint:function(){return this.$hint.val()},setHint:function(t){this.$hint.val(t)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var t,e,n;n=(t=this.getInputValue())!==(e=this.getHint())&&0===e.indexOf(t),""!==t&&n&&!this.hasOverflow()||this.clearHint()},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},hasOverflow:function(){var t=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=t},isCursorAtEnd:function(){var t,e,n;return t=this.$input.val().length,e=this.$input[0].selectionStart,s.isNumber(e)?e===t:!document.selection||((n=document.selection.createRange()).moveStart("character",-t),t===n.text.length)},destroy:function(){this.$hint.off(".aa"),this.$input.off(".aa"),this.$hint=this.$input=this.$overflowHelper=null}}),t.exports=a},6549:(t,e,n)=>{"use strict";var i="aaAttrs",s=n(2856),r=n(4910),o=n(50),a=n(2534),u=n(3354),c=n(3561),l=n(1228);function h(t){var e,n;if((t=t||{}).input||s.error("missing input"),this.isActivated=!1,this.debug=!!t.debug,this.autoselect=!!t.autoselect,this.autoselectOnBlur=!!t.autoselectOnBlur,this.openOnFocus=!!t.openOnFocus,this.minLength=s.isNumber(t.minLength)?t.minLength:1,this.autoWidth=void 0===t.autoWidth||!!t.autoWidth,this.clearOnSelected=!!t.clearOnSelected,this.tabAutocomplete=void 0===t.tabAutocomplete||!!t.tabAutocomplete,t.hint=!!t.hint,t.hint&&t.appendTo)throw new Error("[autocomplete.js] hint and appendTo options can't be used at the same time");this.css=t.css=s.mixin({},l,t.appendTo?l.appendTo:{}),this.cssClasses=t.cssClasses=s.mixin({},l.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix=s.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),this.listboxId=t.listboxId=[this.cssClasses.root,"listbox",s.getUniqueId()].join("-");var a=function(t){var e,n,o,a;e=r.element(t.input),n=r.element(c.wrapper.replace("%ROOT%",t.cssClasses.root)).css(t.css.wrapper),t.appendTo||"block"!==e.css("display")||"table"!==e.parent().css("display")||n.css("display","table-cell");var u=c.dropdown.replace("%PREFIX%",t.cssClasses.prefix).replace("%DROPDOWN_MENU%",t.cssClasses.dropdownMenu);o=r.element(u).css(t.css.dropdown).attr({role:"listbox",id:t.listboxId}),t.templates&&t.templates.dropdownMenu&&o.html(s.templatify(t.templates.dropdownMenu)());a=e.clone().css(t.css.hint).css(function(t){return{backgroundAttachment:t.css("background-attachment"),backgroundClip:t.css("background-clip"),backgroundColor:t.css("background-color"),backgroundImage:t.css("background-image"),backgroundOrigin:t.css("background-origin"),backgroundPosition:t.css("background-position"),backgroundRepeat:t.css("background-repeat"),backgroundSize:t.css("background-size")}}(e)),a.val("").addClass(s.className(t.cssClasses.prefix,t.cssClasses.hint,!0)).removeAttr("id name placeholder required").prop("readonly",!0).attr({"aria-hidden":"true",autocomplete:"off",spellcheck:"false",tabindex:-1}),a.removeData&&a.removeData();e.data(i,{"aria-autocomplete":e.attr("aria-autocomplete"),"aria-expanded":e.attr("aria-expanded"),"aria-owns":e.attr("aria-owns"),autocomplete:e.attr("autocomplete"),dir:e.attr("dir"),role:e.attr("role"),spellcheck:e.attr("spellcheck"),style:e.attr("style"),type:e.attr("type")}),e.addClass(s.className(t.cssClasses.prefix,t.cssClasses.input,!0)).attr({autocomplete:"off",spellcheck:!1,role:"combobox","aria-autocomplete":t.datasets&&t.datasets[0]&&t.datasets[0].displayKey?"both":"list","aria-expanded":"false","aria-label":t.ariaLabel,"aria-owns":t.listboxId}).css(t.hint?t.css.input:t.css.inputWithNoHint);try{e.attr("dir")||e.attr("dir","auto")}catch(l){}return n=t.appendTo?n.appendTo(r.element(t.appendTo).eq(0)).eq(0):e.wrap(n).parent(),n.prepend(t.hint?a:null).append(o),{wrapper:n,input:e,hint:a,menu:o}}(t);this.$node=a.wrapper;var u=this.$input=a.input;e=a.menu,n=a.hint,t.dropdownMenuContainer&&r.element(t.dropdownMenuContainer).css("position","relative").append(e.css("top","0")),u.on("blur.aa",(function(t){var n=document.activeElement;s.isMsie()&&(e[0]===n||e[0].contains(n))&&(t.preventDefault(),t.stopImmediatePropagation(),s.defer((function(){u.focus()})))})),e.on("mousedown.aa",(function(t){t.preventDefault()})),this.eventBus=t.eventBus||new o({el:u}),this.dropdown=new h.Dropdown({appendTo:t.appendTo,wrapper:this.$node,menu:e,datasets:t.datasets,templates:t.templates,cssClasses:t.cssClasses,minLength:this.minLength}).onSync("suggestionClicked",this._onSuggestionClicked,this).onSync("cursorMoved",this._onCursorMoved,this).onSync("cursorRemoved",this._onCursorRemoved,this).onSync("opened",this._onOpened,this).onSync("closed",this._onClosed,this).onSync("shown",this._onShown,this).onSync("empty",this._onEmpty,this).onSync("redrawn",this._onRedrawn,this).onAsync("datasetRendered",this._onDatasetRendered,this),this.input=new h.Input({input:u,hint:n}).onSync("focused",this._onFocused,this).onSync("blurred",this._onBlurred,this).onSync("enterKeyed",this._onEnterKeyed,this).onSync("tabKeyed",this._onTabKeyed,this).onSync("escKeyed",this._onEscKeyed,this).onSync("upKeyed",this._onUpKeyed,this).onSync("downKeyed",this._onDownKeyed,this).onSync("leftKeyed",this._onLeftKeyed,this).onSync("rightKeyed",this._onRightKeyed,this).onSync("queryChanged",this._onQueryChanged,this).onSync("whitespaceChanged",this._onWhitespaceChanged,this),this._bindKeyboardShortcuts(t),this._setLanguageDirection()}s.mixin(h.prototype,{_bindKeyboardShortcuts:function(t){if(t.keyboardShortcuts){var e=this.$input,n=[];s.each(t.keyboardShortcuts,(function(t){"string"==typeof t&&(t=t.toUpperCase().charCodeAt(0)),n.push(t)})),r.element(document).keydown((function(t){var i=t.target||t.srcElement,s=i.tagName;if(!i.isContentEditable&&"INPUT"!==s&&"SELECT"!==s&&"TEXTAREA"!==s){var r=t.which||t.keyCode;-1!==n.indexOf(r)&&(e.focus(),t.stopPropagation(),t.preventDefault())}}))}},_onSuggestionClicked:function(t,e){var n;(n=this.dropdown.getDatumForSuggestion(e))&&this._select(n,{selectionMethod:"click"})},_onCursorMoved:function(t,e){var n=this.dropdown.getDatumForCursor(),i=this.dropdown.getCurrentCursor().attr("id");this.input.setActiveDescendant(i),n&&(e&&this.input.setInputValue(n.value,!0),this.eventBus.trigger("cursorchanged",n.raw,n.datasetName))},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint(),this.eventBus.trigger("cursorremoved")},_onDatasetRendered:function(){this._updateHint(),this.eventBus.trigger("updated")},_onOpened:function(){this._updateHint(),this.input.expand(),this.eventBus.trigger("opened")},_onEmpty:function(){this.eventBus.trigger("empty")},_onRedrawn:function(){this.$node.css("top","0px"),this.$node.css("left","0px");var t=this.$input[0].getBoundingClientRect();this.autoWidth&&this.$node.css("width",t.width+"px");var e=this.$node[0].getBoundingClientRect(),n=t.bottom-e.top;this.$node.css("top",n+"px");var i=t.left-e.left;this.$node.css("left",i+"px"),this.eventBus.trigger("redrawn")},_onShown:function(){this.eventBus.trigger("shown"),this.autoselect&&this.dropdown.cursorTopSuggestion()},_onClosed:function(){this.input.clearHint(),this.input.removeActiveDescendant(),this.input.collapse(),this.eventBus.trigger("closed")},_onFocused:function(){if(this.isActivated=!0,this.openOnFocus){var t=this.input.getQuery();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty(),this.dropdown.open()}},_onBlurred:function(){var t,e;t=this.dropdown.getDatumForCursor(),e=this.dropdown.getDatumForTopSuggestion();var n={selectionMethod:"blur"};this.debug||(this.autoselectOnBlur&&t?this._select(t,n):this.autoselectOnBlur&&e?this._select(e,n):(this.isActivated=!1,this.dropdown.empty(),this.dropdown.close()))},_onEnterKeyed:function(t,e){var n,i;n=this.dropdown.getDatumForCursor(),i=this.dropdown.getDatumForTopSuggestion();var s={selectionMethod:"enterKey"};n?(this._select(n,s),e.preventDefault()):this.autoselect&&i&&(this._select(i,s),e.preventDefault())},_onTabKeyed:function(t,e){if(this.tabAutocomplete){var n;(n=this.dropdown.getDatumForCursor())?(this._select(n,{selectionMethod:"tabKey"}),e.preventDefault()):this._autocomplete(!0)}else this.dropdown.close()},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorUp(),this.dropdown.open()},_onDownKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorDown(),this.dropdown.open()},_onLeftKeyed:function(){"rtl"===this.dir&&this._autocomplete()},_onRightKeyed:function(){"ltr"===this.dir&&this._autocomplete()},_onQueryChanged:function(t,e){this.input.clearHintIfInvalid(),e.length>=this.minLength?this.dropdown.update(e):this.dropdown.empty(),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var t=this.input.getLanguageDirection();this.dir!==t&&(this.dir=t,this.$node.css("direction",t),this.dropdown.setLanguageDirection(t))},_updateHint:function(){var t,e,n,i,r;(t=this.dropdown.getDatumForTopSuggestion())&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(e=this.input.getInputValue(),n=a.normalizeQuery(e),i=s.escapeRegExChars(n),(r=new RegExp("^(?:"+i+")(.+$)","i").exec(t.value))?this.input.setHint(e+r[1]):this.input.clearHint()):this.input.clearHint()},_autocomplete:function(t){var e,n,i,s;e=this.input.getHint(),n=this.input.getQuery(),i=t||this.input.isCursorAtEnd(),e&&n!==e&&i&&((s=this.dropdown.getDatumForTopSuggestion())&&this.input.setInputValue(s.value),this.eventBus.trigger("autocompleted",s.raw,s.datasetName))},_select:function(t,e){void 0!==t.value&&this.input.setQuery(t.value),this.clearOnSelected?this.setVal(""):this.input.setInputValue(t.value,!0),this._setLanguageDirection(),!1===this.eventBus.trigger("selected",t.raw,t.datasetName,e).isDefaultPrevented()&&(this.dropdown.close(),s.defer(s.bind(this.dropdown.empty,this.dropdown)))},open:function(){if(!this.isActivated){var t=this.input.getInputValue();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty()}this.dropdown.open()},close:function(){this.dropdown.close()},setVal:function(t){t=s.toStr(t),this.isActivated?this.input.setInputValue(t):(this.input.setQuery(t),this.input.setInputValue(t,!0)),this._setLanguageDirection()},getVal:function(){return this.input.getQuery()},destroy:function(){this.input.destroy(),this.dropdown.destroy(),function(t,e){var n=t.find(s.className(e.prefix,e.input));s.each(n.data(i),(function(t,e){void 0===t?n.removeAttr(e):n.attr(e,t)})),n.detach().removeClass(s.className(e.prefix,e.input,!0)).insertAfter(t),n.removeData&&n.removeData(i);t.remove()}(this.$node,this.cssClasses),this.$node=null},getWrapper:function(){return this.dropdown.$container[0]}}),h.Dropdown=u,h.Input=a,h.sources=n(8840),t.exports=h},4910:t=>{"use strict";t.exports={element:null}},6177:t=>{"use strict";t.exports=function(t){var e=t.match(/Algolia for JavaScript \((\d+\.)(\d+\.)(\d+)\)/)||t.match(/Algolia for vanilla JavaScript (\d+\.)(\d+\.)(\d+)/);if(e)return[e[1],e[2],e[3]]}},2856:(t,e,n)=>{"use strict";var i,s=n(8820),r=n(4910);function o(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}t.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(t){if(void 0===t&&(t=navigator.userAgent),/(msie|trident)/i.test(t)){var e=t.match(/(msie |rv:)(\d+(.\d+)?)/i);if(e)return e[2]}return!1},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(t){return"number"==typeof t},toStr:function(t){return null==t?"":t+""},cloneDeep:function(t){var e=this.mixin({},t),n=this;return this.each(e,(function(t,i){t&&(n.isArray(t)?e[i]=[].concat(t):n.isObject(t)&&(e[i]=n.cloneDeep(t)))})),e},error:function(t){throw new Error(t)},every:function(t,e){var n=!0;return t?(this.each(t,(function(i,s){n&&(n=e.call(null,i,s,t)&&n)})),!!n):n},any:function(t,e){var n=!1;return t?(this.each(t,(function(i,s){if(e.call(null,i,s,t))return n=!0,!1})),n):n},getUniqueId:(i=0,function(){return i++}),templatify:function(t){if(this.isFunction(t))return t;var e=r.element(t);return"SCRIPT"===e.prop("tagName")?function(){return e.text()}:function(){return String(t)}},defer:function(t){setTimeout(t,0)},noop:function(){},formatPrefix:function(t,e){return e?"":t+"-"},className:function(t,e,n){return n?t+e:"."+s(t+e,{isIdentifier:!0})},escapeHighlightedString:function(t,e,n){e=e||"";var i=document.createElement("div");i.appendChild(document.createTextNode(e)),n=n||"";var s=document.createElement("div");s.appendChild(document.createTextNode(n));var r=document.createElement("div");return r.appendChild(document.createTextNode(t)),r.innerHTML.replace(RegExp(o(i.innerHTML),"g"),e).replace(RegExp(o(s.innerHTML),"g"),n)}}},9983:(t,e,n)=>{"use strict";var i=n(2856),s=n(533),r=n(6177);var o,a,u=(o=[],a=window.Promise.resolve(),function(t,e){return function(n,s){(function(t,e){return window.Promise.resolve().then((function(){return o.length&&(a=t.search(o),o=[]),a})).then((function(t){if(t)return t.results[e]}))})(t.as,o.push({indexName:t.indexName,query:n,params:e})-1).then((function(t){t&&s(t.hits,t)})).catch((function(t){i.error(t.message)}))}});t.exports=function(t,e){var n=r(t.as._ua);if(n&&n[0]>=3&&n[1]>20){var i="autocomplete.js "+s;-1===t.as._ua.indexOf(i)&&(t.as._ua+="; "+i)}return u(t,e)}},8840:(t,e,n)=>{"use strict";t.exports={hits:n(9983),popularIn:n(4445)}},4445:(t,e,n)=>{"use strict";var i=n(2856),s=n(533),r=n(6177);t.exports=function(t,e,n,o){var a=r(t.as._ua);if(a&&a[0]>=3&&a[1]>20&&((e=e||{}).additionalUA="autocomplete.js "+s),!n.source)return i.error("Missing 'source' key");var u=i.isFunction(n.source)?n.source:function(t){return t[n.source]};if(!n.index)return i.error("Missing 'index' key");var c=n.index;return o=o||{},function(a,l){t.search(a,e,(function(t,a){if(t)i.error(t.message);else{if(a.hits.length>0){var h=a.hits[0],p=i.mixin({hitsPerPage:0},n);delete p.source,delete p.index;var f=r(c.as._ua);return f&&f[0]>=3&&f[1]>20&&(e.additionalUA="autocomplete.js "+s),void c.search(u(h),p,(function(t,e){if(t)i.error(t.message);else{var n=[];if(o.includeAll){var s=o.allTitle||"All departments";n.push(i.mixin({facet:{value:s,count:e.nbHits}},i.cloneDeep(h)))}i.each(e.facets,(function(t,e){i.each(t,(function(t,s){n.push(i.mixin({facet:{facet:e,value:s,count:t}},i.cloneDeep(h)))}))}));for(var r=1;r {"use strict";var i=n(6990);n(4910).element=i;var s=n(2856);s.isArray=i.isArray,s.isFunction=i.isFunction,s.isObject=i.isPlainObject,s.bind=i.proxy,s.each=function(t,e){i.each(t,(function(t,n){return e(n,t)}))},s.map=i.map,s.mixin=i.extend,s.Event=i.Event;var r="aaAutocomplete",o=n(6549),a=n(50);function u(t,e,n,u){n=s.isArray(n)?n:[].slice.call(arguments,2);var c=i(t).each((function(t,s){var c=i(s),l=new a({el:c}),h=u||new o({input:c,eventBus:l,dropdownMenuContainer:e.dropdownMenuContainer,hint:void 0===e.hint||!!e.hint,minLength:e.minLength,autoselect:e.autoselect,autoselectOnBlur:e.autoselectOnBlur,tabAutocomplete:e.tabAutocomplete,openOnFocus:e.openOnFocus,templates:e.templates,debug:e.debug,clearOnSelected:e.clearOnSelected,cssClasses:e.cssClasses,datasets:n,keyboardShortcuts:e.keyboardShortcuts,appendTo:e.appendTo,autoWidth:e.autoWidth,ariaLabel:e.ariaLabel||s.getAttribute("aria-label")});c.data(r,h)}));return c.autocomplete={},s.each(["open","close","getVal","setVal","destroy","getWrapper"],(function(t){c.autocomplete[t]=function(){var e,n=arguments;return c.each((function(s,o){var a=i(o).data(r);e=a[t].apply(a,n)})),e}})),c}u.sources=o.sources,u.escapeHighlightedString=s.escapeHighlightedString;var c="autocomplete"in window,l=window.autocomplete;u.noConflict=function(){return c?window.autocomplete=l:delete window.autocomplete,u},t.exports=u},533:t=>{t.exports="0.38.1"},6990:t=>{var e;e=window,t.exports=function(t){var e,n,i=function(){var e,n,i,s,r,o,a=[],u=a.concat,c=a.filter,l=a.slice,h=t.document,p={},f={},d={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},g=/^\s*<(\w+|!)[^>]*>/,m=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,y=/^(?:body|html)$/i,w=/([A-Z])/g,b=["val","css","html","text","data","width","height","offset"],C=["after","prepend","before","append"],x=h.createElement("table"),_=h.createElement("tr"),S={tr:h.createElement("tbody"),tbody:x,thead:x,tfoot:x,td:_,th:_,"*":h.createElement("div")},E=/complete|loaded|interactive/,A=/^[\w-]*$/,$={},T=$.toString,O={},D=h.createElement("div"),N={tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},k=Array.isArray||function(t){return t instanceof Array};function I(t){return null==t?String(t):$[T.call(t)]||"object"}function P(t){return"function"==I(t)}function L(t){return null!=t&&t==t.window}function M(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function F(t){return"object"==I(t)}function R(t){return F(t)&&!L(t)&&Object.getPrototypeOf(t)==Object.prototype}function q(t){var e=!!t&&"length"in t&&t.length,n=i.type(t);return"function"!=n&&!L(t)&&("array"==n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function V(t){return c.call(t,(function(t){return null!=t}))}function H(t){return t.length>0?i.fn.concat.apply([],t):t}function B(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function K(t){return t in f?f[t]:f[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function j(t,e){return"number"!=typeof e||d[B(t)]?e:e+"px"}function z(t){var e,n;return p[t]||(e=h.createElement(t),h.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),p[t]=n),p[t]}function U(t){return"children"in t?l.call(t.children):i.map(t.childNodes,(function(t){if(1==t.nodeType)return t}))}function Q(t,e){var n,i=t?t.length:0;for(n=0;n$2>")),n===e&&(n=g.test(t)&&RegExp.$1),n in S||(n="*"),(a=S[n]).innerHTML=""+t,r=i.each(l.call(a.childNodes),(function(){a.removeChild(this)}))),R(s)&&(o=i(r),i.each(s,(function(t,e){b.indexOf(t)>-1?o[t](e):o.attr(t,e)}))),r},O.Z=function(t,e){return new Q(t,e)},O.isZ=function(t){return t instanceof O.Z},O.init=function(t,n){var s;if(!t)return O.Z();if("string"==typeof t)if("<"==(t=t.trim())[0]&&g.test(t))s=O.fragment(t,RegExp.$1,n),t=null;else{if(n!==e)return i(n).find(t);s=O.qsa(h,t)}else{if(P(t))return i(h).ready(t);if(O.isZ(t))return t;if(k(t))s=V(t);else if(F(t))s=[t],t=null;else if(g.test(t))s=O.fragment(t.trim(),RegExp.$1,n),t=null;else{if(n!==e)return i(n).find(t);s=O.qsa(h,t)}}return O.Z(s,t)},(i=function(t,e){return O.init(t,e)}).extend=function(t){var e,n=l.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach((function(n){W(t,n,e)})),t},O.qsa=function(t,e){var n,i="#"==e[0],s=!i&&"."==e[0],r=i||s?e.slice(1):e,o=A.test(r);return t.getElementById&&o&&i?(n=t.getElementById(r))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:l.call(o&&!i&&t.getElementsByClassName?s?t.getElementsByClassName(r):t.getElementsByTagName(e):t.querySelectorAll(e))},i.contains=h.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},i.type=I,i.isFunction=P,i.isWindow=L,i.isArray=k,i.isPlainObject=R,i.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},i.isNumeric=function(t){var e=Number(t),n=typeof t;return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},i.inArray=function(t,e,n){return a.indexOf.call(e,t,n)},i.camelCase=r,i.trim=function(t){return null==t?"":String.prototype.trim.call(t)},i.uuid=0,i.support={},i.expr={},i.noop=function(){},i.map=function(t,e){var n,i,s,r=[];if(q(t))for(i=0;i =0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each((function(){null!=this.parentNode&&this.parentNode.removeChild(this)}))},each:function(t){return a.every.call(this,(function(e,n){return!1!==t.call(e,n,e)})),this},filter:function(t){return P(t)?this.not(this.not(t)):i(c.call(this,(function(e){return O.matches(e,t)})))},add:function(t,e){return i(o(this.concat(i(t,e))))},is:function(t){return this.length>0&&O.matches(this[0],t)},not:function(t){var n=[];if(P(t)&&t.call!==e)this.each((function(e){t.call(this,e)||n.push(this)}));else{var s="string"==typeof t?this.filter(t):q(t)&&P(t.item)?l.call(t):i(t);this.forEach((function(t){s.indexOf(t)<0&&n.push(t)}))}return i(n)},has:function(t){return this.filter((function(){return F(t)?i.contains(this,t):i(this).find(t).size()}))},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!F(t)?t:i(t)},last:function(){var t=this[this.length-1];return t&&!F(t)?t:i(t)},find:function(t){var e=this;return t?"object"==typeof t?i(t).filter((function(){var t=this;return a.some.call(e,(function(e){return i.contains(e,t)}))})):1==this.length?i(O.qsa(this[0],t)):this.map((function(){return O.qsa(this,t)})):i()},closest:function(t,e){var n=[],s="object"==typeof t&&i(t);return this.each((function(i,r){for(;r&&!(s?s.indexOf(r)>=0:O.matches(r,t));)r=r!==e&&!M(r)&&r.parentNode;r&&n.indexOf(r)<0&&n.push(r)})),i(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=i.map(n,(function(t){if((t=t.parentNode)&&!M(t)&&e.indexOf(t)<0)return e.push(t),t}));return Z(e,t)},parent:function(t){return Z(o(this.pluck("parentNode")),t)},children:function(t){return Z(this.map((function(){return U(this)})),t)},contents:function(){return this.map((function(){return this.contentDocument||l.call(this.childNodes)}))},siblings:function(t){return Z(this.map((function(t,e){return c.call(U(e.parentNode),(function(t){return t!==e}))})),t)},empty:function(){return this.each((function(){this.innerHTML=""}))},pluck:function(t){return i.map(this,(function(e){return e[t]}))},show:function(){return this.each((function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=z(this.nodeName))}))},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=P(t);if(this[0]&&!e)var n=i(t).get(0),s=n.parentNode||this.length>1;return this.each((function(r){i(this).wrapAll(e?t.call(this,r):s?n.cloneNode(!0):n)}))},wrapAll:function(t){if(this[0]){var e;for(i(this[0]).before(t=i(t));(e=t.children()).length;)t=e.first();i(t).append(this)}return this},wrapInner:function(t){var e=P(t);return this.each((function(n){var s=i(this),r=s.contents(),o=e?t.call(this,n):t;r.length?r.wrapAll(o):s.append(o)}))},unwrap:function(){return this.parent().each((function(){i(this).replaceWith(i(this).children())})),this},clone:function(){return this.map((function(){return this.cloneNode(!0)}))},hide:function(){return this.css("display","none")},toggle:function(t){return this.each((function(){var n=i(this);(t===e?"none"==n.css("display"):t)?n.show():n.hide()}))},prev:function(t){return i(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return i(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each((function(e){var n=this.innerHTML;i(this).empty().append(X(this,t,e,n))})):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each((function(e){var n=X(this,t,e,this.textContent);this.textContent=null==n?"":""+n})):0 in this?this.pluck("textContent").join(""):null},attr:function(t,i){var s;return"string"!=typeof t||1 in arguments?this.each((function(e){if(1===this.nodeType)if(F(t))for(n in t)G(this,n,t[n]);else G(this,t,X(this,i,e,this.getAttribute(t)))})):0 in this&&1==this[0].nodeType&&null!=(s=this[0].getAttribute(t))?s:e},removeAttr:function(t){return this.each((function(){1===this.nodeType&&t.split(" ").forEach((function(t){G(this,t)}),this)}))},prop:function(t,e){return t=N[t]||t,1 in arguments?this.each((function(n){this[t]=X(this,e,n,this[t])})):this[0]&&this[0][t]},removeProp:function(t){return t=N[t]||t,this.each((function(){delete this[t]}))},data:function(t,n){var i="data-"+t.replace(w,"-$1").toLowerCase(),s=1 in arguments?this.attr(i,n):this.attr(i);return null!==s?Y(s):e},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each((function(e){this.value=X(this,t,e,this.value)}))):this[0]&&(this[0].multiple?i(this[0]).find("option").filter((function(){return this.selected})).pluck("value"):this[0].value)},offset:function(e){if(e)return this.each((function(t){var n=i(this),s=X(this,e,t,n.offset()),r=n.offsetParent().offset(),o={top:s.top-r.top,left:s.left-r.left};"static"==n.css("position")&&(o.position="relative"),n.css(o)}));if(!this.length)return null;if(h.documentElement!==this[0]&&!i.contains(h.documentElement,this[0]))return{top:0,left:0};var n=this[0].getBoundingClientRect();return{left:n.left+t.pageXOffset,top:n.top+t.pageYOffset,width:Math.round(n.width),height:Math.round(n.height)}},css:function(t,e){if(arguments.length<2){var s=this[0];if("string"==typeof t){if(!s)return;return s.style[r(t)]||getComputedStyle(s,"").getPropertyValue(t)}if(k(t)){if(!s)return;var o={},a=getComputedStyle(s,"");return i.each(t,(function(t,e){o[e]=s.style[r(e)]||a.getPropertyValue(e)})),o}}var u="";if("string"==I(t))e||0===e?u=B(t)+":"+j(t,e):this.each((function(){this.style.removeProperty(B(t))}));else for(n in t)t[n]||0===t[n]?u+=B(n)+":"+j(n,t[n])+";":this.each((function(){this.style.removeProperty(B(n))}));return this.each((function(){this.style.cssText+=";"+u}))},index:function(t){return t?this.indexOf(i(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return!!t&&a.some.call(this,(function(t){return this.test(J(t))}),K(t))},addClass:function(t){return t?this.each((function(e){if("className"in this){s=[];var n=J(this);X(this,t,e,n).split(/\s+/g).forEach((function(t){i(this).hasClass(t)||s.push(t)}),this),s.length&&J(this,n+(n?" ":"")+s.join(" "))}})):this},removeClass:function(t){return this.each((function(n){if("className"in this){if(t===e)return J(this,"");s=J(this),X(this,t,n,s).split(/\s+/g).forEach((function(t){s=s.replace(K(t)," ")})),J(this,s.trim())}}))},toggleClass:function(t,n){return t?this.each((function(s){var r=i(this);X(this,t,s,J(this)).split(/\s+/g).forEach((function(t){(n===e?!r.hasClass(t):n)?r.addClass(t):r.removeClass(t)}))})):this},scrollTop:function(t){if(this.length){var n="scrollTop"in this[0];return t===e?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var n="scrollLeft"in this[0];return t===e?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),s=y.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(i(t).css("margin-top"))||0,n.left-=parseFloat(i(t).css("margin-left"))||0,s.top+=parseFloat(i(e[0]).css("border-top-width"))||0,s.left+=parseFloat(i(e[0]).css("border-left-width"))||0,{top:n.top-s.top,left:n.left-s.left}}},offsetParent:function(){return this.map((function(){for(var t=this.offsetParent||h.body;t&&!y.test(t.nodeName)&&"static"==i(t).css("position");)t=t.offsetParent;return t}))}},i.fn.detach=i.fn.remove,["width","height"].forEach((function(t){var n=t.replace(/./,(function(t){return t[0].toUpperCase()}));i.fn[t]=function(s){var r,o=this[0];return s===e?L(o)?o["inner"+n]:M(o)?o.documentElement["scroll"+n]:(r=this.offset())&&r[t]:this.each((function(e){(o=i(this)).css(t,X(this,s,e,o[t]()))}))}})),C.forEach((function(n,s){var r=s%2;i.fn[n]=function(){var n,o,a=i.map(arguments,(function(t){var s=[];return"array"==(n=I(t))?(t.forEach((function(t){return t.nodeType!==e?s.push(t):i.zepto.isZ(t)?s=s.concat(t.get()):void(s=s.concat(O.fragment(t)))})),s):"object"==n||null==t?t:O.fragment(t)})),u=this.length>1;return a.length<1?this:this.each((function(e,n){o=r?n:n.parentNode,n=0==s?n.nextSibling:1==s?n.firstChild:2==s?n:null;var c=i.contains(h.documentElement,o);a.forEach((function(e){if(u)e=e.cloneNode(!0);else if(!o)return i(e).remove();o.insertBefore(e,n),c&&tt(e,(function(e){if(!(null==e.nodeName||"SCRIPT"!==e.nodeName.toUpperCase()||e.type&&"text/javascript"!==e.type||e.src)){var n=e.ownerDocument?e.ownerDocument.defaultView:t;n.eval.call(n,e.innerHTML)}}))}))}))},i.fn[r?n+"To":"insert"+(s?"Before":"After")]=function(t){return i(t)[n](this),this}})),O.Z.prototype=Q.prototype=i.fn,O.uniq=o,O.deserializeValue=Y,i.zepto=O,i}();return function(e){var n,i=1,s=Array.prototype.slice,r=e.isFunction,o=function(t){return"string"==typeof t},a={},u={},c="onfocusin"in t,l={focus:"focusin",blur:"focusout"},h={mouseenter:"mouseover",mouseleave:"mouseout"};function p(t){return t._zid||(t._zid=i++)}function f(t,e,n,i){if((e=d(e)).ns)var s=g(e.ns);return(a[p(t)]||[]).filter((function(t){return t&&(!e.e||t.e==e.e)&&(!e.ns||s.test(t.ns))&&(!n||p(t.fn)===p(n))&&(!i||t.sel==i)}))}function d(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function g(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function m(t,e){return t.del&&!c&&t.e in l||!!e}function v(t){return h[t]||c&&l[t]||t}function y(t,i,s,r,o,u,c){var l=p(t),f=a[l]||(a[l]=[]);i.split(/\s/).forEach((function(i){if("ready"==i)return e(document).ready(s);var a=d(i);a.fn=s,a.sel=o,a.e in h&&(s=function(t){var n=t.relatedTarget;if(!n||n!==this&&!e.contains(this,n))return a.fn.apply(this,arguments)}),a.del=u;var l=u||s;a.proxy=function(e){if(!(e=S(e)).isImmediatePropagationStopped()){try{var i=Object.getOwnPropertyDescriptor(e,"data");i&&!i.writable||(e.data=r)}catch(e){}var s=l.apply(t,e._args==n?[e]:[e].concat(e._args));return!1===s&&(e.preventDefault(),e.stopPropagation()),s}},a.i=f.length,f.push(a),"addEventListener"in t&&t.addEventListener(v(a.e),a.proxy,m(a,c))}))}function w(t,e,n,i,s){var r=p(t);(e||"").split(/\s/).forEach((function(e){f(t,e,n,i).forEach((function(e){delete a[r][e.i],"removeEventListener"in t&&t.removeEventListener(v(e.e),e.proxy,m(e,s))}))}))}u.click=u.mousedown=u.mouseup=u.mousemove="MouseEvents",e.event={add:y,remove:w},e.proxy=function(t,n){var i=2 in arguments&&s.call(arguments,2);if(r(t)){var a=function(){return t.apply(n,i?i.concat(s.call(arguments)):arguments)};return a._zid=p(t),a}if(o(n))return i?(i.unshift(t[n],t),e.proxy.apply(null,i)):e.proxy(t[n],t);throw new TypeError("expected function")},e.fn.bind=function(t,e,n){return this.on(t,e,n)},e.fn.unbind=function(t,e){return this.off(t,e)},e.fn.one=function(t,e,n,i){return this.on(t,e,n,i,1)};var b=function(){return!0},C=function(){return!1},x=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,_={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};function S(t,i){if(i||!t.isDefaultPrevented){i||(i=t),e.each(_,(function(e,n){var s=i[e];t[e]=function(){return this[n]=b,s&&s.apply(i,arguments)},t[n]=C}));try{t.timeStamp||(t.timeStamp=Date.now())}catch(s){}(i.defaultPrevented!==n?i.defaultPrevented:"returnValue"in i?!1===i.returnValue:i.getPreventDefault&&i.getPreventDefault())&&(t.isDefaultPrevented=b)}return t}function E(t){var e,i={originalEvent:t};for(e in t)x.test(e)||t[e]===n||(i[e]=t[e]);return S(i,t)}e.fn.delegate=function(t,e,n){return this.on(e,t,n)},e.fn.undelegate=function(t,e,n){return this.off(e,t,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(t,i,a,u,c){var l,h,p=this;return t&&!o(t)?(e.each(t,(function(t,e){p.on(t,i,a,e,c)})),p):(o(i)||r(u)||!1===u||(u=a,a=i,i=n),u!==n&&!1!==a||(u=a,a=n),!1===u&&(u=C),p.each((function(n,r){c&&(l=function(t){return w(r,t.type,u),u.apply(this,arguments)}),i&&(h=function(t){var n,o=e(t.target).closest(i,r).get(0);if(o&&o!==r)return n=e.extend(E(t),{currentTarget:o,liveFired:r}),(l||u).apply(o,[n].concat(s.call(arguments,1)))}),y(r,t,u,a,i,h||l)})))},e.fn.off=function(t,i,s){var a=this;return t&&!o(t)?(e.each(t,(function(t,e){a.off(t,i,e)})),a):(o(i)||r(s)||!1===s||(s=i,i=n),!1===s&&(s=C),a.each((function(){w(this,t,s,i)})))},e.fn.trigger=function(t,n){return(t=o(t)||e.isPlainObject(t)?e.Event(t):S(t))._args=n,this.each((function(){t.type in l&&"function"==typeof this[t.type]?this[t.type]():"dispatchEvent"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)}))},e.fn.triggerHandler=function(t,n){var i,s;return this.each((function(r,a){(i=E(o(t)?e.Event(t):t))._args=n,i.target=a,e.each(f(a,t.type||t),(function(t,e){if(s=e.proxy(i),i.isImmediatePropagationStopped())return!1}))})),s},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach((function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}})),e.Event=function(t,e){o(t)||(t=(e=t).type);var n=document.createEvent(u[t]||"Events"),i=!0;if(e)for(var s in e)"bubbles"==s?i=!!e[s]:n[s]=e[s];return n.initEvent(t,i,!0),S(n)}}(i),n=[],i.fn.remove=function(){return this.each((function(){this.parentNode&&("IMG"===this.tagName&&(n.push(this),this.src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",e&&clearTimeout(e),e=setTimeout((function(){n=[]}),6e4)),this.parentNode.removeChild(this))}))},function(t){var e={},n=t.fn.data,i=t.camelCase,s=t.expando="Zepto"+ +new Date,r=[];function o(r,o){var u=r[s],c=u&&e[u];if(void 0===o)return c||a(r);if(c){if(o in c)return c[o];var l=i(o);if(l in c)return c[l]}return n.call(t(r),o)}function a(n,r,o){var a=n[s]||(n[s]=++t.uuid),c=e[a]||(e[a]=u(n));return void 0!==r&&(c[i(r)]=o),c}function u(e){var n={};return t.each(e.attributes||r,(function(e,s){0==s.name.indexOf("data-")&&(n[i(s.name.replace("data-",""))]=t.zepto.deserializeValue(s.value))})),n}t.fn.data=function(e,n){return void 0===n?t.isPlainObject(e)?this.each((function(n,i){t.each(e,(function(t,e){a(i,t,e)}))})):0 in this?o(this[0],e):void 0:this.each((function(){a(this,e,n)}))},t.data=function(e,n,i){return t(e).data(n,i)},t.hasData=function(n){var i=n[s],r=i&&e[i];return!!r&&!t.isEmptyObject(r)},t.fn.removeData=function(n){return"string"==typeof n&&(n=n.split(/\s+/)),this.each((function(){var r=this[s],o=r&&e[r];o&&t.each(n||o,(function(t){delete o[n?i(this):t]}))}))},["remove","empty"].forEach((function(e){var n=t.fn[e];t.fn[e]=function(){var t=this.find("*");return"remove"===e&&(t=t.add(this)),t.removeData(),n.call(this)}}))}(i),i}(e)},8820:t=>{"use strict";var e={}.hasOwnProperty,n=/[ -,\.\/:-@\[-\^`\{-~]/,i=/[ -,\.\/:-@\[\]\^`\{-~]/,s=/(^|\\+)?(\\[A-F0-9]{1,6})\x20(?![a-fA-F0-9\x20])/g,r=function t(r,o){"single"!=(o=function(t,n){if(!t)return n;var i={};for(var s in n)i[s]=e.call(t,s)?t[s]:n[s];return i}(o,t.options)).quotes&&"double"!=o.quotes&&(o.quotes="single");for(var a="double"==o.quotes?'"':"'",u=o.isIdentifier,c=r.charAt(0),l="",h=0,p=r.length;h 126){if(d>=55296&&d<=56319&&h
{"use strict";var i,s,r,o=[n(5525),n(4785),n(8291),n(2709),n(2506),n(9176)],a=-1,u=[],c=!1;function l(){i&&s&&(i=!1,s.length?u=s.concat(u):a=-1,u.length&&h())}function h(){if(!i){c=!1,i=!0;for(var t=u.length,e=setTimeout(l);t;){for(s=u,u=[];s&&++a
1)for(var n=1;n {"use strict";e.test=function(){return!n.g.setImmediate&&void 0!==n.g.MessageChannel},e.install=function(t){var e=new n.g.MessageChannel;return e.port1.onmessage=t,function(){e.port2.postMessage(0)}}},8291:(t,e,n)=>{"use strict";var i=n.g.MutationObserver||n.g.WebKitMutationObserver;e.test=function(){return i},e.install=function(t){var e=0,s=new i(t),r=n.g.document.createTextNode("");return s.observe(r,{characterData:!0}),function(){r.data=e=++e%2}}},4785:(t,e,n)=>{"use strict";e.test=function(){return"function"==typeof n.g.queueMicrotask},e.install=function(t){return function(){n.g.queueMicrotask(t)}}},2506:(t,e,n)=>{"use strict";e.test=function(){return"document"in n.g&&"onreadystatechange"in n.g.document.createElement("script")},e.install=function(t){return function(){var e=n.g.document.createElement("script");return e.onreadystatechange=function(){t(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},n.g.document.documentElement.appendChild(e),t}}},9176:(t,e)=>{"use strict";e.test=function(){return!0},e.install=function(t){return function(){setTimeout(t,0)}}}}]); \ No newline at end of file diff --git a/assets/js/8443.6d2e563d.js.LICENSE.txt b/assets/js/8443.6d2e563d.js.LICENSE.txt new file mode 100644 index 000000000..4f7ccd8a7 --- /dev/null +++ b/assets/js/8443.6d2e563d.js.LICENSE.txt @@ -0,0 +1 @@ +/*! https://mths.be/cssesc v3.0.0 by @mathias */ diff --git a/assets/js/8717b14a.d94c26ad.js b/assets/js/8717b14a.d94c26ad.js deleted file mode 100644 index 1797072fb..000000000 --- a/assets/js/8717b14a.d94c26ad.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[948],{4137:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,f=u["".concat(s,".").concat(m)]||u[m]||g[m]||a;return r?n.createElement(f,l(l({ref:t},c),{},{components:r})):n.createElement(f,l({ref:t},c))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[u]="string"==typeof e?e:o,l[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>g,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var n=r(7462),o=(r(7294),r(4137));const a={slug:"long-blog-post",title:"Long Blog Post",authors:"endi",tags:["hello","docusaurus"]},l=void 0,i={permalink:"/blog/long-blog-post",source:"@site/blog/2019-05-29-long-blog-post.md",title:"Long Blog Post",description:"This is the summary of a very long blog post,",date:"2019-05-29T00:00:00.000Z",formattedDate:"May 29, 2019",tags:[{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:2.05,hasTruncateMarker:!0,authors:[{name:"Endilie Yacop Sucipto",title:"Maintainer of Docusaurus",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png",key:"endi"}],frontMatter:{slug:"long-blog-post",title:"Long Blog Post",authors:"endi",tags:["hello","docusaurus"]},prevItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"},nextItem:{title:"First Blog Post",permalink:"/blog/first-blog-post"}},s={authorsImageUrls:[void 0]},p=[],c={toc:p},u="wrapper";function g(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This is the summary of a very long blog post,"),(0,o.kt)("p",null,"Use a ",(0,o.kt)("inlineCode",{parentName:"p"},"\x3c!--")," ",(0,o.kt)("inlineCode",{parentName:"p"},"truncate")," ",(0,o.kt)("inlineCode",{parentName:"p"},"--\x3e")," comment to limit blog post size in the list view."))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8717b14a.fb07c460.js b/assets/js/8717b14a.fb07c460.js new file mode 100644 index 000000000..cb2e3b799 --- /dev/null +++ b/assets/js/8717b14a.fb07c460.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[948],{7106:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>a,contentTitle:()=>r,default:()=>d,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var n=o(5893),s=o(1151);const l={slug:"long-blog-post",title:"Long Blog Post",authors:"endi",tags:["hello","docusaurus"]},r=void 0,i={permalink:"/blog/long-blog-post",source:"@site/blog/2019-05-29-long-blog-post.md",title:"Long Blog Post",description:"This is the summary of a very long blog post,",date:"2019-05-29T00:00:00.000Z",formattedDate:"May 29, 2019",tags:[{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:2.05,hasTruncateMarker:!0,authors:[{name:"Endilie Yacop Sucipto",title:"Maintainer of Docusaurus",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png",key:"endi"}],frontMatter:{slug:"long-blog-post",title:"Long Blog Post",authors:"endi",tags:["hello","docusaurus"]},unlisted:!1,prevItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"},nextItem:{title:"First Blog Post",permalink:"/blog/first-blog-post"}},a={authorsImageUrls:[void 0]},c=[];function u(t){const e={code:"code",p:"p",...(0,s.a)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.p,{children:"This is the summary of a very long blog post,"}),"\n",(0,n.jsxs)(e.p,{children:["Use a ",(0,n.jsx)(e.code,{children:"\x3c!--"})," ",(0,n.jsx)(e.code,{children:"truncate"})," ",(0,n.jsx)(e.code,{children:"--\x3e"})," comment to limit blog post size in the list view."]})]})}function d(t={}){const{wrapper:e}={...(0,s.a)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(u,{...t})}):u(t)}},1151:(t,e,o)=>{o.d(e,{Z:()=>i,a:()=>r});var n=o(7294);const s={},l=n.createContext(s);function r(t){const e=n.useContext(l);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function i(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(s):t.components||s:r(t.components),n.createElement(l.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/89600f1f.168a8da4.js b/assets/js/89600f1f.168a8da4.js new file mode 100644 index 000000000..1c7bef4df --- /dev/null +++ b/assets/js/89600f1f.168a8da4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5599],{1471:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>l,contentTitle:()=>r,default:()=>a,frontMatter:()=>t,metadata:()=>c,toc:()=>h});var d=n(5893),s=n(1151);const t={},r="Liquidity Mining",c={id:"dao/liquidity-mining",title:"Liquidity Mining",description:"Liquidity Mining (LM) launched on Jul 17 2021, 2000 GMT. 5.5% of the total token supply, 5.5 Million NODE, has been allocated to the first LM round of 6 months. NODE reward distribution for the 4 pools available is as follows:",source:"@site/docs/dao/liquidity-mining.md",sourceDirName:"dao",slug:"/dao/liquidity-mining",permalink:"/docs/dao/liquidity-mining",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dao/liquidity-mining.md",tags:[],version:"current",frontMatter:{},sidebar:"daoSidebar",previous:{title:"The NODE Economy",permalink:"/docs/dao/node-basics"},next:{title:"Dappnode DAO FAQ",permalink:"/docs/dao/faq"}},l={},h=[{value:"Liquidity Provision Pools Contract Addresses",id:"liquidity-provision-pools-contract-addresses",level:3},{value:"LP Token Addresses (Mainnet)",id:"lp-token-addresses-mainnet",level:3},{value:"Liquidity Mining Contracts",id:"liquidity-mining-contracts",level:2},{value:"Weekly Distribution",id:"weekly-distribution",level:3}];function o(e){const i={a:"a",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(i.h1,{id:"liquidity-mining",children:"Liquidity Mining"}),"\n",(0,d.jsx)(i.p,{children:"Liquidity Mining (LM) launched on Jul 17 2021, 20:00:00 GMT. 5.5% of the total token supply, 5.5 Million NODE, has been allocated to the first LM round of 6 months. NODE reward distribution for the 4 pools available is as follows:"}),"\n",(0,d.jsxs)(i.ul,{children:["\n",(0,d.jsx)(i.li,{children:"Sushiswap NODE/ETH Pool - 40% - 2,200,000 NODE"}),"\n",(0,d.jsx)(i.li,{children:"Uniswap NODE/ETH Pool - 40% - 2,200,000 NODE"}),"\n",(0,d.jsx)(i.li,{children:"NODE Governance Staking xDai - 10% - 550,000 NODE"}),"\n",(0,d.jsx)(i.li,{children:"NODE Governance Staking Mainnet -10% - 550,000 NODE"}),"\n"]}),"\n",(0,d.jsx)(i.p,{children:"A further 5.5% of the token supply has been reserved for future rounds of LM. At the end of the first round the team will re-assess the Liquidity Mining program, potentially deploying new pools and distribution."}),"\n",(0,d.jsx)(i.h3,{id:"liquidity-provision-pools-contract-addresses",children:"Liquidity Provision Pools Contract Addresses"}),"\n",(0,d.jsxs)(i.ul,{children:["\n",(0,d.jsxs)(i.li,{children:["Sushiswap NODE/ETH Pool - ",(0,d.jsx)(i.a,{href:"https://etherscan.io/address/0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8",children:"0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8"})]}),"\n",(0,d.jsxs)(i.li,{children:["Uniswap NODE/ETH Pool - ",(0,d.jsx)(i.a,{href:"https://etherscan.io/address/0xee3b01b2debd3df95bf24d4aacf8e70373113315",children:"0xee3b01b2debd3df95bf24d4aacf8e70373113315"})]}),"\n"]}),"\n",(0,d.jsx)(i.h3,{id:"lp-token-addresses-mainnet",children:"LP Token Addresses (Mainnet)"}),"\n",(0,d.jsxs)(i.ul,{children:["\n",(0,d.jsxs)(i.li,{children:["Uniswap v2 ETH/NODE LP - ",(0,d.jsx)(i.a,{href:"https://etherscan.io/address/0xee3b01b2debd3df95bf24d4aacf8e70373113315",children:"0xee3b01b2debd3df95bf24d4aacf8e70373113315"})]}),"\n",(0,d.jsxs)(i.li,{children:["Sushiswap ETH/NODE LP - ",(0,d.jsx)(i.a,{href:"https://etherscan.io/address/0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8",children:"0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8"})]}),"\n"]}),"\n",(0,d.jsx)(i.h2,{id:"liquidity-mining-contracts",children:"Liquidity Mining Contracts"}),"\n",(0,d.jsxs)(i.ul,{children:["\n",(0,d.jsxs)(i.li,{children:["NODE Governance Staking Mainnet - ",(0,d.jsx)(i.a,{href:"https://etherscan.io/address/0x19992b52338B7B49De9679ae018A7027803dB1Aa",children:"0x19992b52338B7B49De9679ae018A7027803dB1Aa"})]}),"\n",(0,d.jsxs)(i.li,{children:["NODE Governance Staking xDai - ",(0,d.jsx)(i.a,{href:"https://blockscout.com/xdai/mainnet/address/0xF66823fdc33B9F4C66dB4C3394FF139872C12f16/transactions",children:"0xF66823fdc33B9F4C66dB4C3394FF139872C12f16"})]}),"\n",(0,d.jsxs)(i.li,{children:["Uniswap Liquidity Mining - ",(0,d.jsx)(i.a,{href:"https://etherscan.io/address/0x072115DbD5c8b47E971890357d2951d4569F6B27",children:"0x072115DbD5c8b47E971890357d2951d4569F6B27"})]}),"\n",(0,d.jsxs)(i.li,{children:["Sushiswap Liquidity Mining - ",(0,d.jsx)(i.a,{href:"https://etherscan.io/address/0x89F2e26F20Bf66bBFAc947A3b628b4b4724AaA5c",children:"0x89F2e26F20Bf66bBFAc947A3b628b4b4724AaA5c"})]}),"\n"]}),"\n",(0,d.jsx)(i.h3,{id:"weekly-distribution",children:"Weekly Distribution"}),"\n",(0,d.jsx)(i.p,{children:"Round 1 (26 weeks) weekly NODE rewards distribution percentages based on LM supply are as follows:"}),"\n",(0,d.jsxs)(i.table,{children:[(0,d.jsx)(i.thead,{children:(0,d.jsxs)(i.tr,{children:[(0,d.jsx)(i.th,{children:"% per week"}),(0,d.jsx)(i.th,{children:"0.00%"}),(0,d.jsx)(i.th,{children:"3.80%"}),(0,d.jsx)(i.th,{children:"3.80%"}),(0,d.jsx)(i.th,{children:"3.00%"}),(0,d.jsx)(i.th,{children:"3.00%"}),(0,d.jsx)(i.th,{children:"2.50%"}),(0,d.jsx)(i.th,{children:"2.50%"}),(0,d.jsx)(i.th,{children:"2.50%"}),(0,d.jsx)(i.th,{children:"2.50%"}),(0,d.jsx)(i.th,{children:"2.60%"}),(0,d.jsx)(i.th,{children:"2.80%"}),(0,d.jsx)(i.th,{children:"3.00%"}),(0,d.jsx)(i.th,{children:"3.20%"}),(0,d.jsx)(i.th,{children:"3.40%"}),(0,d.jsx)(i.th,{children:"3.60%"}),(0,d.jsx)(i.th,{children:"3.80%"}),(0,d.jsx)(i.th,{children:"4.00%"}),(0,d.jsx)(i.th,{children:"4.20%"}),(0,d.jsx)(i.th,{children:"4.40%"}),(0,d.jsx)(i.th,{children:"4.60%"}),(0,d.jsx)(i.th,{children:"4.80%"}),(0,d.jsx)(i.th,{children:"5.00%"}),(0,d.jsx)(i.th,{children:"5.20%"}),(0,d.jsx)(i.th,{children:"5.40%"}),(0,d.jsx)(i.th,{children:"5.60%"}),(0,d.jsx)(i.th,{children:"5.80%"}),(0,d.jsx)(i.th,{children:"5.00%"})]})}),(0,d.jsx)(i.tbody,{children:(0,d.jsxs)(i.tr,{children:[(0,d.jsx)(i.td,{children:"Week"}),(0,d.jsx)(i.td,{children:"0"}),(0,d.jsx)(i.td,{children:"1"}),(0,d.jsx)(i.td,{children:"2"}),(0,d.jsx)(i.td,{children:"3"}),(0,d.jsx)(i.td,{children:"4"}),(0,d.jsx)(i.td,{children:"5"}),(0,d.jsx)(i.td,{children:"6"}),(0,d.jsx)(i.td,{children:"7"}),(0,d.jsx)(i.td,{children:"8"}),(0,d.jsx)(i.td,{children:"9"}),(0,d.jsx)(i.td,{children:"10"}),(0,d.jsx)(i.td,{children:"11"}),(0,d.jsx)(i.td,{children:"12"}),(0,d.jsx)(i.td,{children:"13"}),(0,d.jsx)(i.td,{children:"14"}),(0,d.jsx)(i.td,{children:"15"}),(0,d.jsx)(i.td,{children:"16"}),(0,d.jsx)(i.td,{children:"17"}),(0,d.jsx)(i.td,{children:"18"}),(0,d.jsx)(i.td,{children:"19"}),(0,d.jsx)(i.td,{children:"20"}),(0,d.jsx)(i.td,{children:"21"}),(0,d.jsx)(i.td,{children:"22"}),(0,d.jsx)(i.td,{children:"23"}),(0,d.jsx)(i.td,{children:"24"}),(0,d.jsx)(i.td,{children:"25"}),(0,d.jsx)(i.td,{children:"26"})]})})]})]})}function a(e={}){const{wrapper:i}={...(0,s.a)(),...e.components};return i?(0,d.jsx)(i,{...e,children:(0,d.jsx)(o,{...e})}):o(e)}},1151:(e,i,n)=>{n.d(i,{Z:()=>c,a:()=>r});var d=n(7294);const s={},t=d.createContext(s);function r(e){const i=d.useContext(t);return d.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function c(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),d.createElement(t.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/89600f1f.4af1ac52.js b/assets/js/89600f1f.4af1ac52.js deleted file mode 100644 index c2568c4ac..000000000 --- a/assets/js/89600f1f.4af1ac52.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5599],{4137:(t,e,n)=>{n.d(e,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function i(t){for(var e=1;e =0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(a=0;a =0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var d=a.createContext({}),p=function(t){var e=a.useContext(d),n=e;return t&&(n="function"==typeof t?t(e):i(i({},e),t)),n},u=function(t){var e=p(t.components);return a.createElement(d.Provider,{value:e},t.children)},s="mdxType",c={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},m=a.forwardRef((function(t,e){var n=t.components,r=t.mdxType,l=t.originalType,d=t.parentName,u=o(t,["components","mdxType","originalType","parentName"]),s=p(n),m=r,k=s["".concat(d,".").concat(m)]||s[m]||c[m]||l;return n?a.createElement(k,i(i({ref:e},u),{},{components:n})):a.createElement(k,i({ref:e},u))}));function k(t,e){var n=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=n.length,i=new Array(l);i[0]=m;var o={};for(var d in e)hasOwnProperty.call(e,d)&&(o[d]=e[d]);o.originalType=t,o[s]="string"==typeof t?t:r,i[1]=o;for(var p=2;p {n.r(e),n.d(e,{assets:()=>d,contentTitle:()=>i,default:()=>c,frontMatter:()=>l,metadata:()=>o,toc:()=>p});var a=n(7462),r=(n(7294),n(4137));const l={},i="Liquidity Mining",o={unversionedId:"dao/liquidity-mining",id:"dao/liquidity-mining",title:"Liquidity Mining",description:"Liquidity Mining (LM) launched on Jul 17 2021, 2000 GMT. 5.5% of the total token supply, 5.5 Million NODE, has been allocated to the first LM round of 6 months. NODE reward distribution for the 4 pools available is as follows:",source:"@site/docs/dao/liquidity-mining.md",sourceDirName:"dao",slug:"/dao/liquidity-mining",permalink:"/docs/dao/liquidity-mining",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dao/liquidity-mining.md",tags:[],version:"current",frontMatter:{},sidebar:"daoSidebar",previous:{title:"The NODE Economy",permalink:"/docs/dao/node-basics"},next:{title:"Dappnode DAO FAQ",permalink:"/docs/dao/faq"}},d={},p=[{value:"Liquidity Provision Pools Contract Addresses",id:"liquidity-provision-pools-contract-addresses",level:3},{value:"LP Token Addresses (Mainnet)",id:"lp-token-addresses-mainnet",level:3},{value:"Liquidity Mining Contracts",id:"liquidity-mining-contracts",level:2},{value:"Weekly Distribution",id:"weekly-distribution",level:3}],u={toc:p},s="wrapper";function c(t){let{components:e,...n}=t;return(0,r.kt)(s,(0,a.Z)({},u,n,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"liquidity-mining"},"Liquidity Mining"),(0,r.kt)("p",null,"Liquidity Mining (LM) launched on Jul 17 2021, 20:00:00 GMT. 5.5% of the total token supply, 5.5 Million NODE, has been allocated to the first LM round of 6 months. NODE reward distribution for the 4 pools available is as follows:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Sushiswap NODE/ETH Pool - 40% - 2,200,000 NODE"),(0,r.kt)("li",{parentName:"ul"},"Uniswap NODE/ETH Pool - 40% - 2,200,000 NODE"),(0,r.kt)("li",{parentName:"ul"},"NODE Governance Staking xDai - 10% - 550,000 NODE"),(0,r.kt)("li",{parentName:"ul"},"NODE Governance Staking Mainnet -10% - 550,000 NODE")),(0,r.kt)("p",null,"A further 5.5% of the token supply has been reserved for future rounds of LM. At the end of the first round the team will re-assess the Liquidity Mining program, potentially deploying new pools and distribution."),(0,r.kt)("h3",{id:"liquidity-provision-pools-contract-addresses"},"Liquidity Provision Pools Contract Addresses"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Sushiswap NODE/ETH Pool - ",(0,r.kt)("a",{parentName:"li",href:"https://etherscan.io/address/0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8"},"0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8")),(0,r.kt)("li",{parentName:"ul"},"Uniswap NODE/ETH Pool - ",(0,r.kt)("a",{parentName:"li",href:"https://etherscan.io/address/0xee3b01b2debd3df95bf24d4aacf8e70373113315"},"0xee3b01b2debd3df95bf24d4aacf8e70373113315"))),(0,r.kt)("h3",{id:"lp-token-addresses-mainnet"},"LP Token Addresses (Mainnet)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Uniswap v2 ETH/NODE LP - ",(0,r.kt)("a",{parentName:"li",href:"https://etherscan.io/address/0xee3b01b2debd3df95bf24d4aacf8e70373113315"},"0xee3b01b2debd3df95bf24d4aacf8e70373113315")),(0,r.kt)("li",{parentName:"ul"},"Sushiswap ETH/NODE LP - ",(0,r.kt)("a",{parentName:"li",href:"https://etherscan.io/address/0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8"},"0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8"))),(0,r.kt)("h2",{id:"liquidity-mining-contracts"},"Liquidity Mining Contracts"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"NODE Governance Staking Mainnet - ",(0,r.kt)("a",{parentName:"li",href:"https://etherscan.io/address/0x19992b52338B7B49De9679ae018A7027803dB1Aa"},"0x19992b52338B7B49De9679ae018A7027803dB1Aa")),(0,r.kt)("li",{parentName:"ul"},"NODE Governance Staking xDai - ",(0,r.kt)("a",{parentName:"li",href:"https://blockscout.com/xdai/mainnet/address/0xF66823fdc33B9F4C66dB4C3394FF139872C12f16/transactions"},"0xF66823fdc33B9F4C66dB4C3394FF139872C12f16")),(0,r.kt)("li",{parentName:"ul"},"Uniswap Liquidity Mining - ",(0,r.kt)("a",{parentName:"li",href:"https://etherscan.io/address/0x072115DbD5c8b47E971890357d2951d4569F6B27"},"0x072115DbD5c8b47E971890357d2951d4569F6B27")),(0,r.kt)("li",{parentName:"ul"},"Sushiswap Liquidity Mining - ",(0,r.kt)("a",{parentName:"li",href:"https://etherscan.io/address/0x89F2e26F20Bf66bBFAc947A3b628b4b4724AaA5c"},"0x89F2e26F20Bf66bBFAc947A3b628b4b4724AaA5c"))),(0,r.kt)("h3",{id:"weekly-distribution"},"Weekly Distribution"),(0,r.kt)("p",null,"Round 1 (26 weeks) weekly NODE rewards distribution percentages based on LM supply are as follows:"),(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},"% per week"),(0,r.kt)("th",{parentName:"tr",align:null},"0.00%"),(0,r.kt)("th",{parentName:"tr",align:null},"3.80%"),(0,r.kt)("th",{parentName:"tr",align:null},"3.80%"),(0,r.kt)("th",{parentName:"tr",align:null},"3.00%"),(0,r.kt)("th",{parentName:"tr",align:null},"3.00%"),(0,r.kt)("th",{parentName:"tr",align:null},"2.50%"),(0,r.kt)("th",{parentName:"tr",align:null},"2.50%"),(0,r.kt)("th",{parentName:"tr",align:null},"2.50%"),(0,r.kt)("th",{parentName:"tr",align:null},"2.50%"),(0,r.kt)("th",{parentName:"tr",align:null},"2.60%"),(0,r.kt)("th",{parentName:"tr",align:null},"2.80%"),(0,r.kt)("th",{parentName:"tr",align:null},"3.00%"),(0,r.kt)("th",{parentName:"tr",align:null},"3.20%"),(0,r.kt)("th",{parentName:"tr",align:null},"3.40%"),(0,r.kt)("th",{parentName:"tr",align:null},"3.60%"),(0,r.kt)("th",{parentName:"tr",align:null},"3.80%"),(0,r.kt)("th",{parentName:"tr",align:null},"4.00%"),(0,r.kt)("th",{parentName:"tr",align:null},"4.20%"),(0,r.kt)("th",{parentName:"tr",align:null},"4.40%"),(0,r.kt)("th",{parentName:"tr",align:null},"4.60%"),(0,r.kt)("th",{parentName:"tr",align:null},"4.80%"),(0,r.kt)("th",{parentName:"tr",align:null},"5.00%"),(0,r.kt)("th",{parentName:"tr",align:null},"5.20%"),(0,r.kt)("th",{parentName:"tr",align:null},"5.40%"),(0,r.kt)("th",{parentName:"tr",align:null},"5.60%"),(0,r.kt)("th",{parentName:"tr",align:null},"5.80%"),(0,r.kt)("th",{parentName:"tr",align:null},"5.00%"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Week"),(0,r.kt)("td",{parentName:"tr",align:null},"0"),(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:null},"3"),(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"5"),(0,r.kt)("td",{parentName:"tr",align:null},"6"),(0,r.kt)("td",{parentName:"tr",align:null},"7"),(0,r.kt)("td",{parentName:"tr",align:null},"8"),(0,r.kt)("td",{parentName:"tr",align:null},"9"),(0,r.kt)("td",{parentName:"tr",align:null},"10"),(0,r.kt)("td",{parentName:"tr",align:null},"11"),(0,r.kt)("td",{parentName:"tr",align:null},"12"),(0,r.kt)("td",{parentName:"tr",align:null},"13"),(0,r.kt)("td",{parentName:"tr",align:null},"14"),(0,r.kt)("td",{parentName:"tr",align:null},"15"),(0,r.kt)("td",{parentName:"tr",align:null},"16"),(0,r.kt)("td",{parentName:"tr",align:null},"17"),(0,r.kt)("td",{parentName:"tr",align:null},"18"),(0,r.kt)("td",{parentName:"tr",align:null},"19"),(0,r.kt)("td",{parentName:"tr",align:null},"20"),(0,r.kt)("td",{parentName:"tr",align:null},"21"),(0,r.kt)("td",{parentName:"tr",align:null},"22"),(0,r.kt)("td",{parentName:"tr",align:null},"23"),(0,r.kt)("td",{parentName:"tr",align:null},"24"),(0,r.kt)("td",{parentName:"tr",align:null},"25"),(0,r.kt)("td",{parentName:"tr",align:null},"26")))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/89b6dee8.4af4ff6b.js b/assets/js/89b6dee8.4af4ff6b.js deleted file mode 100644 index 9466d1878..000000000 --- a/assets/js/89b6dee8.4af4ff6b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3423],{4137:(e,t,o)=>{o.d(t,{Zo:()=>d,kt:()=>g});var r=o(7294);function n(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function a(e){for(var t=1;t =0||(n[o]=e[o]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var u=r.createContext({}),l=function(e){var t=r.useContext(u),o=t;return e&&(o="function"==typeof e?e(t):a(a({},t),e)),o},d=function(e){var t=l(e.components);return r.createElement(u.Provider,{value:t},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},h=r.forwardRef((function(e,t){var o=e.components,n=e.mdxType,i=e.originalType,u=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),p=l(o),h=n,g=p["".concat(u,".").concat(h)]||p[h]||c[h]||i;return o?r.createElement(g,a(a({ref:t},d),{},{components:o})):r.createElement(g,a({ref:t},d))}));function g(e,t){var o=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=o.length,a=new Array(i);a[0]=h;var s={};for(var u in t)hasOwnProperty.call(t,u)&&(s[u]=t[u]);s.originalType=e,s[p]="string"==typeof e?e:n,a[1]=s;for(var l=2;l{o.r(t),o.d(t,{assets:()=>u,contentTitle:()=>a,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var r=o(7462),n=(o(7294),o(4137));const i={},a="1. Initial Dappnode Setup",s={unversionedId:"user/videos-and-tutorials/driving-school/initial-setup",id:"user/videos-and-tutorials/driving-school/initial-setup",title:"1. Initial Dappnode Setup",description:"Welcome to Dappnode Driving School! Here you'll find a series of videos that will guide you through the initial setup process. From booting Dappnode from ISO and accessing it through VPN, to setting up your Ethereum node, we've got you covered.",source:"@site/docs/user/videos-and-tutorials/driving-school/initial-setup.md",sourceDirName:"user/videos-and-tutorials/driving-school",slug:"/user/videos-and-tutorials/driving-school/initial-setup",permalink:"/docs/user/videos-and-tutorials/driving-school/initial-setup",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/videos-and-tutorials/driving-school/initial-setup.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"More coming soon",permalink:"/docs/user/dappnode-cloud/providers/coming-soon"},next:{title:"2. Configuring your Dappnode",permalink:"/docs/user/videos-and-tutorials/driving-school/configuration"}},u={},l=[{value:"\ud83d\udda5\ufe0f 1.1 Booting from the Dappnode ISO",id:"\ufe0f-11-booting-from-the-dappnode-iso",level:2},{value:"\ud83c\udf10 1.2 Accessing the Dappnode User Interface or Dashboard",id:"-12-accessing-the-dappnode-user-interface-or-dashboard",level:2},{value:"\ud83d\udd12 1.3 Setting up Dappnode Security",id:"-13-setting-up-dappnode-security",level:2},{value:"\ud83d\udd17 1.4 Configuring your Dappnode VPN",id:"-14-configuring-your-dappnode-vpn",level:2},{value:"\ud83d\udd04 1.5 Syncing your clients/An overview on node running",id:"-15-syncing-your-clientsan-overview-on-node-running",level:2},{value:"\ud83d\udcbe 1.6 Understanding your Dappnode's Hardware",id:"-16-understanding-your-dappnodes-hardware",level:2}],d={toc:l},p="wrapper";function c(e){let{components:t,...o}=e;return(0,n.kt)(p,(0,r.Z)({},d,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"1-initial-dappnode-setup"},"1. Initial Dappnode Setup"),(0,n.kt)("p",null,"Welcome to Dappnode Driving School! Here you'll find a series of videos that will guide you through the initial setup process. From booting Dappnode from ISO and accessing it through VPN, to setting up your Ethereum node, we've got you covered."),(0,n.kt)("h2",{id:"\ufe0f-11-booting-from-the-dappnode-iso"},"\ud83d\udda5\ufe0f 1.1 Booting from the Dappnode ISO"),(0,n.kt)("p",null,"The first step you will need to take when your hardware is ready for installing Dappnode. If you have experience installing Linux you'll know what this is about, but if you don't there's nothing to worry about, as most of the process is automated."),(0,n.kt)("center",null,(0,n.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/lh5hADm1Iuk",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,n.kt)("br",null),(0,n.kt)("h2",{id:"-12-accessing-the-dappnode-user-interface-or-dashboard"},"\ud83c\udf10 1.2 Accessing the Dappnode User Interface or Dashboard"),(0,n.kt)("p",null,"The most common way to interact with your dappnode is through a web browser in another computer. This means that Dappnode works as a server, and doesn't have a traditional graphic interface as regular personal computers do, so if you're sitting in front of a login prompt wondering what's next you're doing great so far!"),(0,n.kt)("center",null,(0,n.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/Z1uDv_J7wlg",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,n.kt)("br",null),(0,n.kt)("h2",{id:"-13-setting-up-dappnode-security"},"\ud83d\udd12 1.3 Setting up Dappnode Security"),(0,n.kt)("p",null,"Now that you're inside your Dappnode we gotta make sure no unauthorized users have access! There are four kinds of security credentials in Dappnode and we'll go through each one of them in this video."),(0,n.kt)("center",null,(0,n.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/TZUK39yiZ30",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,n.kt)("br",null),(0,n.kt)("h2",{id:"-14-configuring-your-dappnode-vpn"},"\ud83d\udd17 1.4 Configuring your Dappnode VPN"),(0,n.kt)("p",null,"The best way to remotely and safely access your Dappnode is through VPN. Discover the options that Dappnode has to offer for VPNs in this Dappnode Driving School lesson!"),(0,n.kt)("center",null,(0,n.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/qB0sMaNpXpU",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,n.kt)("br",null),(0,n.kt)("h2",{id:"-15-syncing-your-clientsan-overview-on-node-running"},"\ud83d\udd04 1.5 Syncing your clients/An overview on node running"),(0,n.kt)("p",null,"This is what you came here for! Let's start syncing your clients to get your nodes up and running. Whether you want them for better privacy while exploring web3 or because you're interested in validating, syncing your node is a must in your Dappnode journey."),(0,n.kt)("center",null,(0,n.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/zJowD3X-MUc",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,n.kt)("br",null),(0,n.kt)("h2",{id:"-16-understanding-your-dappnodes-hardware"},"\ud83d\udcbe 1.6 Understanding your Dappnode's Hardware"),(0,n.kt)("p",null,"Now that everything is working as expected, here's some information on what keeps Dappnode running the way it's meant to. This video is also great if you're looking into putting your own hardware together, since it goes through the minimum requirements to run Dappnode."),(0,n.kt)("center",null,(0,n.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/1GW-GbGKs7o?si=DZVO185qWNWiXFl4",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/89b6dee8.bf59031f.js b/assets/js/89b6dee8.bf59031f.js new file mode 100644 index 000000000..401b807c9 --- /dev/null +++ b/assets/js/89b6dee8.bf59031f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3423],{8069:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>d,contentTitle:()=>s,default:()=>p,frontMatter:()=>i,metadata:()=>a,toc:()=>u});var r=n(5893),t=n(1151);const i={},s="1. Initial Dappnode Setup",a={id:"user/videos-and-tutorials/driving-school/initial-setup",title:"1. Initial Dappnode Setup",description:"Welcome to Dappnode Driving School! Here you'll find a series of videos that will guide you through the initial setup process. From booting Dappnode from ISO and accessing it through VPN, to setting up your Ethereum node, we've got you covered.",source:"@site/docs/user/videos-and-tutorials/driving-school/initial-setup.md",sourceDirName:"user/videos-and-tutorials/driving-school",slug:"/user/videos-and-tutorials/driving-school/initial-setup",permalink:"/docs/user/videos-and-tutorials/driving-school/initial-setup",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/videos-and-tutorials/driving-school/initial-setup.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"More coming soon",permalink:"/docs/user/dappnode-cloud/providers/coming-soon"},next:{title:"2. Configuring your Dappnode",permalink:"/docs/user/videos-and-tutorials/driving-school/configuration"}},d={},u=[{value:"\ud83d\udda5\ufe0f 1.1 Booting from the Dappnode ISO",id:"\ufe0f-11-booting-from-the-dappnode-iso",level:2},{value:"\ud83c\udf10 1.2 Accessing the Dappnode User Interface or Dashboard",id:"-12-accessing-the-dappnode-user-interface-or-dashboard",level:2},{value:"\ud83d\udd12 1.3 Setting up Dappnode Security",id:"-13-setting-up-dappnode-security",level:2},{value:"\ud83d\udd17 1.4 Configuring your Dappnode VPN",id:"-14-configuring-your-dappnode-vpn",level:2},{value:"\ud83d\udd04 1.5 Syncing your clients/An overview on node running",id:"-15-syncing-your-clientsan-overview-on-node-running",level:2},{value:"\ud83d\udcbe 1.6 Understanding your Dappnode's Hardware",id:"-16-understanding-your-dappnodes-hardware",level:2}];function c(e){const o={h1:"h1",h2:"h2",p:"p",...(0,t.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(o.h1,{id:"1-initial-dappnode-setup",children:"1. Initial Dappnode Setup"}),"\n",(0,r.jsx)(o.p,{children:"Welcome to Dappnode Driving School! Here you'll find a series of videos that will guide you through the initial setup process. From booting Dappnode from ISO and accessing it through VPN, to setting up your Ethereum node, we've got you covered."}),"\n",(0,r.jsx)(o.h2,{id:"\ufe0f-11-booting-from-the-dappnode-iso",children:"\ud83d\udda5\ufe0f 1.1 Booting from the Dappnode ISO"}),"\n",(0,r.jsx)(o.p,{children:"The first step you will need to take when your hardware is ready for installing Dappnode. If you have experience installing Linux you'll know what this is about, but if you don't there's nothing to worry about, as most of the process is automated."}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/lh5hADm1Iuk",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)(o.h2,{id:"-12-accessing-the-dappnode-user-interface-or-dashboard",children:"\ud83c\udf10 1.2 Accessing the Dappnode User Interface or Dashboard"}),"\n",(0,r.jsx)(o.p,{children:"The most common way to interact with your dappnode is through a web browser in another computer. This means that Dappnode works as a server, and doesn't have a traditional graphic interface as regular personal computers do, so if you're sitting in front of a login prompt wondering what's next you're doing great so far!"}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/Z1uDv_J7wlg",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)(o.h2,{id:"-13-setting-up-dappnode-security",children:"\ud83d\udd12 1.3 Setting up Dappnode Security"}),"\n",(0,r.jsx)(o.p,{children:"Now that you're inside your Dappnode we gotta make sure no unauthorized users have access! There are four kinds of security credentials in Dappnode and we'll go through each one of them in this video."}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/TZUK39yiZ30",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)(o.h2,{id:"-14-configuring-your-dappnode-vpn",children:"\ud83d\udd17 1.4 Configuring your Dappnode VPN"}),"\n",(0,r.jsx)(o.p,{children:"The best way to remotely and safely access your Dappnode is through VPN. Discover the options that Dappnode has to offer for VPNs in this Dappnode Driving School lesson!"}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/qB0sMaNpXpU",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)(o.h2,{id:"-15-syncing-your-clientsan-overview-on-node-running",children:"\ud83d\udd04 1.5 Syncing your clients/An overview on node running"}),"\n",(0,r.jsx)(o.p,{children:"This is what you came here for! Let's start syncing your clients to get your nodes up and running. Whether you want them for better privacy while exploring web3 or because you're interested in validating, syncing your node is a must in your Dappnode journey."}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/zJowD3X-MUc",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)(o.h2,{id:"-16-understanding-your-dappnodes-hardware",children:"\ud83d\udcbe 1.6 Understanding your Dappnode's Hardware"}),"\n",(0,r.jsx)(o.p,{children:"Now that everything is working as expected, here's some information on what keeps Dappnode running the way it's meant to. This video is also great if you're looking into putting your own hardware together, since it goes through the minimum requirements to run Dappnode."}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/1GW-GbGKs7o?si=DZVO185qWNWiXFl4",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})})]})}function p(e={}){const{wrapper:o}={...(0,t.a)(),...e.components};return o?(0,r.jsx)(o,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},1151:(e,o,n)=>{n.d(o,{Z:()=>a,a:()=>s});var r=n(7294);const t={},i=r.createContext(t);function s(e){const o=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),r.createElement(i.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/89e2558e.153a1fa7.js b/assets/js/89e2558e.153a1fa7.js new file mode 100644 index 000000000..50628daa6 --- /dev/null +++ b/assets/js/89e2558e.153a1fa7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5510],{2499:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var i=s(5893),r=s(1151);const o={},t="How to Set Up an Instance",a={id:"user/dappnode-cloud/providers/aws/set-up-instance",title:"How to Set Up an Instance",description:"To launch a Dappnode AMI instance, follow these steps:",source:"@site/docs/user/dappnode-cloud/providers/aws/set-up-instance.md",sourceDirName:"user/dappnode-cloud/providers/aws",slug:"/user/dappnode-cloud/providers/aws/set-up-instance",permalink:"/docs/user/dappnode-cloud/providers/aws/set-up-instance",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/dappnode-cloud/providers/aws/set-up-instance.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"AWS",permalink:"/docs/user/dappnode-cloud/providers/aws/overview"},next:{title:"FAQs & Troubleshooting",permalink:"/docs/user/dappnode-cloud/providers/aws/faqs"}},c={},d=[{value:"1. Navigate to AWS Marketplace \ud83e\udded",id:"1-navigate-to-aws-marketplace-",level:3},{value:"2. AWS Account \ud83d\udc64",id:"2-aws-account-",level:3},{value:"3. Subscribe to Dappnode AMI \ud83d\udcc0",id:"3-subscribe-to-dappnode-ami-",level:3},{value:"4. Set Up Telegram for Wireguard Credentials (Optional) \ud83d\udcac",id:"4-set-up-telegram-for-wireguard-credentials-optional-",level:3},{value:"5. Launch Instance \ud83d\ude80",id:"5-launch-instance-",level:3},{value:"6. Get wireguard credentials \ud83d\udd10",id:"6-get-wireguard-credentials-",level:3},{value:"7. Connect via Wireguard \ud83d\udd0c",id:"7-connect-via-wireguard-",level:3},{value:"8. Navigate to Dappnode's UI \ud83c\udfc1",id:"8-navigate-to-dappnodes-ui-",level:3}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"how-to-set-up-an-instance",children:"How to Set Up an Instance"}),"\n",(0,i.jsx)(n.p,{children:"To launch a Dappnode AMI instance, follow these steps:"}),"\n",(0,i.jsxs)(n.h3,{id:"1-navigate-to-aws-marketplace-",children:["1. ",(0,i.jsx)(n.strong,{children:"Navigate to AWS Marketplace"})," \ud83e\udded"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Go to the ",(0,i.jsx)(n.a,{href:"https://aws.amazon.com/marketplace/",children:"AWS Marketplace"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.h3,{id:"2-aws-account-",children:["2. ",(0,i.jsx)(n.strong,{children:"AWS Account"})," \ud83d\udc64"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["If you already have an AWS account, log in. If not, create an account. For more information on signing up, you can visit the ",(0,i.jsx)(n.a,{href:"https://docs.aws.amazon.com/SetUp/latest/UserGuide/setup-AWSsignup.html",children:"AWS Sign-Up Documentation"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In case you end up on another website after signing up, navigate again to the ",(0,i.jsx)(n.a,{href:"https://aws.amazon.com/marketplace/",children:"AWS Marketplace"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.h3,{id:"3-subscribe-to-dappnode-ami-",children:["3. ",(0,i.jsx)(n.strong,{children:"Subscribe to Dappnode AMI"})," \ud83d\udcc0"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'Search "Dappnode" in the top search bar and choose the "Dappnode Cloud - Telegram Credentials - By Dappnode" option.'}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'On our Dappnode AMI page, you can check some information about our image. When you are ready, click "Continue to Subscribe".'}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'Accept the terms and click "Continue to Configuration".'}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'Check the region and click "Continue to Launch" to proceed with the instance launch.'}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'In the "Choose Action" dropdown, select "Launch through EC2" and click "Launch".'}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.h3,{id:"4-set-up-telegram-for-wireguard-credentials-optional-",children:["4. ",(0,i.jsx)(n.strong,{children:"Set Up Telegram for Wireguard Credentials (Optional)"})," \ud83d\udcac"]}),"\n",(0,i.jsx)(n.p,{children:"This step is only necessary if you are planning to get your Wireguard credentials via Telegram."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Create a new bot using the ",(0,i.jsx)(n.code,{children:"/newbot"})," command via BotFather's chat. It will ask you for a name and username, then generate an authentication token for your new bot. Save this token, as you will need to provide it when launching the AWS instance."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["You will also need to provide your Telegram user ID. You can get it by sending ",(0,i.jsx)(n.code,{children:"/start"})," to a bot such as ",(0,i.jsx)(n.code,{children:"@RawDataBot"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.h3,{id:"5-launch-instance-",children:["5. ",(0,i.jsx)(n.strong,{children:"Launch Instance"})," \ud83d\ude80"]}),"\n",(0,i.jsx)(n.p,{children:'Once in the EC2 "Launch an instance" UI you will have to choose the configuration of your instance. Next steps will explain you what configurations do you need to modify section by section.'}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Name:"})," Give a name to your instance. This name is for you to identify it in the EC2 UI."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Application and OS Images (Amazon Machine Image)"}),": No changes needed, it comes pre-configurted according to the Dappnode Image."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Instance type:"})," Choose an instance type. All selectable options are suitable for running Dappnode. For more context based on your requirements, check the ",(0,i.jsx)(n.a,{href:"/docs/user/dappnode-cloud/providers/aws/faqs",children:"FAQs section"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Key Pair:"})," If you already have a key pair linked to your AWS account, you can use it. Alternatively, you can import keys to the EC2 or create a new one. These keys are essential for SSH access to the instance. Losing these keys could result in losing access to your instance."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Network Settings:"})}),"\n",(0,i.jsx)(n.p,{children:"In this section, you will create a security group to allow necessary ports exposure. Follow these steps to ensure your Dappnode instance can perform optimally and access all required services:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'Click "Edit" under Network Settings and ensure the "Create security group" option is chosen.'}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'To add a new rule to the group, click the "Add security group rule" button below. Include the following rules:'}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"SSH:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Type: SSH"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"HTTP:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Type: HTTP"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"HTTPS:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Type: HTTPS"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Wireguard:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Type: Custom UDP"}),"\n",(0,i.jsx)(n.li,{children:"Port Range: 51820"}),"\n",(0,i.jsx)(n.li,{children:"Source: 0.0.0.0/0"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"General TCP:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Type: Custom TCP"}),"\n",(0,i.jsx)(n.li,{children:"Port Range: 1024-65535"}),"\n",(0,i.jsx)(n.li,{children:"Source: 0.0.0.0/0"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"General UDP:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Type: Custom UDP"}),"\n",(0,i.jsx)(n.li,{children:"Port Range: 1024-65535"}),"\n",(0,i.jsx)(n.li,{children:"Source: 0.0.0.0/0"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["For more information about why this Inbound rules are needed and details about each one, visit the ",(0,i.jsx)(n.a,{href:"/docs/user/dappnode-cloud/providers/aws/faqs",children:"FAQs Section"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Storage:"})," Define the amount and type of storage for the instance. The storage requirements depend largely on your intended use."]}),"\n",(0,i.jsxs)(n.p,{children:["For more suggestions and context, refer to the ",(0,i.jsx)(n.a,{href:"/docs/user/dappnode-cloud/providers/aws/faqs",children:"FAQs section"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"AWS also offers the possibility of extending storage once launched if needed."})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Advanced details (optional):"})," No modifications are needed here unless you plan to get your ",(0,i.jsx)(n.strong,{children:"Wireguard credentials via Telegram"}),'. If so, provide your userID and botToken in the text area at the end of "Advanced details", separated by a comma in the following format: (',(0,i.jsx)(n.code,{children:"userID,botToken"}),").\nExample => ",(0,i.jsx)(n.code,{children:"123456789,1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456"})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Summary:"})," Finally, review your configuration on the 'Summary' section located on the right and click the \"Launch instance\" button. Once clicked, your instance will be launched."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.h3,{id:"6-get-wireguard-credentials-",children:["6. ",(0,i.jsx)(n.strong,{children:"Get wireguard credentials"})," \ud83d\udd10"]}),"\n",(0,i.jsx)(n.p,{children:"To obtain the Wireguard credentials for your instance, you have two different approaches:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Via Telegram Bot"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Ensure you have completed the optional Telegram setup steps mentioned earlier in the guide."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"After launching the instance, go to your new bot's chat using the link provided by BotFather."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Send any message to your bot. If the configuration is correct, you should receive a message saying ",(0,i.jsx)(n.code,{children:"\u2705 Successfully saved channel ID"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Send the command ",(0,i.jsx)(n.code,{children:"/get_wireguard_credentials"})," in the bot chat. The bot should return your Wireguard credentials. Copy them, as the next step will explain how to use these credentials."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Via SSH"})}),"\n",(0,i.jsx)(n.p,{children:"This approach is for more expiremented users, since you will have to use the terminal."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'After launching the instance, click the "Connect" button in the AWS console.'}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:['Go to the "SSH client" tab where it will provide you with a command like this:\n',(0,i.jsx)(n.code,{children:'ssh -i "yourKeyPair-aws.pem" root@yourInstanceDNS'}),"\nOpen your terminal and modify the command to use the ",(0,i.jsx)(n.code,{children:"ubuntu"})," user and add ",(0,i.jsx)(n.code,{children:"sudo"})," for permissions:"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:'sudo ssh -i "yourKeyPair-aws.pem" ubuntu@yourInstanceDNS\n'})}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsx)(n.p,{children:"Ensure this command is run in the directory where your key pair file is located."})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Once connected to your instance, run the following command:"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"dappnode_wireguard\n"})}),"\n",(0,i.jsxs)(n.p,{children:["This command will output your Wireguard credentials. Copy them from your terminal using ",(0,i.jsx)(n.code,{children:"Ctrl+Shift+C"})," / ",(0,i.jsx)(n.code,{children:"\u2318+Shift+C"}),". The next step will explain how to use these credentials."]}),"\n",(0,i.jsxs)(n.admonition,{type:"info",children:[(0,i.jsx)(n.p,{children:"The installation of Dappnode on your instance may take a few minutes. If you try to obtain the credentials before the installation is complete, you may not receive them. If this happens, wait a few minutes and try again."}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Via SSH"}),": If you encounter this issue, exit your SSH session with the ",(0,i.jsx)(n.code,{children:"exit"})," command and reconnect as explained above."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Via Telegram Bot"}),": Simply retry the ",(0,i.jsx)(n.code,{children:"/get_wireguard_credentials"})," command after a short wait."]}),"\n"]})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.h3,{id:"7-connect-via-wireguard-",children:["7. ",(0,i.jsx)(n.strong,{children:"Connect via Wireguard"})," \ud83d\udd0c"]}),"\n",(0,i.jsxs)(n.p,{children:["The setup process for connecting via Wireguard will depend on the operating system you are using. Refer to the ",(0,i.jsx)(n.a,{href:"/docs/user/access-your-dappnode/vpn/wireguard#2-installing-wireguard-client",children:"Wireguard documentation section"})," specific to your OS for detailed instructions."]}),"\n",(0,i.jsx)(n.p,{children:"Once you have installed Wireguard and configured it with the credentials you obtained, you will be able to connect to your Dappnode instance securely."}),"\n",(0,i.jsxs)(n.h3,{id:"8-navigate-to-dappnodes-ui-",children:["8. ",(0,i.jsx)(n.strong,{children:"Navigate to Dappnode's UI"})," \ud83c\udfc1"]}),"\n",(0,i.jsxs)(n.p,{children:["Once your Wireguard tunnel is active, simply open your web browser and go to ",(0,i.jsx)(n.a,{href:"http://my.dappnode",children:"http://my.dappnode"})," to begin your journey with Dappnode Cloud!"]})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>t});var i=s(7294);const r={},o=i.createContext(r);function t(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/89e2558e.af9481f1.js b/assets/js/89e2558e.af9481f1.js deleted file mode 100644 index ce03e39fe..000000000 --- a/assets/js/89e2558e.af9481f1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5510],{4137:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t =0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),s=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,u=p(e,["components","mdxType","originalType","parentName"]),c=s(a),m=r,k=c["".concat(l,".").concat(m)]||c[m]||d[m]||o;return a?n.createElement(k,i(i({ref:t},u),{},{components:a})):n.createElement(k,i({ref:t},u))}));function k(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=m;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p[c]="string"==typeof e?e:r,i[1]=p;for(var s=2;s {a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>p,toc:()=>s});var n=a(7462),r=(a(7294),a(4137));const o={},i="How to Set Up an Instance",p={unversionedId:"user/dappnode-cloud/providers/aws/set-up-instance",id:"user/dappnode-cloud/providers/aws/set-up-instance",title:"How to Set Up an Instance",description:"To launch a Dappnode AMI instance, follow these steps:",source:"@site/docs/user/dappnode-cloud/providers/aws/set-up-instance.md",sourceDirName:"user/dappnode-cloud/providers/aws",slug:"/user/dappnode-cloud/providers/aws/set-up-instance",permalink:"/docs/user/dappnode-cloud/providers/aws/set-up-instance",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/dappnode-cloud/providers/aws/set-up-instance.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"AWS",permalink:"/docs/user/dappnode-cloud/providers/aws/overview"},next:{title:"FAQs & Troubleshooting",permalink:"/docs/user/dappnode-cloud/providers/aws/faqs"}},l={},s=[{value:"1. Navigate to AWS Marketplace \ud83e\udded",id:"1-navigate-to-aws-marketplace-",level:3},{value:"2. AWS Account \ud83d\udc64",id:"2-aws-account-",level:3},{value:"3. Subscribe to Dappnode AMI \ud83d\udcc0",id:"3-subscribe-to-dappnode-ami-",level:3},{value:"4. Set Up Telegram for Wireguard Credentials (Optional) \ud83d\udcac",id:"4-set-up-telegram-for-wireguard-credentials-optional-",level:3},{value:"5. Launch Instance \ud83d\ude80",id:"5-launch-instance-",level:3},{value:"6. Get wireguard credentials \ud83d\udd10",id:"6-get-wireguard-credentials-",level:3},{value:"7. Connect via Wireguard \ud83d\udd0c",id:"7-connect-via-wireguard-",level:3},{value:"8. Navigate to Dappnode's UI \ud83c\udfc1",id:"8-navigate-to-dappnodes-ui-",level:3}],u={toc:s},c="wrapper";function d(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"how-to-set-up-an-instance"},"How to Set Up an Instance"),(0,r.kt)("p",null,"To launch a Dappnode AMI instance, follow these steps:"),(0,r.kt)("h3",{id:"1-navigate-to-aws-marketplace-"},"1. ",(0,r.kt)("strong",{parentName:"h3"},"Navigate to AWS Marketplace")," \ud83e\udded"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Go to the ",(0,r.kt)("a",{parentName:"li",href:"https://aws.amazon.com/marketplace/"},"AWS Marketplace"),".")),(0,r.kt)("h3",{id:"2-aws-account-"},"2. ",(0,r.kt)("strong",{parentName:"h3"},"AWS Account")," \ud83d\udc64"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"If you already have an AWS account, log in. If not, create an account. For more information on signing up, you can visit the ",(0,r.kt)("a",{parentName:"p",href:"https://docs.aws.amazon.com/SetUp/latest/UserGuide/setup-AWSsignup.html"},"AWS Sign-Up Documentation"),".")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"In case you end up on another website after signing up, navigate again to the ",(0,r.kt)("a",{parentName:"p",href:"https://aws.amazon.com/marketplace/"},"AWS Marketplace"),"."))),(0,r.kt)("h3",{id:"3-subscribe-to-dappnode-ami-"},"3. ",(0,r.kt)("strong",{parentName:"h3"},"Subscribe to Dappnode AMI")," \ud83d\udcc0"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},'Search "Dappnode" in the top search bar and choose the "Dappnode Cloud - Telegram Credentials - By Dappnode" option.')),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},'On our Dappnode AMI page, you can check some information about our image. When you are ready, click "Continue to Subscribe".')),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},'Accept the terms and click "Continue to Configuration".')),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},'Check the region and click "Continue to Launch" to proceed with the instance launch.')),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},'In the "Choose Action" dropdown, select "Launch through EC2" and click "Launch".'))),(0,r.kt)("h3",{id:"4-set-up-telegram-for-wireguard-credentials-optional-"},"4. ",(0,r.kt)("strong",{parentName:"h3"},"Set Up Telegram for Wireguard Credentials (Optional)")," \ud83d\udcac"),(0,r.kt)("p",null,"This step is only necessary if you are planning to get your Wireguard credentials via Telegram."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Create a new bot using the ",(0,r.kt)("inlineCode",{parentName:"p"},"/newbot")," command via BotFather's chat. It will ask you for a name and username, then generate an authentication token for your new bot. Save this token, as you will need to provide it when launching the AWS instance.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"You will also need to provide your Telegram user ID. You can get it by sending ",(0,r.kt)("inlineCode",{parentName:"p"},"/start")," to a bot such as ",(0,r.kt)("inlineCode",{parentName:"p"},"@RawDataBot"),"."))),(0,r.kt)("h3",{id:"5-launch-instance-"},"5. ",(0,r.kt)("strong",{parentName:"h3"},"Launch Instance")," \ud83d\ude80"),(0,r.kt)("p",null,'Once in the EC2 "Launch an instance" UI you will have to choose the configuration of your instance. Next steps will explain you what configurations do you need to modify section by section.'),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Name:")," Give a name to your instance. This name is for you to identify it in the EC2 UI.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Application and OS Images (Amazon Machine Image)"),": No changes needed, it comes pre-configurted according to the Dappnode Image.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Instance type:")," Choose an instance type. All selectable options are suitable for running Dappnode. For more context based on your requirements, check the ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/dappnode-cloud/providers/aws/faqs"},"FAQs section"),".")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Key Pair:")," If you already have a key pair linked to your AWS account, you can use it. Alternatively, you can import keys to the EC2 or create a new one. These keys are essential for SSH access to the instance. Losing these keys could result in losing access to your instance.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Network Settings:")),(0,r.kt)("p",{parentName:"li"},"In this section, you will create a security group to allow necessary ports exposure. Follow these steps to ensure your Dappnode instance can perform optimally and access all required services:"),(0,r.kt)("ol",{parentName:"li"},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},'Click "Edit" under Network Settings and ensure the "Create security group" option is chosen.')),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},'To add a new rule to the group, click the "Add security group rule" button below. Include the following rules:'),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"SSH:")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Type: SSH")),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"HTTP:")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Type: HTTP")),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"HTTPS:")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Type: HTTPS")),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Wireguard:")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Type: Custom UDP"),(0,r.kt)("li",{parentName:"ul"},"Port Range: 51820"),(0,r.kt)("li",{parentName:"ul"},"Source: 0.0.0.0/0")),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"General TCP:")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Type: Custom TCP"),(0,r.kt)("li",{parentName:"ul"},"Port Range: 1024-65535"),(0,r.kt)("li",{parentName:"ul"},"Source: 0.0.0.0/0")),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"General UDP:")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Type: Custom UDP"),(0,r.kt)("li",{parentName:"ul"},"Port Range: 1024-65535"),(0,r.kt)("li",{parentName:"ul"},"Source: 0.0.0.0/0")))),(0,r.kt)("p",{parentName:"li"},"For more information about why this Inbound rules are needed and details about each one, visit the ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/dappnode-cloud/providers/aws/faqs"},"FAQs Section"),".")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Storage:")," Define the amount and type of storage for the instance. The storage requirements depend largely on your intended use."),(0,r.kt)("p",{parentName:"li"},"For more suggestions and context, refer to the ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/dappnode-cloud/providers/aws/faqs"},"FAQs section"),"."),(0,r.kt)("admonition",{parentName:"li",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"AWS also offers the possibility of extending storage once launched if needed."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Advanced details (optional):")," No modifications are needed here unless you plan to get your ",(0,r.kt)("strong",{parentName:"p"},"Wireguard credentials via Telegram"),'. If so, provide your userID and botToken in the text area at the end of "Advanced details", separated by a comma in the following format: (',(0,r.kt)("inlineCode",{parentName:"p"},"userID,botToken"),").\nExample => ",(0,r.kt)("inlineCode",{parentName:"p"},"123456789,1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Summary:")," Finally, review your configuration on the 'Summary' section located on the right and click the \"Launch instance\" button. Once clicked, your instance will be launched."))),(0,r.kt)("h3",{id:"6-get-wireguard-credentials-"},"6. ",(0,r.kt)("strong",{parentName:"h3"},"Get wireguard credentials")," \ud83d\udd10"),(0,r.kt)("p",null,"To obtain the Wireguard credentials for your instance, you have two different approaches:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Via Telegram Bot")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Ensure you have completed the optional Telegram setup steps mentioned earlier in the guide.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"After launching the instance, go to your new bot's chat using the link provided by BotFather.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Send any message to your bot. If the configuration is correct, you should receive a message saying ",(0,r.kt)("inlineCode",{parentName:"p"},"\u2705 Successfully saved channel ID"),".")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Send the command ",(0,r.kt)("inlineCode",{parentName:"p"},"/get_wireguard_credentials")," in the bot chat. The bot should return your Wireguard credentials. Copy them, as the next step will explain how to use these credentials.")))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Via SSH")),(0,r.kt)("p",{parentName:"li"},"This approach is for more expiremented users, since you will have to use the terminal."),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},'After launching the instance, click the "Connect" button in the AWS console.')),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},'Go to the "SSH client" tab where it will provide you with a command like this:\n',(0,r.kt)("inlineCode",{parentName:"p"},'ssh -i "yourKeyPair-aws.pem" root@yourInstanceDNS'),"\nOpen your terminal and modify the command to use the ",(0,r.kt)("inlineCode",{parentName:"p"},"ubuntu")," user and add ",(0,r.kt)("inlineCode",{parentName:"p"},"sudo")," for permissions:"))),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-sh"},'sudo ssh -i "yourKeyPair-aws.pem" ubuntu@yourInstanceDNS\n')),(0,r.kt)("admonition",{parentName:"li",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Ensure this command is run in the directory where your key pair file is located.")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Once connected to your instance, run the following command:")),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"dappnode_wireguard\n")),(0,r.kt)("p",{parentName:"li"},"This command will output your Wireguard credentials. Copy them from your terminal using ",(0,r.kt)("inlineCode",{parentName:"p"},"Ctrl+Shift+C")," / ",(0,r.kt)("inlineCode",{parentName:"p"},"\u2318+Shift+C"),". The next step will explain how to use these credentials."),(0,r.kt)("admonition",{parentName:"li",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The installation of Dappnode on your instance may take a few minutes. If you try to obtain the credentials before the installation is complete, you may not receive them. If this happens, wait a few minutes and try again."),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Via SSH"),": If you encounter this issue, exit your SSH session with the ",(0,r.kt)("inlineCode",{parentName:"li"},"exit")," command and reconnect as explained above."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Via Telegram Bot"),": Simply retry the ",(0,r.kt)("inlineCode",{parentName:"li"},"/get_wireguard_credentials")," command after a short wait.\n:::"))))),(0,r.kt)("h3",{id:"7-connect-via-wireguard-"},"7. ",(0,r.kt)("strong",{parentName:"h3"},"Connect via Wireguard")," \ud83d\udd0c"),(0,r.kt)("p",null,"The setup process for connecting via Wireguard will depend on the operating system you are using. Refer to the ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/access-your-dappnode/vpn/wireguard#2-installing-wireguard-client"},"Wireguard documentation section")," specific to your OS for detailed instructions."),(0,r.kt)("p",null,"Once you have installed Wireguard and configured it with the credentials you obtained, you will be able to connect to your Dappnode instance securely."),(0,r.kt)("h3",{id:"8-navigate-to-dappnodes-ui-"},"8. ",(0,r.kt)("strong",{parentName:"h3"},"Navigate to Dappnode's UI")," \ud83c\udfc1"),(0,r.kt)("p",null,"Once your Wireguard tunnel is active, simply open your web browser and go to ",(0,r.kt)("a",{parentName:"p",href:"http://my.dappnode"},"http://my.dappnode")," to begin your journey with Dappnode Cloud!"))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8c6013e9.4f0ba9da.js b/assets/js/8c6013e9.4f0ba9da.js deleted file mode 100644 index 9f66ed26b..000000000 --- a/assets/js/8c6013e9.4f0ba9da.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6110],{4137:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>f});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 l=a.createContext({}),p=function(e){var n=a.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},u=function(e){var n=p(e.components);return a.createElement(l.Provider,{value:n},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(t),m=r,f=c["".concat(l,".").concat(m)]||c[m]||d[m]||o;return t?a.createElement(f,i(i({ref:n},u),{},{components:t})):a.createElement(f,i({ref:n},u))}));function f(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,i=new Array(o);i[0]=m;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var p=2;p {t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var a=t(7462),r=(t(7294),t(4137));const o={},i="GitHub Actions for Dappnode Packages",s={unversionedId:"dev/github-actions",id:"dev/github-actions",title:"GitHub Actions for Dappnode Packages",description:"GitHub Actions help automate workflows around your projects on GitHub. For Dappnode packages, we utilize specific GitHub Actions to manage updates and releases.",source:"@site/docs/dev/github-actions.md",sourceDirName:"dev",slug:"/dev/github-actions",permalink:"/docs/dev/github-actions",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/github-actions.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"Wizard Reference",permalink:"/docs/dev/references/setup-wizard"}},l={},p=[{value:"1. Auto Check for Upstream Updates ( auto_check.yml
)",id:"1-auto-check-for-upstream-updates-auto_checkyml",level:2},{value:"Workflow File:",id:"workflow-file",level:3},{value:"2. Main Build and Pre-release (main.yml
)",id:"2-main-build-and-pre-release-mainyml",level:2},{value:"Workflow File:",id:"workflow-file-1",level:3}],u={toc:p},c="wrapper";function d(e){let{components:n,...t}=e;return(0,r.kt)(c,(0,a.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"github-actions-for-dappnode-packages"},"GitHub Actions for Dappnode Packages"),(0,r.kt)("p",null,"GitHub Actions help automate workflows around your projects on GitHub. For Dappnode packages, we utilize specific GitHub Actions to manage updates and releases."),(0,r.kt)("h2",{id:"1-auto-check-for-upstream-updates-auto_checkyml"},"1. Auto Check for Upstream Updates (",(0,r.kt)("inlineCode",{parentName:"h2"},"auto_check.yml"),")"),(0,r.kt)("p",null,"This action checks if there's an available update from the upstream repository. If an update is found, it creates a Pull Request with the new version."),(0,r.kt)("h3",{id:"workflow-file"},"Workflow File:"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Filename:")," ",(0,r.kt)("inlineCode",{parentName:"p"},"auto_check.yml")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},'name: Bump upstream version\n\non:\n schedule:\n - cron: "00 */4 * * *"\n push:\n branches:\n - "master"\n\njobs:\n build:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v3\n - run: npx @dappnode/dappnodesdk github-action bump-upstream\n env:\n GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n PINATA_API_KEY: ${{ secrets.PINATA_API_KEY }}\n PINATA_SECRET_API_KEY: ${{ secrets.PINATA_SECRET_API_KEY }}\n')),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Features:")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Scheduled Runs"),": The action runs every 4 hours (as per the cron setting)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Environment Variables"),": Uses ",(0,r.kt)("inlineCode",{parentName:"li"},"GITHUB_TOKEN")," for authentication, and ",(0,r.kt)("inlineCode",{parentName:"li"},"PINATA_API_KEY")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"PINATA_SECRET_API_KEY")," for interfacing with the IPFS pinning service Pinata.")),(0,r.kt)("h2",{id:"2-main-build-and-pre-release-mainyml"},"2. Main Build and Pre-release (",(0,r.kt)("inlineCode",{parentName:"h2"},"main.yml"),")"),(0,r.kt)("p",null,"This action builds the Dappnode package and creates a pre-release that's ready to be published."),(0,r.kt)("h3",{id:"workflow-file-1"},"Workflow File:"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Filename:")," ",(0,r.kt)("inlineCode",{parentName:"p"},"main.yml")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},'name: "Main"\non:\n pull_request:\n push:\n branches:\n - "main"\n - "master"\n - "v[0-9]+.[0-9]+.[0-9]+"\n paths-ignore:\n - "README.md"\n\njobs:\n build-test:\n runs-on: ubuntu-latest\n name: Build test\n if: github.event_name != \'push\'\n steps:\n - uses: actions/checkout@v3\n - run: npx @dappnode/dappnodesdk build --skip_save\n\n release:\n name: Release\n runs-on: ubuntu-latest\n if: github.event_name == \'push\'\n steps:\n - uses: actions/checkout@v3\n - name: Publish\n run: npx @dappnode/dappnodesdk publish patch --dappnode_team_preset\n env:\n GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n DEVELOPER_ADDRESS: "0xf35960302a07022aba880dffaec2fdd64d5bf1c1"\n')),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Features:")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Branch Filters"),": The action only triggers on the ",(0,r.kt)("inlineCode",{parentName:"li"},"main"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"master"),", and version tags (e.g., ",(0,r.kt)("inlineCode",{parentName:"li"},"v1.0.0"),")."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Paths Ignore"),": Ignores changes solely related to ",(0,r.kt)("inlineCode",{parentName:"li"},"README.md"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Conditional Runs"),": Different steps are executed based on the event that triggered the workflow (e.g., push event or pull request).")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8c6013e9.c974261e.js b/assets/js/8c6013e9.c974261e.js new file mode 100644 index 000000000..823e4fa71 --- /dev/null +++ b/assets/js/8c6013e9.c974261e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6110],{1542:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>i,toc:()=>d});var t=s(5893),a=s(1151);const r={},o="GitHub Actions for Dappnode Packages",i={id:"dev/github-actions",title:"GitHub Actions for Dappnode Packages",description:"GitHub Actions help automate workflows around your projects on GitHub. For Dappnode packages, we utilize specific GitHub Actions to manage updates and releases.",source:"@site/docs/dev/github-actions.md",sourceDirName:"dev",slug:"/dev/github-actions",permalink:"/docs/dev/github-actions",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/github-actions.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"Wizard Reference",permalink:"/docs/dev/references/setup-wizard"}},c={},d=[{value:"1. Auto Check for Upstream Updates (auto_check.yml
)",id:"1-auto-check-for-upstream-updates-auto_checkyml",level:2},{value:"Workflow File:",id:"workflow-file",level:3},{value:"2. Main Build and Pre-release (main.yml
)",id:"2-main-build-and-pre-release-mainyml",level:2},{value:"Workflow File:",id:"workflow-file-1",level:3}];function l(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"github-actions-for-dappnode-packages",children:"GitHub Actions for Dappnode Packages"}),"\n",(0,t.jsx)(n.p,{children:"GitHub Actions help automate workflows around your projects on GitHub. For Dappnode packages, we utilize specific GitHub Actions to manage updates and releases."}),"\n",(0,t.jsxs)(n.h2,{id:"1-auto-check-for-upstream-updates-auto_checkyml",children:["1. Auto Check for Upstream Updates (",(0,t.jsx)(n.code,{children:"auto_check.yml"}),")"]}),"\n",(0,t.jsx)(n.p,{children:"This action checks if there's an available update from the upstream repository. If an update is found, it creates a Pull Request with the new version."}),"\n",(0,t.jsx)(n.h3,{id:"workflow-file",children:"Workflow File:"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Filename:"})," ",(0,t.jsx)(n.code,{children:"auto_check.yml"})]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'name: Bump upstream version\n\non:\n schedule:\n - cron: "00 */4 * * *"\n push:\n branches:\n - "master"\n\njobs:\n build:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v3\n - run: npx @dappnode/dappnodesdk github-action bump-upstream\n env:\n GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n PINATA_API_KEY: ${{ secrets.PINATA_API_KEY }}\n PINATA_SECRET_API_KEY: ${{ secrets.PINATA_SECRET_API_KEY }}\n'})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Features:"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Scheduled Runs"}),": The action runs every 4 hours (as per the cron setting)."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Environment Variables"}),": Uses ",(0,t.jsx)(n.code,{children:"GITHUB_TOKEN"})," for authentication, and ",(0,t.jsx)(n.code,{children:"PINATA_API_KEY"})," and ",(0,t.jsx)(n.code,{children:"PINATA_SECRET_API_KEY"})," for interfacing with the IPFS pinning service Pinata."]}),"\n"]}),"\n",(0,t.jsxs)(n.h2,{id:"2-main-build-and-pre-release-mainyml",children:["2. Main Build and Pre-release (",(0,t.jsx)(n.code,{children:"main.yml"}),")"]}),"\n",(0,t.jsx)(n.p,{children:"This action builds the Dappnode package and creates a pre-release that's ready to be published."}),"\n",(0,t.jsx)(n.h3,{id:"workflow-file-1",children:"Workflow File:"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Filename:"})," ",(0,t.jsx)(n.code,{children:"main.yml"})]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'name: "Main"\non:\n pull_request:\n push:\n branches:\n - "main"\n - "master"\n - "v[0-9]+.[0-9]+.[0-9]+"\n paths-ignore:\n - "README.md"\n\njobs:\n build-test:\n runs-on: ubuntu-latest\n name: Build test\n if: github.event_name != \'push\'\n steps:\n - uses: actions/checkout@v3\n - run: npx @dappnode/dappnodesdk build --skip_save\n\n release:\n name: Release\n runs-on: ubuntu-latest\n if: github.event_name == \'push\'\n steps:\n - uses: actions/checkout@v3\n - name: Publish\n run: npx @dappnode/dappnodesdk publish patch --dappnode_team_preset\n env:\n GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n DEVELOPER_ADDRESS: "0xf35960302a07022aba880dffaec2fdd64d5bf1c1"\n'})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Features:"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Branch Filters"}),": The action only triggers on the ",(0,t.jsx)(n.code,{children:"main"}),", ",(0,t.jsx)(n.code,{children:"master"}),", and version tags (e.g., ",(0,t.jsx)(n.code,{children:"v1.0.0"}),")."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Paths Ignore"}),": Ignores changes solely related to ",(0,t.jsx)(n.code,{children:"README.md"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Conditional Runs"}),": Different steps are executed based on the event that triggered the workflow (e.g., push event or pull request)."]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>i,a:()=>o});var t=s(7294);const a={},r=t.createContext(a);function o(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8ec292b8.010408e1.js b/assets/js/8ec292b8.010408e1.js deleted file mode 100644 index 1d1fbd2a4..000000000 --- a/assets/js/8ec292b8.010408e1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9058],{4137:(e,t,n)=>{n.d(t,{Zo:()=>l,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 p=a.createContext({}),u=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},l=function(e){var t=u(e.components);return a.createElement(p.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,p=e.parentName,l=i(e,["components","mdxType","originalType","parentName"]),d=u(n),m=o,h=d["".concat(p,".").concat(m)]||d[m]||c[m]||r;return n?a.createElement(h,s(s({ref:t},l),{},{components:n})):a.createElement(h,s({ref:t},l))}));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]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[d]="string"==typeof e?e:o,s[1]=i;for(var u=2;u {n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>c,frontMatter:()=>r,metadata:()=>i,toc:()=>u});var a=n(7462),o=(n(7294),n(4137));const r={},s="Setup",i={unversionedId:"user/getting-started/setup",id:"user/getting-started/setup",title:"Setup",description:"Setting up Dappnode is a straightforward process. This guide will walk you through configuring your Dappnode for the first time.",source:"@site/docs/user/getting-started/setup.md",sourceDirName:"user/getting-started",slug:"/user/getting-started/setup",permalink:"/docs/user/getting-started/setup",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/getting-started/setup.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Register",permalink:"/docs/user/getting-started/register"},next:{title:"Next Steps",permalink:"/docs/user/getting-started/next-steps"}},p={},u=[{value:"Choose Repository Source",id:"choose-repository-source",level:2},{value:"Enable/Disable System Auto Updates",id:"enabledisable-system-auto-updates",level:2},{value:"Enable system notifications",id:"enable-system-notifications",level:2},{value:"Change Host User Password",id:"change-host-user-password",level:2},{value:"All Set!",id:"all-set",level:2}],l={toc:u},d="wrapper";function c(e){let{components:t,...r}=e;return(0,o.kt)(d,(0,a.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"setup"},"Setup"),(0,o.kt)("p",null,"Setting up Dappnode is a straightforward process. This guide will walk you through configuring your Dappnode for the first time."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"setup-1",src:n(2202).Z,width:"2388",height:"638"})),(0,o.kt)("h2",{id:"choose-repository-source"},"Choose Repository Source"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"setup-2",src:n(8399).Z,width:"2422",height:"1358"})),(0,o.kt)("p",null,"Before you dive in, choose the source from which Dappnode retrieves its data:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Remote Node"),": Connect your Dappnode to an external Ethereum node. This option is lightweight, as you won't need to host the blockchain data on your machine.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Full Node"),": Have your Dappnode host the complete Ethereum blockchain. This ensures maximum decentralization and independence, but it requires more storage and bandwidth."))),(0,o.kt)("admonition",{title:"Why is this important?",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Dappnode uses smart contracts to publish the dapps that are accessible in the dappstore. For this reason, Dappnode needs access to an Ethereum node to read the contents of said smart contract. Choosing between a remote and a full node directly impacts how decentralized your setup is."),(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("strong",{parentName:"p"},"Decentralization Benefits"),": By relying less on third-party services, you enhance security, reduce points of failure, and support the Ethereum network's robustness, but it might not work for you if you have limited storage or bandwidth.")),(0,o.kt)("h2",{id:"enabledisable-system-auto-updates"},"Enable/Disable System Auto Updates"),(0,o.kt)("p",null,"Dappnode comes with an auto-update feature. This means it will automatically update itself with new releases, ensuring you always have the latest and most secure version. Activate auto-updates to lessen maintenance and better guard against vulnerabilities."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"setup-3",src:n(4602).Z,width:"2422",height:"948"})),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"We ",(0,o.kt)("strong",{parentName:"p"},"strongly")," recommend activating auto-updates to ensure your Dappnode is always up to date with the latest versions.")),(0,o.kt)("h2",{id:"enable-system-notifications"},"Enable system notifications"),(0,o.kt)("p",null,"Dappnode can send you notifications about important events, such as your dappnode being offline or high CPU usage. This is a great way to stay on top of your Dappnode's health and performance."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"setup-4",src:n(4644).Z,width:"1926",height:"886"})),(0,o.kt)("h2",{id:"change-host-user-password"},"Change Host User Password"),(0,o.kt)("p",null,"Beneath the hood, Dappnode operates on a Linux framework, protected by a password, which will be needed to access your ",(0,o.kt)("a",{parentName:"p",href:"/docs/user/access-your-dappnode/terminal"},"Dappnode's terminal")," To amplify your Dappnode's defense:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Change")," the ",(0,o.kt)("strong",{parentName:"li"},"default Linux")," machine ",(0,o.kt)("strong",{parentName:"li"},"password")," for user ",(0,o.kt)("inlineCode",{parentName:"li"},"dappnode"),"."),(0,o.kt)("li",{parentName:"ol"},"Choose a ",(0,o.kt)("strong",{parentName:"li"},"strong, unique password")," that's not easily guessable."),(0,o.kt)("li",{parentName:"ol"},"Remember to ",(0,o.kt)("strong",{parentName:"li"},"store this password in a secure location"),". If you lose access to this password, you could be locked out of your Dappnode.")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Always save and backup your password. This is crucial for ensuring uninterrupted access to your Dappnode.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"setup-4",src:n(3782).Z,width:"2422",height:"1180"})),(0,o.kt)("h2",{id:"all-set"},"All Set!"),(0,o.kt)("p",null,"Congratulations! Your Dappnode is now configured and ready for use. Dive into the world of decentralized applications and enjoy the self-hosted, decentralized internet experience."),(0,o.kt)("p",null,"With these steps, your Dappnode should be up and running efficiently. Always refer to the official Dappnode documentation or community for any further queries or support."),(0,o.kt)("admonition",{title:"Keep your Dappnode up to date",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Remember to regularly check for updates and best practices to ensure your Dappnode stays secure and efficient.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"setup-5",src:n(2028).Z,width:"2422",height:"804"})))}c.isMDXComponent=!0},2202:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/setup-1-20f4539a87a606b2ab7be68a06080912.png"},8399:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/setup-2-a5a1f0456cdbb9e861104376a30d3047.png"},4602:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/setup-3-6b0500114fc971ac2b4e23aee5e2a6a7.png"},4644:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/setup-4-853e6ca7d1d4f5dea03695e39223e572.png"},3782:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/setup-5-7ef2fb5a75d77003c5192bafbd656ff8.png"},2028:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/setup-6-8ca9deab19513fdc4b62aa78b4a5297c.png"}}]); \ No newline at end of file diff --git a/assets/js/8ec292b8.80a3a62a.js b/assets/js/8ec292b8.80a3a62a.js new file mode 100644 index 000000000..11ca02a71 --- /dev/null +++ b/assets/js/8ec292b8.80a3a62a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9058],{277:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>a,default:()=>l,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var n=s(5893),o=s(1151);const i={},a="Setup",r={id:"user/getting-started/setup",title:"Setup",description:"Setting up Dappnode is a straightforward process. This guide will walk you through configuring your Dappnode for the first time.",source:"@site/docs/user/getting-started/setup.md",sourceDirName:"user/getting-started",slug:"/user/getting-started/setup",permalink:"/docs/user/getting-started/setup",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/getting-started/setup.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Register",permalink:"/docs/user/getting-started/register"},next:{title:"Next Steps",permalink:"/docs/user/getting-started/next-steps"}},d={},c=[{value:"Choose Repository Source",id:"choose-repository-source",level:2},{value:"Enable/Disable System Auto Updates",id:"enabledisable-system-auto-updates",level:2},{value:"Enable system notifications",id:"enable-system-notifications",level:2},{value:"Change Host User Password",id:"change-host-user-password",level:2},{value:"All Set!",id:"all-set",level:2}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"setup",children:"Setup"}),"\n",(0,n.jsx)(t.p,{children:"Setting up Dappnode is a straightforward process. This guide will walk you through configuring your Dappnode for the first time."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"setup-1",src:s(2202).Z+"",width:"2388",height:"638"})}),"\n",(0,n.jsx)(t.h2,{id:"choose-repository-source",children:"Choose Repository Source"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"setup-2",src:s(8399).Z+"",width:"2422",height:"1358"})}),"\n",(0,n.jsx)(t.p,{children:"Before you dive in, choose the source from which Dappnode retrieves its data:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"Remote Node"}),": Connect your Dappnode to an external Ethereum node. This option is lightweight, as you won't need to host the blockchain data on your machine."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"Full Node"}),": Have your Dappnode host the complete Ethereum blockchain. This ensures maximum decentralization and independence, but it requires more storage and bandwidth."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.admonition,{title:"Why is this important?",type:"info",children:[(0,n.jsx)(t.p,{children:"Dappnode uses smart contracts to publish the dapps that are accessible in the dappstore. For this reason, Dappnode needs access to an Ethereum node to read the contents of said smart contract. Choosing between a remote and a full node directly impacts how decentralized your setup is."}),(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"Decentralization Benefits"}),": By relying less on third-party services, you enhance security, reduce points of failure, and support the Ethereum network's robustness, but it might not work for you if you have limited storage or bandwidth."]})]}),"\n",(0,n.jsx)(t.h2,{id:"enabledisable-system-auto-updates",children:"Enable/Disable System Auto Updates"}),"\n",(0,n.jsx)(t.p,{children:"Dappnode comes with an auto-update feature. This means it will automatically update itself with new releases, ensuring you always have the latest and most secure version. Activate auto-updates to lessen maintenance and better guard against vulnerabilities."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"setup-3",src:s(4602).Z+"",width:"2422",height:"948"})}),"\n",(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsxs)(t.p,{children:["We ",(0,n.jsx)(t.strong,{children:"strongly"})," recommend activating auto-updates to ensure your Dappnode is always up to date with the latest versions."]})}),"\n",(0,n.jsx)(t.h2,{id:"enable-system-notifications",children:"Enable system notifications"}),"\n",(0,n.jsx)(t.p,{children:"Dappnode can send you notifications about important events, such as your dappnode being offline or high CPU usage. This is a great way to stay on top of your Dappnode's health and performance."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"setup-4",src:s(4644).Z+"",width:"1926",height:"886"})}),"\n",(0,n.jsx)(t.h2,{id:"change-host-user-password",children:"Change Host User Password"}),"\n",(0,n.jsxs)(t.p,{children:["Beneath the hood, Dappnode operates on a Linux framework, protected by a password, which will be needed to access your ",(0,n.jsx)(t.a,{href:"/docs/user/access-your-dappnode/terminal",children:"Dappnode's terminal"})," To amplify your Dappnode's defense:"]}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Change"})," the ",(0,n.jsx)(t.strong,{children:"default Linux"})," machine ",(0,n.jsx)(t.strong,{children:"password"})," for user ",(0,n.jsx)(t.code,{children:"dappnode"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:["Choose a ",(0,n.jsx)(t.strong,{children:"strong, unique password"})," that's not easily guessable."]}),"\n",(0,n.jsxs)(t.li,{children:["Remember to ",(0,n.jsx)(t.strong,{children:"store this password in a secure location"}),". If you lose access to this password, you could be locked out of your Dappnode."]}),"\n"]}),"\n",(0,n.jsx)(t.admonition,{type:"caution",children:(0,n.jsx)(t.p,{children:"Always save and backup your password. This is crucial for ensuring uninterrupted access to your Dappnode."})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"setup-4",src:s(3782).Z+"",width:"2422",height:"1180"})}),"\n",(0,n.jsx)(t.h2,{id:"all-set",children:"All Set!"}),"\n",(0,n.jsx)(t.p,{children:"Congratulations! Your Dappnode is now configured and ready for use. Dive into the world of decentralized applications and enjoy the self-hosted, decentralized internet experience."}),"\n",(0,n.jsx)(t.p,{children:"With these steps, your Dappnode should be up and running efficiently. Always refer to the official Dappnode documentation or community for any further queries or support."}),"\n",(0,n.jsx)(t.admonition,{title:"Keep your Dappnode up to date",type:"info",children:(0,n.jsx)(t.p,{children:"Remember to regularly check for updates and best practices to ensure your Dappnode stays secure and efficient."})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"setup-5",src:s(2028).Z+"",width:"2422",height:"804"})})]})}function l(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(p,{...e})}):p(e)}},2202:(e,t,s)=>{s.d(t,{Z:()=>n});const n=s.p+"assets/images/setup-1-20f4539a87a606b2ab7be68a06080912.png"},8399:(e,t,s)=>{s.d(t,{Z:()=>n});const n=s.p+"assets/images/setup-2-a5a1f0456cdbb9e861104376a30d3047.png"},4602:(e,t,s)=>{s.d(t,{Z:()=>n});const n=s.p+"assets/images/setup-3-6b0500114fc971ac2b4e23aee5e2a6a7.png"},4644:(e,t,s)=>{s.d(t,{Z:()=>n});const n=s.p+"assets/images/setup-4-853e6ca7d1d4f5dea03695e39223e572.png"},3782:(e,t,s)=>{s.d(t,{Z:()=>n});const n=s.p+"assets/images/setup-5-7ef2fb5a75d77003c5192bafbd656ff8.png"},2028:(e,t,s)=>{s.d(t,{Z:()=>n});const n=s.p+"assets/images/setup-6-8ca9deab19513fdc4b62aa78b4a5297c.png"},1151:(e,t,s)=>{s.d(t,{Z:()=>r,a:()=>a});var n=s(7294);const o={},i=n.createContext(o);function a(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8f981d3f.3eade2e1.js b/assets/js/8f981d3f.3eade2e1.js new file mode 100644 index 000000000..3b218a391 --- /dev/null +++ b/assets/js/8f981d3f.3eade2e1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6967],{742:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>a,toc:()=>l});var i=t(5893),o=t(1151);const s={},r="Diva package for Dappnode",a={id:"user/staking/ethereum/dvt-technologies/diva",title:"Diva package for Dappnode",description:"---",source:"@site/docs/user/staking/ethereum/dvt-technologies/diva.md",sourceDirName:"user/staking/ethereum/dvt-technologies",slug:"/user/staking/ethereum/dvt-technologies/diva",permalink:"/docs/user/staking/ethereum/dvt-technologies/diva",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/ethereum/dvt-technologies/diva.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"SSV Distributed Validator package for Dappnode",permalink:"/docs/user/staking/ethereum/dvt-technologies/ssv-network"},next:{title:"Gnosis Chain",permalink:"/docs/user/staking/gnosis-chain/solo"}},d={},l=[{value:"Introduction",id:"introduction",level:3},{value:"Requirements",id:"requirements",level:3},{value:"Registering a Dappnode Diva Operator",id:"registering-a-dappnode-diva-operator",level:3},{value:"Monitoring your Diva nodes",id:"monitoring-your-diva-nodes",level:3}];function c(e){const n={a:"a",admonition:"admonition",h1:"h1",h3:"h3",hr:"hr",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"diva-package-for-dappnode",children:"Diva package for Dappnode"}),"\n",(0,i.jsx)(n.hr,{}),"\n",(0,i.jsx)(n.h3,{id:"introduction",children:(0,i.jsx)(n.strong,{children:"Introduction"})}),"\n",(0,i.jsx)(n.p,{children:"Diva is an Ethereum Liquid Staking protocol powered by Distributed Validator Technology (DVT). It extends Ethereum's Proof of Stake providing new functionality for Stakers and Operators:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Liquid Stakers receive divETH, a Liquid Staking Token which generates Ethereum Staking Rewards."}),"\n",(0,i.jsx)(n.li,{children:"Operators run a Distributed Validation node to fulfill staking duties and earn additional Operator Rewards."}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["This package allows you to run a Diva Operator node, and it is available for the ",(0,i.jsx)(n.a,{href:"http://my.dappnode/installer/public/diva-holesky.public.dappnode.eth",children:"Holesky Testnet"}),". The Ethereum mainnet version of this package is still undergoing testing and will be available in the DAppStore soon."]}),"\n",(0,i.jsx)(n.h3,{id:"requirements",children:(0,i.jsx)(n.strong,{children:"Requirements"})}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"The first thing you'll need to do is set up a fully-synced node. This can be don through the Stakers Menu in Dappnode by selecting:"}),"\n"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"1 Execution Client (Geth, Besu, Erigon or Nethermind)"}),"\n",(0,i.jsx)(n.li,{children:"1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus)"}),"\n",(0,i.jsx)(n.li,{children:"MEV Boost (optional)"}),"\n"]}),"\n",(0,i.jsxs)(n.ol,{start:"2",children:["\n",(0,i.jsxs)(n.li,{children:["Installing the Diva package for Dappnode. This can be done by visiting the ",(0,i.jsx)(n.a,{href:"http://my.dappnode/installer/dnp",children:"DAppStore"})," in the Dappnode UI. You'll be asked to set two passwords when going through the installation process, as well as your operator's address and Discord handle (for testnet purposes)."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Diva config tab",src:t(5816).Z+"",width:"1734",height:"748"})}),"\n",(0,i.jsx)(n.h3,{id:"registering-a-dappnode-diva-operator",children:(0,i.jsx)(n.strong,{children:"Registering a Dappnode Diva Operator"})}),"\n",(0,i.jsx)(n.p,{children:"After successfully installing the Diva package, you'll need to access the package's interface by clicking on UI. This will take you to the Diva app where you'll need to connect your wallet to register your Diva node as an operator. You can register multiple operators using the same wallet."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Diva wizard",src:t(516).Z+"",width:"1548",height:"680"})}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"The wallet address used to register the operator is the only address that will hold management permissions for it, so make sure you keep it safe!"})}),"\n",(0,i.jsx)(n.h3,{id:"monitoring-your-diva-nodes",children:(0,i.jsx)(n.strong,{children:"Monitoring your Diva nodes"})}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://divascan.io",children:"Divascan"})," is a tool developed to monitor Diva nodes and operators. You can enter your operator address to get information on the validators' performances. You can also get more information on the Diva protocol."]})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},5816:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/diva-config1-9cd267af6aa4fb06df05a289a197b1c3.png"},516:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/diva-config2-2e49aba2fbe6e74b845fb85f19d955ea.png"},1151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>r});var i=t(7294);const o={},s=i.createContext(o);function r(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8f981d3f.8182e993.js b/assets/js/8f981d3f.8182e993.js deleted file mode 100644 index a85a9a62e..000000000 --- a/assets/js/8f981d3f.8182e993.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6967],{4137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t =0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),p=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=p(n),g=o,h=u["".concat(l,".").concat(g)]||u[g]||c[g]||a;return n?r.createElement(h,i(i({ref:t},d),{},{components:n})):r.createElement(h,i({ref:t},d))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=g;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:o,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var r=n(7462),o=(n(7294),n(4137));const a={},i="Diva package for Dappnode",s={unversionedId:"user/staking/ethereum/dvt-technologies/diva",id:"user/staking/ethereum/dvt-technologies/diva",title:"Diva package for Dappnode",description:"---",source:"@site/docs/user/staking/ethereum/dvt-technologies/diva.md",sourceDirName:"user/staking/ethereum/dvt-technologies",slug:"/user/staking/ethereum/dvt-technologies/diva",permalink:"/docs/user/staking/ethereum/dvt-technologies/diva",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/ethereum/dvt-technologies/diva.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"SSV Distributed Validator package for Dappnode",permalink:"/docs/user/staking/ethereum/dvt-technologies/ssv-network"},next:{title:"Gnosis Chain",permalink:"/docs/user/staking/gnosis-chain/solo"}},l={},p=[{value:"Introduction",id:"introduction",level:3},{value:"Requirements",id:"requirements",level:3},{value:"Registering a Dappnode Diva Operator",id:"registering-a-dappnode-diva-operator",level:3},{value:"Monitoring your Diva nodes",id:"monitoring-your-diva-nodes",level:3}],d={toc:p},u="wrapper";function c(e){let{components:t,...a}=e;return(0,o.kt)(u,(0,r.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"diva-package-for-dappnode"},"Diva package for Dappnode"),(0,o.kt)("hr",null),(0,o.kt)("h3",{id:"introduction"},(0,o.kt)("strong",{parentName:"h3"},"Introduction")),(0,o.kt)("p",null,"Diva is an Ethereum Liquid Staking protocol powered by Distributed Validator Technology (DVT). It extends Ethereum's Proof of Stake providing new functionality for Stakers and Operators:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Liquid Stakers receive divETH, a Liquid Staking Token which generates Ethereum Staking Rewards."),(0,o.kt)("li",{parentName:"ul"},"Operators run a Distributed Validation node to fulfill staking duties and earn additional Operator Rewards.")),(0,o.kt)("p",null,"This package allows you to run a Diva Operator node, and it is available for the ",(0,o.kt)("a",{parentName:"p",href:"http://my.dappnode/installer/public/diva-holesky.public.dappnode.eth"},"Holesky Testnet"),". The Ethereum mainnet version of this package is still undergoing testing and will be available in the DAppStore soon."),(0,o.kt)("h3",{id:"requirements"},(0,o.kt)("strong",{parentName:"h3"},"Requirements")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"The first thing you'll need to do is set up a fully-synced node. This can be don through the Stakers Menu in Dappnode by selecting:")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"1 Execution Client (Geth, Besu, Erigon or Nethermind)"),(0,o.kt)("li",{parentName:"ul"},"1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus)"),(0,o.kt)("li",{parentName:"ul"},"MEV Boost (optional)")),(0,o.kt)("ol",{start:2},(0,o.kt)("li",{parentName:"ol"},"Installing the Diva package for Dappnode. This can be done by visiting the ",(0,o.kt)("a",{parentName:"li",href:"http://my.dappnode/installer/dnp"},"DAppStore")," in the Dappnode UI. You'll be asked to set two passwords when going through the installation process, as well as your operator's address and Discord handle (for testnet purposes).")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Diva config tab",src:n(5816).Z,width:"1734",height:"748"})),(0,o.kt)("h3",{id:"registering-a-dappnode-diva-operator"},(0,o.kt)("strong",{parentName:"h3"},"Registering a Dappnode Diva Operator")),(0,o.kt)("p",null,"After successfully installing the Diva package, you'll need to access the package's interface by clicking on UI. This will take you to the Diva app where you'll need to connect your wallet to register your Diva node as an operator. You can register multiple operators using the same wallet."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Diva wizard",src:n(516).Z,width:"1548",height:"680"})),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"The wallet address used to register the operator is the only address that will hold management permissions for it, so make sure you keep it safe!")),(0,o.kt)("h3",{id:"monitoring-your-diva-nodes"},(0,o.kt)("strong",{parentName:"h3"},"Monitoring your Diva nodes")),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://divascan.io"},"Divascan")," is a tool developed to monitor Diva nodes and operators. You can enter your operator address to get information on the validators' performances. You can also get more information on the Diva protocol."))}c.isMDXComponent=!0},5816:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/diva-config1-9cd267af6aa4fb06df05a289a197b1c3.png"},516:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/diva-config2-2e49aba2fbe6e74b845fb85f19d955ea.png"}}]); \ No newline at end of file diff --git a/assets/js/90558919.4e9ac069.js b/assets/js/90558919.4e9ac069.js new file mode 100644 index 000000000..843c98f6a --- /dev/null +++ b/assets/js/90558919.4e9ac069.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5458],{7597:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>l,frontMatter:()=>i,metadata:()=>d,toc:()=>a});var o=t(5893),s=t(1151);const i={},r="Access Dappnode via Wi-Fi",d={id:"user/getting-started/access-dappnode-via-wifi",title:"Access Dappnode via Wi-Fi",description:"After connecting your Dappnode to the router and power, and turning it on, it's time to connect to it.",source:"@site/docs/user/getting-started/access-dappnode-via-wifi.md",sourceDirName:"user/getting-started",slug:"/user/getting-started/access-dappnode-via-wifi",permalink:"/docs/user/getting-started/access-dappnode-via-wifi",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/getting-started/access-dappnode-via-wifi.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Connect your dappnode to the router and power",permalink:"/docs/user/getting-started/connect-dappnode-to-the-router"},next:{title:"Register",permalink:"/docs/user/getting-started/register"}},c={},a=[{value:"1. Connect to DappnodeWIFI:",id:"1-connect-to-dappnodewifi",level:2},{value:"2. Access the Dappnode Interface:",id:"2-access-the-dappnode-interface",level:2},{value:"Troubleshooting:",id:"troubleshooting",level:2}];function p(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components},{Details:i}=n;return i||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"access-dappnode-via-wi-fi",children:"Access Dappnode via Wi-Fi"}),"\n",(0,o.jsx)(n.p,{children:"After connecting your Dappnode to the router and power, and turning it on, it's time to connect to it."}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsxs)(n.p,{children:["You ",(0,o.jsx)(n.strong,{children:"don't need"})," a monitor, keyboard, or mouse to use Dappnode. You just need to plug it to your router and you can access it from your laptop or mobile phone's browser!"]})}),"\n",(0,o.jsxs)(n.h2,{id:"1-connect-to-dappnodewifi",children:["1. ",(0,o.jsx)(n.strong,{children:"Connect to DappnodeWIFI"}),":"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"After a couple of minutes of being turned on, your dappnode will generate a WiFi hotspot"}),"\n",(0,o.jsxs)(n.li,{children:["From the device you wish to connect with, look for the Wi-Fi network named ",(0,o.jsx)(n.strong,{children:"DappnodeWIFI"}),"."]}),"\n",(0,o.jsxs)(n.li,{children:["Connect using the default password: ",(0,o.jsx)(n.strong,{children:"dappnode"}),"."]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Connect to Dappnode Wi-Fi",src:t(7023).Z+"",width:"912",height:"102"})}),"\n",(0,o.jsxs)(n.h2,{id:"2-access-the-dappnode-interface",children:["2. ",(0,o.jsx)(n.strong,{children:"Access the Dappnode Interface"}),":"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Open your web browser."}),"\n",(0,o.jsxs)(n.li,{children:["Navigate to: ",(0,o.jsx)(n.a,{href:"http://my.dappnode/login",children:"http://my.dappnode/login"})]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting:"}),"\n",(0,o.jsxs)(i,{children:[(0,o.jsxs)(n.p,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("b",{children:"How can I change my Dappnode Wi-Fi password?"})}),"\nTo change the Wi-Fi password:"]}),(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["While connected to the Dappnode, go to ",(0,o.jsx)("a",{href:"http://my.dappnode/wireless-network/wifi",children:"Wi-Fi Settings"})]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:'Enter your new desired password in both the "New Password" and "Confirm New Password" fields.'}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:'Click on "Change Credentials".'}),"\n"]}),"\n"]})]}),"\n",(0,o.jsx)(i,{children:(0,o.jsxs)(n.p,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("b",{children:"I can't access my Dappnode via Wi-Fi"})}),"\nYou can explore other methods to access your Dappnode ",(0,o.jsx)("a",{href:"/docs/user/access-your-dappnode/overview",children:"here"}),"."]})})]})}function l(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(p,{...e})}):p(e)}},7023:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/dappnode-wifi-f5bea29ef163e8454642ea24484c4a55.png"},1151:(e,n,t)=>{t.d(n,{Z:()=>d,a:()=>r});var o=t(7294);const s={},i=o.createContext(s);function r(e){const n=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/90558919.addb6277.js b/assets/js/90558919.addb6277.js deleted file mode 100644 index 42c712930..000000000 --- a/assets/js/90558919.addb6277.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5458],{4137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>f});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t =0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),c=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=c(e.components);return o.createElement(s.Provider,{value:t},e.children)},l="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,d=p(e,["components","mdxType","originalType","parentName"]),l=c(n),m=r,f=l["".concat(s,".").concat(m)]||l[m]||u[m]||a;return n?o.createElement(f,i(i({ref:t},d),{},{components:n})):o.createElement(f,i({ref:t},d))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=m;var p={};for(var s in t)hasOwnProperty.call(t,s)&&(p[s]=t[s]);p.originalType=e,p[l]="string"==typeof e?e:r,i[1]=p;for(var c=2;c{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>p,toc:()=>c});var o=n(7462),r=(n(7294),n(4137));const a={},i="Access Dappnode via Wi-Fi",p={unversionedId:"user/getting-started/access-dappnode-via-wifi",id:"user/getting-started/access-dappnode-via-wifi",title:"Access Dappnode via Wi-Fi",description:"After connecting your Dappnode to the router and power, and turning it on, it's time to connect to it.",source:"@site/docs/user/getting-started/access-dappnode-via-wifi.md",sourceDirName:"user/getting-started",slug:"/user/getting-started/access-dappnode-via-wifi",permalink:"/docs/user/getting-started/access-dappnode-via-wifi",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/getting-started/access-dappnode-via-wifi.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Connect your dappnode to the router and power",permalink:"/docs/user/getting-started/connect-dappnode-to-the-router"},next:{title:"Register",permalink:"/docs/user/getting-started/register"}},s={},c=[{value:"1. Connect to DappnodeWIFI:",id:"1-connect-to-dappnodewifi",level:2},{value:"2. Access the Dappnode Interface:",id:"2-access-the-dappnode-interface",level:2},{value:"Troubleshooting:",id:"troubleshooting",level:2}],d={toc:c},l="wrapper";function u(e){let{components:t,...a}=e;return(0,r.kt)(l,(0,o.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"access-dappnode-via-wi-fi"},"Access Dappnode via Wi-Fi"),(0,r.kt)("p",null,"After connecting your Dappnode to the router and power, and turning it on, it's time to connect to it."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"You ",(0,r.kt)("strong",{parentName:"p"},"don't need")," a monitor, keyboard, or mouse to use Dappnode. You just need to plug it to your router and you can access it from your laptop or mobile phone's browser!")),(0,r.kt)("h2",{id:"1-connect-to-dappnodewifi"},"1. ",(0,r.kt)("strong",{parentName:"h2"},"Connect to DappnodeWIFI"),":"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"After a couple of minutes of being turned on, your dappnode will generate a WiFi hotspot"),(0,r.kt)("li",{parentName:"ul"},"From the device you wish to connect with, look for the Wi-Fi network named ",(0,r.kt)("strong",{parentName:"li"},"DappnodeWIFI"),"."),(0,r.kt)("li",{parentName:"ul"},"Connect using the default password: ",(0,r.kt)("strong",{parentName:"li"},"dappnode"),".",(0,r.kt)("img",{alt:"Connect to Dappnode Wi-Fi",src:n(7023).Z,width:"912",height:"102"}))),(0,r.kt)("h2",{id:"2-access-the-dappnode-interface"},"2. ",(0,r.kt)("strong",{parentName:"h2"},"Access the Dappnode Interface"),":"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Open your web browser."),(0,r.kt)("li",{parentName:"ul"},"Navigate to: ",(0,r.kt)("a",{parentName:"li",href:"http://my.dappnode/login"},"http://my.dappnode/login"))),(0,r.kt)("h2",{id:"troubleshooting"},"Troubleshooting:"),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("b",null,"How can I change my Dappnode Wi-Fi password?")),"To change the Wi-Fi password:",(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"While connected to the Dappnode, go to ",(0,r.kt)("a",{href:"http://my.dappnode/wireless-network/wifi"},"Wi-Fi Settings"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},'Enter your new desired password in both the "New Password" and "Confirm New Password" fields.')),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},'Click on "Change Credentials".')))),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("b",null,"I can't access my Dappnode via Wi-Fi")),"You can explore other methods to access your Dappnode ",(0,r.kt)("a",{href:"/docs/user/access-your-dappnode/overview"},"here"),"."))}u.isMDXComponent=!0},7023:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/dappnode-wifi-f5bea29ef163e8454642ea24484c4a55.png"}}]); \ No newline at end of file diff --git a/assets/js/91e54d81.137d5b07.js b/assets/js/91e54d81.137d5b07.js new file mode 100644 index 000000000..d3d28b95b --- /dev/null +++ b/assets/js/91e54d81.137d5b07.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2642],{7589:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>o,toc:()=>c});var a=t(5893),n=t(1151);const i={},r="Packages' Signature",o={id:"user/packages/signature",title:"Packages' Signature",description:"Dappnode's Packages Signatures",source:"@site/docs/user/packages/signature.md",sourceDirName:"user/packages",slug:"/user/packages/signature",permalink:"/docs/user/packages/signature",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/signature.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Understanding Dappnode Packages",permalink:"/docs/user/packages/understanding-dappnode-packages"},next:{title:"Dappnode Monitoring Service (DMS)",permalink:"/docs/user/packages/dms"}},d={},c=[{value:"Dappnode's Packages Signatures",id:"dappnodes-packages-signatures",level:2},{value:"Release trusted keys",id:"release-trusted-keys",level:2},{value:"Bypass trusted signature",id:"bypass-trusted-signature",level:2}];function u(e){const s={a:"a",h1:"h1",h2:"h2",img:"img",p:"p",...(0,n.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.h1,{id:"packages-signature",children:"Packages' Signature"}),"\n",(0,a.jsx)(s.h2,{id:"dappnodes-packages-signatures",children:"Dappnode's Packages Signatures"}),"\n",(0,a.jsx)(s.p,{children:"All Dappnode's packages must be on chain, which means that need a digital signature for verification. This cryptographic signature serves as a stamp of authenticity, enabling users to prove the identity of the package's author and ensuring the integrity of its source. Before installing any package into your Dappnode environment, is essential to ensure that it comes from a trusted author. This measure is vital for safeguarding your Dappnode infrastructure against unauthorized access or potential security breaches."}),"\n",(0,a.jsx)(s.h2,{id:"release-trusted-keys",children:"Release trusted keys"}),"\n",(0,a.jsxs)(s.p,{children:['By default, our software comes with a set of pre-approved keys that have validation by the Dappnode team to ensure their reliability. However, users have the flexibility to manage these trusted keys according to their preferences. If you want to check the addresses trusted by us, or even add an address trusted by yourself, you can do it in the "System" tab on the side menu, within the ',(0,a.jsx)(s.a,{href:"http://my.dappnode/system/advanced",children:'"Advanced" module'}),', in the "Release trusted keys" section.']}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"Release trusted keys table",src:t(695).Z+"",width:"1713",height:"583"})}),"\n",(0,a.jsx)(s.p,{children:"This feature could be particularly useful when users intend to install Dappnode packages sourced from alternative providers or even when developing their own packages. Nevertheless, it is strongly advised to have caution when modifying trusted keys and to only incorporate new addresses after thorough verification of their credibility."}),"\n",(0,a.jsx)(s.h2,{id:"bypass-trusted-signature",children:"Bypass trusted signature"}),"\n",(0,a.jsx)(s.p,{children:"If a user attempts to install a package whose signature fails to match any of the trusted keys listed in the system, installation will be automatically blocked. However, is it possible to bypass this safeguard by toggling the trusted signature switch during the installation process. This one is only displayed if advanced options dropdown menu is active before the installation."}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"Trusted signature switch",src:t(696).Z+"",width:"632",height:"95"})})]})}function p(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},695:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/release-trusted-keys-b7f251d78c925c3b5c2692777afbd842.png"},696:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/signed-safe-switch-e6d549eb68086ef3684269e4c7692474.png"},1151:(e,s,t)=>{t.d(s,{Z:()=>o,a:()=>r});var a=t(7294);const n={},i=a.createContext(n);function r(e){const s=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),a.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/91e54d81.f96a4ff8.js b/assets/js/91e54d81.f96a4ff8.js deleted file mode 100644 index 43e2f5fc7..000000000 --- a/assets/js/91e54d81.f96a4ff8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2642],{4137:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>y});var r=a(7294);function s(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function n(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t=1;t =0||(s[a]=e[a]);return s}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,a)&&(s[a]=e[a])}return s}var u=r.createContext({}),c=function(e){var t=r.useContext(u),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},p=function(e){var t=c(e.components);return r.createElement(u.Provider,{value:t},e.children)},d="mdxType",l={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var a=e.components,s=e.mdxType,n=e.originalType,u=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),d=c(a),g=s,y=d["".concat(u,".").concat(g)]||d[g]||l[g]||n;return a?r.createElement(y,i(i({ref:t},p),{},{components:a})):r.createElement(y,i({ref:t},p))}));function y(e,t){var a=arguments,s=t&&t.mdxType;if("string"==typeof e||s){var n=a.length,i=new Array(n);i[0]=g;var o={};for(var u in t)hasOwnProperty.call(t,u)&&(o[u]=t[u]);o.originalType=e,o[d]="string"==typeof e?e:s,i[1]=o;for(var c=2;c {a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>l,frontMatter:()=>n,metadata:()=>o,toc:()=>c});var r=a(7462),s=(a(7294),a(4137));const n={},i="Packages' Signature",o={unversionedId:"user/packages/signature",id:"user/packages/signature",title:"Packages' Signature",description:"Dappnode's Packages Signatures",source:"@site/docs/user/packages/signature.md",sourceDirName:"user/packages",slug:"/user/packages/signature",permalink:"/docs/user/packages/signature",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/signature.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Understanding Dappnode Packages",permalink:"/docs/user/packages/understanding-dappnode-packages"},next:{title:"Dappnode Monitoring Service (DMS)",permalink:"/docs/user/packages/dms"}},u={},c=[{value:"Dappnode's Packages Signatures",id:"dappnodes-packages-signatures",level:2},{value:"Release trusted keys",id:"release-trusted-keys",level:2},{value:"Bypass trusted signature",id:"bypass-trusted-signature",level:2}],p={toc:c},d="wrapper";function l(e){let{components:t,...n}=e;return(0,s.kt)(d,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"packages-signature"},"Packages' Signature"),(0,s.kt)("h2",{id:"dappnodes-packages-signatures"},"Dappnode's Packages Signatures"),(0,s.kt)("p",null,"All Dappnode's packages must be on chain, which means that need a digital signature for verification. This cryptographic signature serves as a stamp of authenticity, enabling users to prove the identity of the package's author and ensuring the integrity of its source. Before installing any package into your Dappnode environment, is essential to ensure that it comes from a trusted author. This measure is vital for safeguarding your Dappnode infrastructure against unauthorized access or potential security breaches."),(0,s.kt)("h2",{id:"release-trusted-keys"},"Release trusted keys"),(0,s.kt)("p",null,'By default, our software comes with a set of pre-approved keys that have validation by the Dappnode team to ensure their reliability. However, users have the flexibility to manage these trusted keys according to their preferences. If you want to check the addresses trusted by us, or even add an address trusted by yourself, you can do it in the "System" tab on the side menu, within the ',(0,s.kt)("a",{parentName:"p",href:"http://my.dappnode/system/advanced"},'"Advanced" module'),', in the "Release trusted keys" section.'),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"Release trusted keys table",src:a(695).Z,width:"1713",height:"583"})),(0,s.kt)("p",null,"This feature could be particularly useful when users intend to install Dappnode packages sourced from alternative providers or even when developing their own packages. Nevertheless, it is strongly advised to have caution when modifying trusted keys and to only incorporate new addresses after thorough verification of their credibility."),(0,s.kt)("h2",{id:"bypass-trusted-signature"},"Bypass trusted signature"),(0,s.kt)("p",null,"If a user attempts to install a package whose signature fails to match any of the trusted keys listed in the system, installation will be automatically blocked. However, is it possible to bypass this safeguard by toggling the trusted signature switch during the installation process. This one is only displayed if advanced options dropdown menu is active before the installation."),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"Trusted signature switch",src:a(696).Z,width:"632",height:"95"})))}l.isMDXComponent=!0},695:(e,t,a)=>{a.d(t,{Z:()=>r});const r=a.p+"assets/images/release-trusted-keys-b7f251d78c925c3b5c2692777afbd842.png"},696:(e,t,a)=>{a.d(t,{Z:()=>r});const r=a.p+"assets/images/signed-safe-switch-e6d549eb68086ef3684269e4c7692474.png"}}]); \ No newline at end of file diff --git a/assets/js/925b3f96.2541a15e.js b/assets/js/925b3f96.2541a15e.js deleted file mode 100644 index 564d268dc..000000000 --- a/assets/js/925b3f96.2541a15e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9003],{4137:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t =0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var u=o.createContext({}),l=function(e){var t=o.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=l(e.components);return o.createElement(u.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},g=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,u=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=l(r),g=n,f=p["".concat(u,".").concat(g)]||p[g]||m[g]||a;return r?o.createElement(f,i(i({ref:t},c),{},{components:r})):o.createElement(f,i({ref:t},c))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=g;var s={};for(var u in t)hasOwnProperty.call(t,u)&&(s[u]=t[u]);s.originalType=e,s[p]="string"==typeof e?e:n,i[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var o=r(7462),n=(r(7294),r(4137));const a={slug:"first-blog-post",title:"First Blog Post",authors:{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",image_url:"https://github.com/wgao19.png"},tags:["hola","docusaurus"]},i=void 0,s={permalink:"/blog/first-blog-post",source:"@site/blog/2019-05-28-first-blog-post.md",title:"First Blog Post",description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet",date:"2019-05-28T00:00:00.000Z",formattedDate:"May 28, 2019",tags:[{label:"hola",permalink:"/blog/tags/hola"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.12,hasTruncateMarker:!1,authors:[{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",image_url:"https://github.com/wgao19.png",imageURL:"https://github.com/wgao19.png"}],frontMatter:{slug:"first-blog-post",title:"First Blog Post",authors:{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",image_url:"https://github.com/wgao19.png",imageURL:"https://github.com/wgao19.png"},tags:["hola","docusaurus"]},prevItem:{title:"Long Blog Post",permalink:"/blog/long-blog-post"}},u={authorsImageUrls:[void 0]},l=[],c={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,n.kt)(p,(0,o.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/925b3f96.b9118c97.js b/assets/js/925b3f96.b9118c97.js new file mode 100644 index 000000000..6713d7b56 --- /dev/null +++ b/assets/js/925b3f96.b9118c97.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9003],{3902:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>n,contentTitle:()=>r,default:()=>m,frontMatter:()=>i,metadata:()=>u,toc:()=>l});var s=o(5893),a=o(1151);const i={slug:"first-blog-post",title:"First Blog Post",authors:{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",image_url:"https://github.com/wgao19.png"},tags:["hola","docusaurus"]},r=void 0,u={permalink:"/blog/first-blog-post",source:"@site/blog/2019-05-28-first-blog-post.md",title:"First Blog Post",description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet",date:"2019-05-28T00:00:00.000Z",formattedDate:"May 28, 2019",tags:[{label:"hola",permalink:"/blog/tags/hola"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.12,hasTruncateMarker:!1,authors:[{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",image_url:"https://github.com/wgao19.png",imageURL:"https://github.com/wgao19.png"}],frontMatter:{slug:"first-blog-post",title:"First Blog Post",authors:{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",image_url:"https://github.com/wgao19.png",imageURL:"https://github.com/wgao19.png"},tags:["hola","docusaurus"]},unlisted:!1,prevItem:{title:"Long Blog Post",permalink:"/blog/long-blog-post"}},n={authorsImageUrls:[void 0]},l=[];function c(t){const e={p:"p",...(0,a.a)(),...t.components};return(0,s.jsx)(e.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"})}function m(t={}){const{wrapper:e}={...(0,a.a)(),...t.components};return e?(0,s.jsx)(e,{...t,children:(0,s.jsx)(c,{...t})}):c(t)}},1151:(t,e,o)=>{o.d(e,{Z:()=>u,a:()=>r});var s=o(7294);const a={},i=s.createContext(a);function r(t){const e=s.useContext(i);return s.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function u(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(a):t.components||a:r(t.components),s.createElement(i.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.d167092e.js b/assets/js/935f2afb.d167092e.js deleted file mode 100644 index fc14b588f..000000000 --- a/assets/js/935f2afb.d167092e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_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":{"userSidebar":[{"type":"category","label":"Getting started","items":[{"type":"link","label":"Choose your path","href":"/docs/user/getting-started/choose-your-path","docId":"user/getting-started/choose-your-path"},{"type":"link","label":"Connect your Dappnode to the router","href":"/docs/user/getting-started/connect-dappnode-to-the-router","docId":"user/getting-started/connect-dappnode-to-the-router"},{"type":"link","label":"Access your Dappnode via WiFi","href":"/docs/user/getting-started/access-dappnode-via-wifi","docId":"user/getting-started/access-dappnode-via-wifi"},{"type":"link","label":"Register","href":"/docs/user/getting-started/register","docId":"user/getting-started/register"},{"type":"link","label":"Setup","href":"/docs/user/getting-started/setup","docId":"user/getting-started/setup"},{"type":"link","label":"Next steps","href":"/docs/user/getting-started/next-steps","docId":"user/getting-started/next-steps"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Access your dappnode","items":[{"type":"link","label":"Overview","href":"/docs/user/access-your-dappnode/overview","docId":"user/access-your-dappnode/overview"},{"type":"link","label":"Wi-Fi","href":"/docs/user/access-your-dappnode/wifi","docId":"user/access-your-dappnode/wifi"},{"type":"category","label":"VPN","items":[{"type":"link","label":"Overview","href":"/docs/user/access-your-dappnode/vpn/overview","docId":"user/access-your-dappnode/vpn/overview"},{"type":"link","label":"Wireguard","href":"/docs/user/access-your-dappnode/vpn/wireguard","docId":"user/access-your-dappnode/vpn/wireguard"},{"type":"link","label":"OpenVPN","href":"/docs/user/access-your-dappnode/vpn/openvpn","docId":"user/access-your-dappnode/vpn/openvpn"}],"collapsed":true,"collapsible":true},{"type":"link","label":"Terminal (Advanced)","href":"/docs/user/access-your-dappnode/terminal","docId":"user/access-your-dappnode/terminal"},{"type":"link","label":"Local Proxy (Recovery)","href":"/docs/user/access-your-dappnode/local","docId":"user/access-your-dappnode/local"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Hardware","items":[{"type":"link","label":"Overview","href":"/docs/user/hardware/overview","docId":"user/hardware/overview"},{"type":"link","label":"Maintenance","href":"/docs/user/hardware/maintenance","docId":"user/hardware/maintenance"},{"type":"link","label":"Temperature","href":"/docs/user/hardware/temperature","docId":"user/hardware/temperature"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Staking","items":[{"type":"link","label":"Earn with Staking","href":"/docs/user/staking/overview","docId":"user/staking/overview"},{"type":"category","label":"Ethereum","items":[{"type":"category","label":"Solo Staking","items":[{"type":"link","label":"Mainnet","href":"/docs/user/staking/ethereum/solo/mainnet","docId":"user/staking/ethereum/solo/mainnet"},{"type":"link","label":"Testnet","href":"/docs/user/staking/ethereum/solo/holesky","docId":"user/staking/ethereum/solo/holesky"}],"collapsed":true,"collapsible":true},{"type":"category","label":"LSD Pools","items":[{"type":"link","label":"Rocketpool","href":"/docs/user/staking/ethereum/lsd-pools/rocketpool","docId":"user/staking/ethereum/lsd-pools/rocketpool"},{"type":"link","label":"Stakewise","href":"/docs/user/staking/ethereum/lsd-pools/stakewise","docId":"user/staking/ethereum/lsd-pools/stakewise"},{"type":"link","label":"Stakehouse","href":"/docs/user/staking/ethereum/lsd-pools/stakehouse","docId":"user/staking/ethereum/lsd-pools/stakehouse"}],"collapsed":true,"collapsible":true},{"type":"category","label":"DVT Technologies","items":[{"type":"link","label":"Obol","href":"/docs/user/staking/ethereum/dvt-technologies/obol-network","docId":"user/staking/ethereum/dvt-technologies/obol-network"},{"type":"link","label":"SSV","href":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","docId":"user/staking/ethereum/dvt-technologies/ssv-network"},{"type":"link","label":"Diva","href":"/docs/user/staking/ethereum/dvt-technologies/diva","docId":"user/staking/ethereum/dvt-technologies/diva"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Gnosis Chain","items":[{"type":"link","label":"Gnosis Solo Staking","href":"/docs/user/staking/gnosis-chain/solo","docId":"user/staking/gnosis-chain/solo"}],"collapsed":true,"collapsible":true},{"type":"category","label":"LUKSO","items":[{"type":"link","label":"LUKSO Solo Staking","href":"/docs/user/staking/lukso/solo","docId":"user/staking/lukso/solo"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Rollups","items":[{"type":"link","label":"Overview","href":"/docs/user/rollups/overview","docId":"user/rollups/overview"},{"type":"link","label":"Optimism","href":"/docs/user/rollups/optimism","docId":"user/rollups/optimism"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Packages","items":[{"type":"link","label":"Understanding Dappnode Packages","href":"/docs/user/packages/understanding-dappnode-packages","docId":"user/packages/understanding-dappnode-packages"},{"type":"link","label":"Packages\' signature","href":"/docs/user/packages/signature","docId":"user/packages/signature"},{"type":"link","label":"DMS","href":"/docs/user/packages/dms","docId":"user/packages/dms"},{"type":"link","label":"Bitcoin","href":"/docs/user/packages/bitcoin","docId":"user/packages/bitcoin"},{"type":"link","label":"Eth Classic","href":"/docs/user/packages/ethclassic","docId":"user/packages/ethclassic"},{"type":"link","label":"Avalanche","href":"/docs/user/packages/avalanche","docId":"user/packages/avalanche"},{"type":"link","label":"Monero","href":"/docs/user/packages/monero","docId":"user/packages/monero"},{"type":"link","label":"Swarm","href":"/docs/user/packages/swarm","docId":"user/packages/swarm"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Repository","items":[{"type":"link","label":"Ethereum","href":"/docs/user/repository/ethereum","docId":"user/repository/ethereum"},{"type":"link","label":"IPFS","href":"/docs/user/repository/ipfs","docId":"user/repository/ipfs"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Install","items":[{"type":"link","label":"Overview","href":"/docs/user/install/overview","docId":"user/install/overview"},{"type":"link","label":"ISO","href":"/docs/user/install/iso","docId":"user/install/iso"},{"type":"link","label":"Script","href":"/docs/user/install/script","docId":"user/install/script"},{"type":"link","label":"ARM","href":"/docs/user/install/arm","docId":"user/install/arm"},{"type":"link","label":"Dappnode commands","href":"/docs/user/install/dappnode-commands","docId":"user/install/dappnode-commands"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Ethical metrics","items":[{"type":"link","label":"Overview","href":"/docs/user/ethical-metrics/overview","docId":"user/ethical-metrics/overview"},{"type":"link","label":"Setting up Notifications","href":"/docs/user/ethical-metrics/setup","docId":"user/ethical-metrics/setup"},{"type":"link","label":"Metrics collected","href":"/docs/user/ethical-metrics/metrics","docId":"user/ethical-metrics/metrics"},{"type":"link","label":"Troubleshooting","href":"/docs/user/ethical-metrics/troubleshooting","docId":"user/ethical-metrics/troubleshooting"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Dappnode Cloud","items":[{"type":"link","label":"Overview","href":"/docs/user/dappnode-cloud/overview","docId":"user/dappnode-cloud/overview"},{"type":"category","label":"Cloud Providers","items":[{"type":"category","label":"AWS","items":[{"type":"link","label":"AWS Overview","href":"/docs/user/dappnode-cloud/providers/aws/overview","docId":"user/dappnode-cloud/providers/aws/overview"},{"type":"link","label":"How to set up an Instance","href":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","docId":"user/dappnode-cloud/providers/aws/set-up-instance"},{"type":"link","label":"FAQs & Troubleshooting","href":"/docs/user/dappnode-cloud/providers/aws/faqs","docId":"user/dappnode-cloud/providers/aws/faqs"}],"collapsed":true,"collapsible":true},{"type":"link","label":"More coming soon","href":"/docs/user/dappnode-cloud/providers/coming-soon","docId":"user/dappnode-cloud/providers/coming-soon"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Videos and tutorials","items":[{"type":"category","label":"Driving School","items":[{"type":"link","label":"Initial setup","href":"/docs/user/videos-and-tutorials/driving-school/initial-setup","docId":"user/videos-and-tutorials/driving-school/initial-setup"},{"type":"link","label":"Configuration","href":"/docs/user/videos-and-tutorials/driving-school/configuration","docId":"user/videos-and-tutorials/driving-school/configuration"}],"collapsed":true,"collapsible":true},{"type":"link","label":"Crash Course","href":"/docs/user/videos-and-tutorials/crash-course","docId":"user/videos-and-tutorials/crash-course"},{"type":"category","label":"Guides","items":[{"type":"link","label":"How to connect a wallet to my node","href":"/docs/user/videos-and-tutorials/guides/connect-node","docId":"user/videos-and-tutorials/guides/connect-node"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"link","label":"FAQs","href":"/docs/user/faqs","docId":"user/faqs"}],"devSidebar":[{"type":"link","label":"Introduction","href":"/docs/dev","docId":"dev"},{"type":"category","label":"DappnodeSDK","items":[{"type":"link","label":"Overview","href":"/docs/dev/sdk/overview","docId":"dev/sdk/overview"},{"type":"link","label":"Commands","href":"/docs/dev/sdk/commands","docId":"dev/sdk/commands"}],"collapsed":true,"collapsible":true},{"type":"category","label":"File references","items":[{"type":"link","label":"Docker Compose","href":"/docs/dev/references/docker-compose","docId":"dev/references/docker-compose"},{"type":"link","label":"Dappnode Manifest","href":"/docs/dev/references/manifest","docId":"dev/references/manifest"},{"type":"link","label":"Setup Wizard","href":"/docs/dev/references/setup-wizard","docId":"dev/references/setup-wizard"}],"collapsed":true,"collapsible":true},{"type":"link","label":"Github Actions","href":"/docs/dev/github-actions","docId":"dev/github-actions"}],"smoothSidebar":[{"type":"link","label":"Smooth","href":"/docs/smooth","docId":"smooth"},{"type":"category","label":"Deep dive into Smooth","items":[{"type":"link","label":"Overview","href":"/docs/smooth/deep-dive-into-smooth/overview","docId":"smooth/deep-dive-into-smooth/overview"},{"type":"link","label":"Rewards","href":"/docs/smooth/deep-dive-into-smooth/rewards","docId":"smooth/deep-dive-into-smooth/rewards"},{"type":"link","label":"Validator States","href":"/docs/smooth/deep-dive-into-smooth/states","docId":"smooth/deep-dive-into-smooth/states"},{"type":"link","label":"Oracle & Smart Contract","href":"/docs/smooth/deep-dive-into-smooth/oracle-sm","docId":"smooth/deep-dive-into-smooth/oracle-sm"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Subscribe to Smooth!","items":[{"type":"link","label":"Overview","href":"/docs/smooth/subscribe-to-smooth/overview","docId":"smooth/subscribe-to-smooth/overview"},{"type":"link","label":"Automatic subscription","href":"/docs/smooth/subscribe-to-smooth/automatic","docId":"smooth/subscribe-to-smooth/automatic"},{"type":"link","label":"Manual subscription","href":"/docs/smooth/subscribe-to-smooth/manual","docId":"smooth/subscribe-to-smooth/manual"}],"collapsed":true,"collapsible":true},{"type":"link","label":"Unsubscribe from Smooth","href":"/docs/smooth/unsubscribe-from-smooth","docId":"smooth/unsubscribe-from-smooth"},{"type":"link","label":"FAQ / Glossary","href":"/docs/smooth/faq-glossary","docId":"smooth/faq-glossary"}],"daoSidebar":[{"type":"link","label":"DAO","href":"/docs/dao","docId":"dao"},{"type":"link","label":"The NODE Economy","href":"/docs/dao/node-basics","docId":"dao/node-basics"},{"type":"link","label":"Liquidity Mining","href":"/docs/dao/liquidity-mining","docId":"dao/liquidity-mining"},{"type":"link","label":"Dappnode DAO FAQ","href":"/docs/dao/faq","docId":"dao/faq"}]},"docs":{"dao":{"id":"dao","title":"DAO","description":"DAO information","sidebar":"daoSidebar"},"dao/faq":{"id":"dao/faq","title":"Dappnode DAO FAQ","description":"What is a DAO?","sidebar":"daoSidebar"},"dao/liquidity-mining":{"id":"dao/liquidity-mining","title":"Liquidity Mining","description":"Liquidity Mining (LM) launched on Jul 17 2021, 2000 GMT. 5.5% of the total token supply, 5.5 Million NODE, has been allocated to the first LM round of 6 months. NODE reward distribution for the 4 pools available is as follows:","sidebar":"daoSidebar"},"dao/node-basics":{"id":"dao/node-basics","title":"The NODE Economy","description":"NODE Basics","sidebar":"daoSidebar"},"dao/node-drop":{"id":"dao/node-drop","title":"NODEdrop","description":"\\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\""},"dao/node-stream":{"id":"dao/node-stream","title":"NODEstream","description":"\\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\""},"dev":{"id":"dev","title":"Welcome to the Developer Documentation!","description":"Welcome to the Dappnode\'s developer docs! This documentation is your comprehensive guide to using the tools and resources that enable you to create, deploy, and manage your own custom dappnode packages (DNP). Whether you\'re new to the project or an experienced developer, this documentation will help you navigate the intricacies of developing in the dappnode environment.","sidebar":"devSidebar"},"dev/github-actions":{"id":"dev/github-actions","title":"GitHub Actions for Dappnode Packages","description":"GitHub Actions help automate workflows around your projects on GitHub. For Dappnode packages, we utilize specific GitHub Actions to manage updates and releases.","sidebar":"devSidebar"},"dev/references/docker-compose":{"id":"dev/references/docker-compose","title":"Docker compose file","description":"Dappnode packages are built upon Docker containers. The heart of defining how these containers run and interact lies in the docker-compose.yml file. In this guide, we will explain the typical structure of the docker-compose.yml file for a Dappnode package.","sidebar":"devSidebar"},"dev/references/manifest":{"id":"dev/references/manifest","title":"Dappnode Package (DNP) manifest","description":"The Dappnode Package manifest defines all the necessary information for a Dappnode to understand this package:","sidebar":"devSidebar"},"dev/references/setup-wizard":{"id":"dev/references/setup-wizard","title":"Wizard Reference","description":"The setup wizard for Dappnode packages helps automate the package customization and improve its user experience. You can allow users to conveniently edit environment variables, port mappings, and upload files while interacting with a simple web form, right before installing the package.","sidebar":"devSidebar"},"dev/sdk/commands":{"id":"dev/sdk/commands","title":"Main commands","description":"This page covers the top three functionalities of DappnodeSDK: init, build, and publish. Each command plays a crucial role in the development and deployment process of dappnode packages (DNPs).","sidebar":"devSidebar"},"dev/sdk/overview":{"id":"dev/sdk/overview","title":"DappnodeSDK","description":"The DappnodeSDK dappnodesdk is a tool that makes creating and publishing new Dappnode packages as simple as possible. It helps to initialize, build, test, and publish the new package/repo to an APM tracked on the Ethereum Mainnet.","sidebar":"devSidebar"},"smooth":{"id":"smooth","title":"Smooth","description":"Smooth introduction","sidebar":"smoothSidebar"},"smooth/deep-dive-into-smooth/oracle-sm":{"id":"smooth/deep-dive-into-smooth/oracle-sm","title":"Smooth\'s architecture","description":"Smooth is composed of two main components: the Oracle and the Smart Contract. These two components work together to track validators and distribute rewards fairly. Both are open source and indispensable to the functioning of Smooth. While the Smart Contract serves to track all the events related to the pool onchain (subscriptions, unsubscriptions, block proposals, etc.), the Oracle is responsible of computing the rewards of each validator.","sidebar":"smoothSidebar"},"smooth/deep-dive-into-smooth/overview":{"id":"smooth/deep-dive-into-smooth/overview","title":"Deep Dive into Smooth!","description":"In this section, you will find an in-depth explanation on how Smooth works. This includes its different components, all states possible of a subscribed validator, and much more!","sidebar":"smoothSidebar"},"smooth/deep-dive-into-smooth/rewards":{"id":"smooth/deep-dive-into-smooth/rewards","title":"Rewards","description":"Receiving and distributing rewards is one of the core functionalities of Smooth. In this section we will explain how rewards are handled by Smooth and how they are distributed to validators, as well as how users can claim their rewards.","sidebar":"smoothSidebar"},"smooth/deep-dive-into-smooth/states":{"id":"smooth/deep-dive-into-smooth/states","title":"Smooth Validator States","description":"A Smooth validator can be in multiple states depending on its behavior. In this section we will explain all possible states a validator can have, the consequences of being each state, and how a validator can transition from one state to another.","sidebar":"smoothSidebar"},"smooth/faq-glossary":{"id":"smooth/faq-glossary","title":"FAQ & Glossary","description":"FAQ","sidebar":"smoothSidebar"},"smooth/subscribe-to-smooth/automatic":{"id":"smooth/subscribe-to-smooth/automatic","title":"Automatic Subscription","description":"This is the simplest way to subscribe to Smooth. It consists of changing the fee recipient of your validator to Smooth\'s address and subscribing automatically when proposing your next block.","sidebar":"smoothSidebar"},"smooth/subscribe-to-smooth/manual":{"id":"smooth/subscribe-to-smooth/manual","title":"Manual Subscription","description":"Would you rather not wait until your next proposed block to subscribe and begin earning rewards? You can take a proactive step and opt for manual subscription right away. During this process, you\'ll change your validator\'s fee recipient to Smooth\'s address, just like in the automatic subscription. However, instead of waiting for your next proposed block, you\'ll immediately start accumulating rewards from Smooth.","sidebar":"smoothSidebar"},"smooth/subscribe-to-smooth/overview":{"id":"smooth/subscribe-to-smooth/overview","title":"Subscribing to Smooth","description":"Hello! In this section you will find all the information on how to subscribe your Validators to Smooth. Even though the process is simple, it is important to follow the steps carefully.","sidebar":"smoothSidebar"},"smooth/unsubscribe-from-smooth":{"id":"smooth/unsubscribe-from-smooth","title":"Unsubscribing from Smooth.","description":"Unsubscribing from Smooth is as simple as subscribing to it. You can unsubscribe from Smooth at any time, it is done through Smooth\'s website and it only takes one simple transaction.","sidebar":"smoothSidebar"},"user/access-your-dappnode/local":{"id":"user/access-your-dappnode/local","title":"Local Proxy Access to Dappnode","description":"The local proxy method provides a way to access your Dappnode from within the same local network without any previous configuration required. However, it\'s essential to understand that due to certain network incompatibilities, this method might not work for all users.","sidebar":"userSidebar"},"user/access-your-dappnode/overview":{"id":"user/access-your-dappnode/overview","title":"\ud83c\udf10 Access your Dappnode","description":"Dappnode is made to work on a dedicated computer, and its main control panel, the Dappmanager, is accessed from another device via my.dappnode , as it is meant to be installed over an operating system that does not include a graphical interface.","sidebar":"userSidebar"},"user/access-your-dappnode/terminal":{"id":"user/access-your-dappnode/terminal","title":"Terminal Access to Dappnode","description":"Accessing the terminal of your Dappnode, often referred to as the command-line interface (CLI), provides deep control and management capabilities. However, this method is considered advanced and requires familiarity with command line interactions. Incorrect or misguided commands can lead to unintended changes or potential system damage.","sidebar":"userSidebar"},"user/access-your-dappnode/vpn/openvpn":{"id":"user/access-your-dappnode/vpn/openvpn","title":"OpenVPN Access to Dappnode","description":"OpenVPN is a widely-accepted VPN protocol known for its reliability and high-security standards. Here\'s how you can set it up with Dappnode.","sidebar":"userSidebar"},"user/access-your-dappnode/vpn/overview":{"id":"user/access-your-dappnode/vpn/overview","title":"VPN Access to Dappnode","description":"Virtual Private Network (VPN) is a robust method for accessing your Dappnode. It ensures a secure and encrypted connection between your device and the Dappnode, allowing you to manage your Dappnode from virtually anywhere. Depending on your needs and preferences, Dappnode offers support for two primary VPN technologies: WireGuard and OpenVPN.","sidebar":"userSidebar"},"user/access-your-dappnode/vpn/wireguard":{"id":"user/access-your-dappnode/vpn/wireguard","title":"WireGuard Access to Dappnode","description":"WireGuard is a modern, high-performance VPN protocol that offers a simple and streamlined approach for securely accessing your Dappnode. This guide will walk you through setting up WireGuard with your Dappnode.","sidebar":"userSidebar"},"user/access-your-dappnode/wifi":{"id":"user/access-your-dappnode/wifi","title":"Wi-Fi Access to Dappnode","description":"If you bought a Dappnode from our store, or installed Dappnode on a computer with a built-in Wi-Fi chip, you can easily connect to the Dappmanager (Dappnode web UI) using the Dappnode\'s Wi-Fi hotspot.","sidebar":"userSidebar"},"user/dappnode-cloud/overview":{"id":"user/dappnode-cloud/overview","title":"What is Dappnode Cloud?","description":"Dappnode Cloud is a service that allows users to deploy a Dappnode in a cloud provider so it can be tested without the need for physical hardware. We provide easy pre-configured instances for the main cloud providers (AWS for now, more to come later) to continue to make the deployment of web3 infrastructrure accessible and hassle-free for everyone. It consists of a Dappnode image deployed on a machine instance from a cloud provider, eliminating the need to invest in hardware in order to test Dappnode.","sidebar":"userSidebar"},"user/dappnode-cloud/providers/aws/faqs":{"id":"user/dappnode-cloud/providers/aws/faqs","title":"FAQs & Troubleshooting","description":"Which machine should I choose?","sidebar":"userSidebar"},"user/dappnode-cloud/providers/aws/overview":{"id":"user/dappnode-cloud/providers/aws/overview","title":"AWS","description":"Amazon Web Services (AWS) is a cloud computing platform provided by Amazon. It offers a wide range of services, including computing power, storage options, and networking capabilities, enabling users to build and deploy applications and services efficiently.","sidebar":"userSidebar"},"user/dappnode-cloud/providers/aws/set-up-instance":{"id":"user/dappnode-cloud/providers/aws/set-up-instance","title":"How to Set Up an Instance","description":"To launch a Dappnode AMI instance, follow these steps:","sidebar":"userSidebar"},"user/dappnode-cloud/providers/coming-soon":{"id":"user/dappnode-cloud/providers/coming-soon","title":"More coming soon","description":"We are aiming to deploy Dappnode Images in more cloud providers in a nearly future.","sidebar":"userSidebar"},"user/ethical-metrics/metrics":{"id":"user/ethical-metrics/metrics","title":"Metrics Collected by Ethical Metrics","description":"Dappnode has absolutely no hidden telemetry and is completely private by design. We were reluctant of setting up a monitoring service because we did NOT want to collect any data from our users. Because of our community\'s continuous requests to offer alerts, we came up with a solution that doesn\'t compromise your privacy.","sidebar":"userSidebar"},"user/ethical-metrics/overview":{"id":"user/ethical-metrics/overview","title":"Ethical Metrics","description":"Ethical Metrics requires the Dappnode Monitoring Service (DMS) and Dappnode Exporter as dependencies.","sidebar":"userSidebar"},"user/ethical-metrics/setup":{"id":"user/ethical-metrics/setup","title":"Setting up Ethical Metrics","description":"We highly recommend utilizing the Telegram channel option in addition to or instead of relying solely on email notifications.","sidebar":"userSidebar"},"user/ethical-metrics/troubleshooting":{"id":"user/ethical-metrics/troubleshooting","title":"Troubleshooting","description":"Experiencing trouble when setting your notifications up? Check this FAQ. If your issue isn\'t listed, please pay us a visit in the Dappnode Discord and we\'ll be happy to assist you!","sidebar":"userSidebar"},"user/faqs":{"id":"user/faqs","title":"FAQs","description":"How can I start validating?","sidebar":"userSidebar"},"user/getting-started/access-dappnode-via-wifi":{"id":"user/getting-started/access-dappnode-via-wifi","title":"Access Dappnode via Wi-Fi","description":"After connecting your Dappnode to the router and power, and turning it on, it\'s time to connect to it.","sidebar":"userSidebar"},"user/getting-started/choose-your-path":{"id":"user/getting-started/choose-your-path","title":"Choose your path","description":"Regardless of how you wish to utilize Dappnode, taking the initiative to contribute to decentralization and earning rewards is commendable. Embark on your desired path and experience the full potential of Dappnode.","sidebar":"userSidebar"},"user/getting-started/connect-dappnode-to-the-router":{"id":"user/getting-started/connect-dappnode-to-the-router","title":"Connect your dappnode to the router and power","description":"Dappnode offers a seamless plug-and-play experience. For optimal performance and to ensure smooth operation, please connect your Dappnode to your router and enable UPnP settings within the router.","sidebar":"userSidebar"},"user/getting-started/next-steps":{"id":"user/getting-started/next-steps","title":"Next Steps","description":"Now that your DAppNode is set up and ready to go, it\'s time to explore further configurations and features to get the most out of your experience. Here are some of the most common next steps:","sidebar":"userSidebar"},"user/getting-started/register":{"id":"user/getting-started/register","title":"Register","description":"1. Register as New User","sidebar":"userSidebar"},"user/getting-started/setup":{"id":"user/getting-started/setup","title":"Setup","description":"Setting up Dappnode is a straightforward process. This guide will walk you through configuring your Dappnode for the first time.","sidebar":"userSidebar"},"user/hardware/maintenance":{"id":"user/hardware/maintenance","title":"Maintenance","description":"This section will cover four different approaches to servicing your hardware. The order is by level of difficulty from easiest to hardest. Remember that if you have any questions they\'re always welcome in our Discord server.","sidebar":"userSidebar"},"user/hardware/overview":{"id":"user/hardware/overview","title":"Hardware","description":"In this section you will find information related to the hardware of the Dappnode\'s host machine. If you had noticed any issue with it and have tried some steps provided by the Dappnode community and/or staff without success, this section of the Dappnode documentation will help you solving those that are on the hardware side of things.","sidebar":"userSidebar"},"user/hardware/temperature":{"id":"user/hardware/temperature","title":"Temperature","description":"Keeping a close eye to your Dappnode\'s temperature is part of the Node Runner\'s basic good practices. Dappnode provides you with metrics \ud83d\udcca in the main dashboard to do so.","sidebar":"userSidebar"},"user/install/arm":{"id":"user/install/arm","title":"Install - ARM","description":"Hardware Recommendations","sidebar":"userSidebar"},"user/install/dappnode-commands":{"id":"user/install/dappnode-commands","title":"Dappnode commands","description":"Dappnode comes with a set of commands that can be used to manage the system. These commands can be used directly from the command line.","sidebar":"userSidebar"},"user/install/iso":{"id":"user/install/iso","title":"ISO Installation","description":"When you want to perform a clean installation by installing the base operating system and Dappnode. Installing from an ISO will wipe the machine data and install Dappnode over Debian.","sidebar":"userSidebar"},"user/install/overview":{"id":"user/install/overview","title":"Installation Overview","description":"Specifications & Minimum Requirements","sidebar":"userSidebar"},"user/install/script":{"id":"user/install/script","title":"Script installation","description":"You can install Dappnode using the installation script. In this case, we recommend you use Ubuntu or Debian as your operating system.","sidebar":"userSidebar"},"user/packages/avalanche":{"id":"user/packages/avalanche","title":"Avalanche","description":"Avalanche: A Revolutionary Consensus Protocol","sidebar":"userSidebar"},"user/packages/bitcoin":{"id":"user/packages/bitcoin","title":"Bitcoin","description":"Exploring Bitcoin: The Pioneer of Cryptocurrency","sidebar":"userSidebar"},"user/packages/dms":{"id":"user/packages/dms","title":"Dappnode Monitoring Service (DMS)","description":"As a Dappnode user, there are times when having insights into the performance of your packages or your whole system can be incredibly beneficial. This means understanding the condition or \\"health\\" of your packages, the utilization of your computer resources such as CPU, RAM, and disk space, as well as monitoring network traffic flow. Yet, managing all of these aspects can become complex and tedious, even for those with experience. This is precisely where the Dappnode Monitoring Service (DMS) steps in to simplify matters.","sidebar":"userSidebar"},"user/packages/ethclassic":{"id":"user/packages/ethclassic","title":"Ethereum Classic","description":"Introducing Ethereum Classic: Preserving Blockchain Principles","sidebar":"userSidebar"},"user/packages/monero":{"id":"user/packages/monero","title":"Monero","description":"Introducing Monero: A Privacy-Centric Cryptocurrency","sidebar":"userSidebar"},"user/packages/signature":{"id":"user/packages/signature","title":"Packages\' Signature","description":"Dappnode\'s Packages Signatures","sidebar":"userSidebar"},"user/packages/swarm":{"id":"user/packages/swarm","title":"Guide to Installing Bee Node on Dappnode","description":"Introduction to Swarm","sidebar":"userSidebar"},"user/packages/understanding-dappnode-packages":{"id":"user/packages/understanding-dappnode-packages","title":"Understanding Dappnode Packages","description":"What are Dappnode packages and what features do they offer?","sidebar":"userSidebar"},"user/repository/ethereum":{"id":"user/repository/ethereum","title":"Ethereum repository","description":"Dappnode uses smart contracts to distribute the dappnode packages available in the Dappstore. The smart contracts are deployed in the Ethereum blockchain and the Dappnode client interacts with them to get the list of available packages and to download them. Your dappnode will need a connection to an Ethereum node in order to read the smart contracts and download the packages. There are two ways to establish this connection:","sidebar":"userSidebar"},"user/repository/ipfs":{"id":"user/repository/ipfs","title":"IPFS repository","description":"Dappnode leverages IPFS for distributing packages available in the Dappstore. To download these packages, your Dappnode requires a connection to an IPFS node. When it comes to connecting to the IPFS network, you have two primary choices:","sidebar":"userSidebar"},"user/rollups/optimism":{"id":"user/rollups/optimism","title":"Optimism Rollup","description":"Optimism is Ethereum\'s Layer 2 solution, leveraging Optimistic Rollups to enhance transaction speeds and lower costs. It conducts transactions off-chain, reconciling final states on the main Ethereum chain, all while preserving compatibility with Ethereum smart contracts.","sidebar":"userSidebar"},"user/rollups/overview":{"id":"user/rollups/overview","title":"Ethereum Rollups: An Overview","description":"Rollups are advanced layer-2 scaling solutions designed to increase the throughput of the Ethereum network. By executing and storing transaction data off the main Ethereum chain while keeping a cryptographic commitment on-chain, Rollups enhance scalability and reduce fees. Rollups can be broadly categorized into two types: Optimistic Rollups and zk-Rollups, each with its unique approach and trade-offs.","sidebar":"userSidebar"},"user/staking/ethereum/dvt-technologies/diva":{"id":"user/staking/ethereum/dvt-technologies/diva","title":"Diva package for Dappnode","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/dvt-technologies/obol-network":{"id":"user/staking/ethereum/dvt-technologies/obol-network","title":"Obol Distributed Validator package for Dappnode","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/dvt-technologies/ssv-network":{"id":"user/staking/ethereum/dvt-technologies/ssv-network","title":"SSV Distributed Validator package for Dappnode","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/lsd-pools/rocketpool":{"id":"user/staking/ethereum/lsd-pools/rocketpool","title":"Rocketpool","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/lsd-pools/stakehouse":{"id":"user/staking/ethereum/lsd-pools/stakehouse","title":"Stakehouse","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/lsd-pools/stakewise":{"id":"user/staking/ethereum/lsd-pools/stakewise","title":"StakeWise","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/solo/holesky":{"id":"user/staking/ethereum/solo/holesky","title":"Holesky Testnet","description":"The Holesky testnet is a testnet for the Ethereum ecosystem, serving as a sandbox for users and developers alike.","sidebar":"userSidebar"},"user/staking/ethereum/solo/mainnet":{"id":"user/staking/ethereum/solo/mainnet","title":"Ethereum mainnet","description":"Ethereum stands as a titan in the realm of smart contract platforms. Its monumental shift from Proof of Work (PoW) to Proof of Stake (PoS) has opened up opportunities for individuals to participate in Ethereum\'s block production by staking ETH.","sidebar":"userSidebar"},"user/staking/gnosis-chain/solo":{"id":"user/staking/gnosis-chain/solo","title":"Gnosis Chain","description":"Gnosis Chain stands as a sentinel, functioning as a canary chain for Ethereum. It\'s operated and nurtured by the GnosisDAO community. With over 10% of its validators being home stakers via Dappnode, it\'s a testament to its popularity and accessibility.","sidebar":"userSidebar"},"user/staking/lukso/solo":{"id":"user/staking/lukso/solo","title":"LUKSO","description":"LUKSO is the next-gen blockchain designed with creative industries in mind. Imagine a digital realm where the spirit of Ethereum meets the world of fashion, art, and design. That\'s LUKSO for you!","sidebar":"userSidebar"},"user/staking/overview":{"id":"user/staking/overview","title":"Earn with Staking in Dappnode","description":"Decentralize Proof-of-Stake chains and earn","sidebar":"userSidebar"},"user/videos-and-tutorials/crash-course":{"id":"user/videos-and-tutorials/crash-course","title":"Crash Course","description":"Want to learn more about Dappnode through video tutorials? Check out our Dappnode Driving School!","sidebar":"userSidebar"},"user/videos-and-tutorials/driving-school/configuration":{"id":"user/videos-and-tutorials/driving-school/configuration","title":"2. Configuring your Dappnode","description":"We recommend going through Initial Setup of Dappnode Driving School before watching these videos, as these videos expect you to have a basic understanding of how your Dappnode works and how to access it.","sidebar":"userSidebar"},"user/videos-and-tutorials/driving-school/initial-setup":{"id":"user/videos-and-tutorials/driving-school/initial-setup","title":"1. Initial Dappnode Setup","description":"Welcome to Dappnode Driving School! Here you\'ll find a series of videos that will guide you through the initial setup process. From booting Dappnode from ISO and accessing it through VPN, to setting up your Ethereum node, we\'ve got you covered.","sidebar":"userSidebar"},"user/videos-and-tutorials/guides/connect-node":{"id":"user/videos-and-tutorials/guides/connect-node","title":"How to Connect to My Blockchain Node","description":"When you\'ve set up your Dappnode, you might want to connect various applications to your blockchain node. This process can vary depending on which blockchain you\'ve selected. Below is a guide on how to do this:","sidebar":"userSidebar"},"user/videos-and-tutorials/overview":{"id":"user/videos-and-tutorials/overview","title":"Videos and Tutorials","description":"Welcome to the Videos and Tutorials section! Here, you\'ll find a curated list of videos and written tutorials designed to help you get the most out of Dappnode. Whether you\'re a beginner or an advanced user, there\'s something here for everyone."}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.faf505d0.js b/assets/js/935f2afb.faf505d0.js new file mode 100644 index 000000000..03c675197 --- /dev/null +++ b/assets/js/935f2afb.faf505d0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_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":{"userSidebar":[{"type":"category","label":"Getting started","items":[{"type":"link","label":"Choose your path","href":"/docs/user/getting-started/choose-your-path","docId":"user/getting-started/choose-your-path","unlisted":false},{"type":"link","label":"Connect your Dappnode to the router","href":"/docs/user/getting-started/connect-dappnode-to-the-router","docId":"user/getting-started/connect-dappnode-to-the-router","unlisted":false},{"type":"link","label":"Access your Dappnode via WiFi","href":"/docs/user/getting-started/access-dappnode-via-wifi","docId":"user/getting-started/access-dappnode-via-wifi","unlisted":false},{"type":"link","label":"Register","href":"/docs/user/getting-started/register","docId":"user/getting-started/register","unlisted":false},{"type":"link","label":"Setup","href":"/docs/user/getting-started/setup","docId":"user/getting-started/setup","unlisted":false},{"type":"link","label":"Next steps","href":"/docs/user/getting-started/next-steps","docId":"user/getting-started/next-steps","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Access your dappnode","items":[{"type":"link","label":"Overview","href":"/docs/user/access-your-dappnode/overview","docId":"user/access-your-dappnode/overview","unlisted":false},{"type":"link","label":"Wi-Fi","href":"/docs/user/access-your-dappnode/wifi","docId":"user/access-your-dappnode/wifi","unlisted":false},{"type":"category","label":"VPN","items":[{"type":"link","label":"Overview","href":"/docs/user/access-your-dappnode/vpn/overview","docId":"user/access-your-dappnode/vpn/overview","unlisted":false},{"type":"link","label":"Wireguard","href":"/docs/user/access-your-dappnode/vpn/wireguard","docId":"user/access-your-dappnode/vpn/wireguard","unlisted":false},{"type":"link","label":"OpenVPN","href":"/docs/user/access-your-dappnode/vpn/openvpn","docId":"user/access-your-dappnode/vpn/openvpn","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Terminal (Advanced)","href":"/docs/user/access-your-dappnode/terminal","docId":"user/access-your-dappnode/terminal","unlisted":false},{"type":"link","label":"Local Proxy (Recovery)","href":"/docs/user/access-your-dappnode/local","docId":"user/access-your-dappnode/local","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Hardware","items":[{"type":"link","label":"Overview","href":"/docs/user/hardware/overview","docId":"user/hardware/overview","unlisted":false},{"type":"link","label":"Maintenance","href":"/docs/user/hardware/maintenance","docId":"user/hardware/maintenance","unlisted":false},{"type":"link","label":"Temperature","href":"/docs/user/hardware/temperature","docId":"user/hardware/temperature","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Staking","items":[{"type":"link","label":"Earn with Staking","href":"/docs/user/staking/overview","docId":"user/staking/overview","unlisted":false},{"type":"category","label":"Ethereum","items":[{"type":"category","label":"Solo Staking","items":[{"type":"link","label":"Mainnet","href":"/docs/user/staking/ethereum/solo/mainnet","docId":"user/staking/ethereum/solo/mainnet","unlisted":false},{"type":"link","label":"Testnet","href":"/docs/user/staking/ethereum/solo/holesky","docId":"user/staking/ethereum/solo/holesky","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"LSD Pools","items":[{"type":"link","label":"Rocketpool","href":"/docs/user/staking/ethereum/lsd-pools/rocketpool","docId":"user/staking/ethereum/lsd-pools/rocketpool","unlisted":false},{"type":"link","label":"Stakewise","href":"/docs/user/staking/ethereum/lsd-pools/stakewise","docId":"user/staking/ethereum/lsd-pools/stakewise","unlisted":false},{"type":"link","label":"Stakehouse","href":"/docs/user/staking/ethereum/lsd-pools/stakehouse","docId":"user/staking/ethereum/lsd-pools/stakehouse","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"DVT Technologies","items":[{"type":"link","label":"Obol","href":"/docs/user/staking/ethereum/dvt-technologies/obol-network","docId":"user/staking/ethereum/dvt-technologies/obol-network","unlisted":false},{"type":"link","label":"SSV","href":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","docId":"user/staking/ethereum/dvt-technologies/ssv-network","unlisted":false},{"type":"link","label":"Diva","href":"/docs/user/staking/ethereum/dvt-technologies/diva","docId":"user/staking/ethereum/dvt-technologies/diva","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Gnosis Chain","items":[{"type":"link","label":"Gnosis Solo Staking","href":"/docs/user/staking/gnosis-chain/solo","docId":"user/staking/gnosis-chain/solo","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"LUKSO","items":[{"type":"link","label":"LUKSO Solo Staking","href":"/docs/user/staking/lukso/solo","docId":"user/staking/lukso/solo","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Rollups","items":[{"type":"link","label":"Overview","href":"/docs/user/rollups/overview","docId":"user/rollups/overview","unlisted":false},{"type":"link","label":"Optimism","href":"/docs/user/rollups/optimism","docId":"user/rollups/optimism","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Packages","items":[{"type":"link","label":"Understanding Dappnode Packages","href":"/docs/user/packages/understanding-dappnode-packages","docId":"user/packages/understanding-dappnode-packages","unlisted":false},{"type":"link","label":"Packages\' signature","href":"/docs/user/packages/signature","docId":"user/packages/signature","unlisted":false},{"type":"link","label":"DMS","href":"/docs/user/packages/dms","docId":"user/packages/dms","unlisted":false},{"type":"link","label":"Bitcoin","href":"/docs/user/packages/bitcoin","docId":"user/packages/bitcoin","unlisted":false},{"type":"link","label":"Eth Classic","href":"/docs/user/packages/ethclassic","docId":"user/packages/ethclassic","unlisted":false},{"type":"link","label":"Avalanche","href":"/docs/user/packages/avalanche","docId":"user/packages/avalanche","unlisted":false},{"type":"link","label":"Monero","href":"/docs/user/packages/monero","docId":"user/packages/monero","unlisted":false},{"type":"link","label":"Swarm","href":"/docs/user/packages/swarm","docId":"user/packages/swarm","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Repository","items":[{"type":"link","label":"Ethereum","href":"/docs/user/repository/ethereum","docId":"user/repository/ethereum","unlisted":false},{"type":"link","label":"IPFS","href":"/docs/user/repository/ipfs","docId":"user/repository/ipfs","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Install","items":[{"type":"link","label":"Overview","href":"/docs/user/install/overview","docId":"user/install/overview","unlisted":false},{"type":"link","label":"ISO","href":"/docs/user/install/iso","docId":"user/install/iso","unlisted":false},{"type":"link","label":"Script","href":"/docs/user/install/script","docId":"user/install/script","unlisted":false},{"type":"link","label":"ARM","href":"/docs/user/install/arm","docId":"user/install/arm","unlisted":false},{"type":"link","label":"Dappnode commands","href":"/docs/user/install/dappnode-commands","docId":"user/install/dappnode-commands","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Ethical metrics","items":[{"type":"link","label":"Overview","href":"/docs/user/ethical-metrics/overview","docId":"user/ethical-metrics/overview","unlisted":false},{"type":"link","label":"Setting up Notifications","href":"/docs/user/ethical-metrics/setup","docId":"user/ethical-metrics/setup","unlisted":false},{"type":"link","label":"Metrics collected","href":"/docs/user/ethical-metrics/metrics","docId":"user/ethical-metrics/metrics","unlisted":false},{"type":"link","label":"Troubleshooting","href":"/docs/user/ethical-metrics/troubleshooting","docId":"user/ethical-metrics/troubleshooting","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Dappnode Cloud","items":[{"type":"link","label":"Overview","href":"/docs/user/dappnode-cloud/overview","docId":"user/dappnode-cloud/overview","unlisted":false},{"type":"category","label":"Cloud Providers","items":[{"type":"category","label":"AWS","items":[{"type":"link","label":"AWS Overview","href":"/docs/user/dappnode-cloud/providers/aws/overview","docId":"user/dappnode-cloud/providers/aws/overview","unlisted":false},{"type":"link","label":"How to set up an Instance","href":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","docId":"user/dappnode-cloud/providers/aws/set-up-instance","unlisted":false},{"type":"link","label":"FAQs & Troubleshooting","href":"/docs/user/dappnode-cloud/providers/aws/faqs","docId":"user/dappnode-cloud/providers/aws/faqs","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"More coming soon","href":"/docs/user/dappnode-cloud/providers/coming-soon","docId":"user/dappnode-cloud/providers/coming-soon","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Videos and tutorials","items":[{"type":"category","label":"Driving School","items":[{"type":"link","label":"Initial setup","href":"/docs/user/videos-and-tutorials/driving-school/initial-setup","docId":"user/videos-and-tutorials/driving-school/initial-setup","unlisted":false},{"type":"link","label":"Configuration","href":"/docs/user/videos-and-tutorials/driving-school/configuration","docId":"user/videos-and-tutorials/driving-school/configuration","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Crash Course","href":"/docs/user/videos-and-tutorials/crash-course","docId":"user/videos-and-tutorials/crash-course","unlisted":false},{"type":"category","label":"Guides","items":[{"type":"link","label":"How to connect a wallet to my node","href":"/docs/user/videos-and-tutorials/guides/connect-node","docId":"user/videos-and-tutorials/guides/connect-node","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"link","label":"FAQs","href":"/docs/user/faqs","docId":"user/faqs","unlisted":false}],"devSidebar":[{"type":"link","label":"Introduction","href":"/docs/dev","docId":"dev","unlisted":false},{"type":"category","label":"DappnodeSDK","items":[{"type":"link","label":"Overview","href":"/docs/dev/sdk/overview","docId":"dev/sdk/overview","unlisted":false},{"type":"link","label":"Commands","href":"/docs/dev/sdk/commands","docId":"dev/sdk/commands","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"File references","items":[{"type":"link","label":"Docker Compose","href":"/docs/dev/references/docker-compose","docId":"dev/references/docker-compose","unlisted":false},{"type":"link","label":"Dappnode Manifest","href":"/docs/dev/references/manifest","docId":"dev/references/manifest","unlisted":false},{"type":"link","label":"Setup Wizard","href":"/docs/dev/references/setup-wizard","docId":"dev/references/setup-wizard","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Github Actions","href":"/docs/dev/github-actions","docId":"dev/github-actions","unlisted":false}],"smoothSidebar":[{"type":"link","label":"Smooth","href":"/docs/smooth","docId":"smooth","unlisted":false},{"type":"category","label":"Deep dive into Smooth","items":[{"type":"link","label":"Overview","href":"/docs/smooth/deep-dive-into-smooth/overview","docId":"smooth/deep-dive-into-smooth/overview","unlisted":false},{"type":"link","label":"Rewards","href":"/docs/smooth/deep-dive-into-smooth/rewards","docId":"smooth/deep-dive-into-smooth/rewards","unlisted":false},{"type":"link","label":"Validator States","href":"/docs/smooth/deep-dive-into-smooth/states","docId":"smooth/deep-dive-into-smooth/states","unlisted":false},{"type":"link","label":"Oracle & Smart Contract","href":"/docs/smooth/deep-dive-into-smooth/oracle-sm","docId":"smooth/deep-dive-into-smooth/oracle-sm","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Subscribe to Smooth!","items":[{"type":"link","label":"Overview","href":"/docs/smooth/subscribe-to-smooth/overview","docId":"smooth/subscribe-to-smooth/overview","unlisted":false},{"type":"link","label":"Automatic subscription","href":"/docs/smooth/subscribe-to-smooth/automatic","docId":"smooth/subscribe-to-smooth/automatic","unlisted":false},{"type":"link","label":"Manual subscription","href":"/docs/smooth/subscribe-to-smooth/manual","docId":"smooth/subscribe-to-smooth/manual","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Unsubscribe from Smooth","href":"/docs/smooth/unsubscribe-from-smooth","docId":"smooth/unsubscribe-from-smooth","unlisted":false},{"type":"link","label":"FAQ / Glossary","href":"/docs/smooth/faq-glossary","docId":"smooth/faq-glossary","unlisted":false}],"daoSidebar":[{"type":"link","label":"DAO","href":"/docs/dao","docId":"dao","unlisted":false},{"type":"link","label":"The NODE Economy","href":"/docs/dao/node-basics","docId":"dao/node-basics","unlisted":false},{"type":"link","label":"Liquidity Mining","href":"/docs/dao/liquidity-mining","docId":"dao/liquidity-mining","unlisted":false},{"type":"link","label":"Dappnode DAO FAQ","href":"/docs/dao/faq","docId":"dao/faq","unlisted":false}]},"docs":{"dao":{"id":"dao","title":"DAO","description":"DAO information","sidebar":"daoSidebar"},"dao/faq":{"id":"dao/faq","title":"Dappnode DAO FAQ","description":"What is a DAO?","sidebar":"daoSidebar"},"dao/liquidity-mining":{"id":"dao/liquidity-mining","title":"Liquidity Mining","description":"Liquidity Mining (LM) launched on Jul 17 2021, 2000 GMT. 5.5% of the total token supply, 5.5 Million NODE, has been allocated to the first LM round of 6 months. NODE reward distribution for the 4 pools available is as follows:","sidebar":"daoSidebar"},"dao/node-basics":{"id":"dao/node-basics","title":"The NODE Economy","description":"NODE Basics","sidebar":"daoSidebar"},"dao/node-drop":{"id":"dao/node-drop","title":"NODEdrop","description":"\\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\""},"dao/node-stream":{"id":"dao/node-stream","title":"NODEstream","description":"\\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\""},"dev":{"id":"dev","title":"Welcome to the Developer Documentation!","description":"Welcome to the Dappnode\'s developer docs! This documentation is your comprehensive guide to using the tools and resources that enable you to create, deploy, and manage your own custom dappnode packages (DNP). Whether you\'re new to the project or an experienced developer, this documentation will help you navigate the intricacies of developing in the dappnode environment.","sidebar":"devSidebar"},"dev/github-actions":{"id":"dev/github-actions","title":"GitHub Actions for Dappnode Packages","description":"GitHub Actions help automate workflows around your projects on GitHub. For Dappnode packages, we utilize specific GitHub Actions to manage updates and releases.","sidebar":"devSidebar"},"dev/references/docker-compose":{"id":"dev/references/docker-compose","title":"Docker compose file","description":"Dappnode packages are built upon Docker containers. The heart of defining how these containers run and interact lies in the docker-compose.yml file. In this guide, we will explain the typical structure of the docker-compose.yml file for a Dappnode package.","sidebar":"devSidebar"},"dev/references/manifest":{"id":"dev/references/manifest","title":"Dappnode Package (DNP) manifest","description":"The Dappnode Package manifest defines all the necessary information for a Dappnode to understand this package:","sidebar":"devSidebar"},"dev/references/setup-wizard":{"id":"dev/references/setup-wizard","title":"Wizard Reference","description":"The setup wizard for Dappnode packages helps automate the package customization and improve its user experience. You can allow users to conveniently edit environment variables, port mappings, and upload files while interacting with a simple web form, right before installing the package.","sidebar":"devSidebar"},"dev/sdk/commands":{"id":"dev/sdk/commands","title":"Main commands","description":"This page covers the top three functionalities of DappnodeSDK: init, build, and publish. Each command plays a crucial role in the development and deployment process of dappnode packages (DNPs).","sidebar":"devSidebar"},"dev/sdk/overview":{"id":"dev/sdk/overview","title":"DappnodeSDK","description":"The DappnodeSDK dappnodesdk is a tool that makes creating and publishing new Dappnode packages as simple as possible. It helps to initialize, build, test, and publish the new package/repo to an APM tracked on the Ethereum Mainnet.","sidebar":"devSidebar"},"smooth":{"id":"smooth","title":"Smooth","description":"Smooth introduction","sidebar":"smoothSidebar"},"smooth/deep-dive-into-smooth/oracle-sm":{"id":"smooth/deep-dive-into-smooth/oracle-sm","title":"Smooth\'s architecture","description":"Smooth is composed of two main components: the Oracle and the Smart Contract. These two components work together to track validators and distribute rewards fairly. Both are open source and indispensable to the functioning of Smooth. While the Smart Contract serves to track all the events related to the pool onchain (subscriptions, unsubscriptions, block proposals, etc.), the Oracle is responsible of computing the rewards of each validator.","sidebar":"smoothSidebar"},"smooth/deep-dive-into-smooth/overview":{"id":"smooth/deep-dive-into-smooth/overview","title":"Deep Dive into Smooth!","description":"In this section, you will find an in-depth explanation on how Smooth works. This includes its different components, all states possible of a subscribed validator, and much more!","sidebar":"smoothSidebar"},"smooth/deep-dive-into-smooth/rewards":{"id":"smooth/deep-dive-into-smooth/rewards","title":"Rewards","description":"Receiving and distributing rewards is one of the core functionalities of Smooth. In this section we will explain how rewards are handled by Smooth and how they are distributed to validators, as well as how users can claim their rewards.","sidebar":"smoothSidebar"},"smooth/deep-dive-into-smooth/states":{"id":"smooth/deep-dive-into-smooth/states","title":"Smooth Validator States","description":"A Smooth validator can be in multiple states depending on its behavior. In this section we will explain all possible states a validator can have, the consequences of being each state, and how a validator can transition from one state to another.","sidebar":"smoothSidebar"},"smooth/faq-glossary":{"id":"smooth/faq-glossary","title":"FAQ & Glossary","description":"FAQ","sidebar":"smoothSidebar"},"smooth/subscribe-to-smooth/automatic":{"id":"smooth/subscribe-to-smooth/automatic","title":"Automatic Subscription","description":"This is the simplest way to subscribe to Smooth. It consists of changing the fee recipient of your validator to Smooth\'s address and subscribing automatically when proposing your next block.","sidebar":"smoothSidebar"},"smooth/subscribe-to-smooth/manual":{"id":"smooth/subscribe-to-smooth/manual","title":"Manual Subscription","description":"Would you rather not wait until your next proposed block to subscribe and begin earning rewards? You can take a proactive step and opt for manual subscription right away. During this process, you\'ll change your validator\'s fee recipient to Smooth\'s address, just like in the automatic subscription. However, instead of waiting for your next proposed block, you\'ll immediately start accumulating rewards from Smooth.","sidebar":"smoothSidebar"},"smooth/subscribe-to-smooth/overview":{"id":"smooth/subscribe-to-smooth/overview","title":"Subscribing to Smooth","description":"Hello! In this section you will find all the information on how to subscribe your Validators to Smooth. Even though the process is simple, it is important to follow the steps carefully.","sidebar":"smoothSidebar"},"smooth/unsubscribe-from-smooth":{"id":"smooth/unsubscribe-from-smooth","title":"Unsubscribing from Smooth.","description":"Unsubscribing from Smooth is as simple as subscribing to it. You can unsubscribe from Smooth at any time, it is done through Smooth\'s website and it only takes one simple transaction.","sidebar":"smoothSidebar"},"user/access-your-dappnode/local":{"id":"user/access-your-dappnode/local","title":"Local Proxy Access to Dappnode","description":"The local proxy method provides a way to access your Dappnode from within the same local network without any previous configuration required. However, it\'s essential to understand that due to certain network incompatibilities, this method might not work for all users.","sidebar":"userSidebar"},"user/access-your-dappnode/overview":{"id":"user/access-your-dappnode/overview","title":"\ud83c\udf10 Access your Dappnode","description":"Dappnode is made to work on a dedicated computer, and its main control panel, the Dappmanager, is accessed from another device via my.dappnode , as it is meant to be installed over an operating system that does not include a graphical interface.","sidebar":"userSidebar"},"user/access-your-dappnode/terminal":{"id":"user/access-your-dappnode/terminal","title":"Terminal Access to Dappnode","description":"Accessing the terminal of your Dappnode, often referred to as the command-line interface (CLI), provides deep control and management capabilities. However, this method is considered advanced and requires familiarity with command line interactions. Incorrect or misguided commands can lead to unintended changes or potential system damage.","sidebar":"userSidebar"},"user/access-your-dappnode/vpn/openvpn":{"id":"user/access-your-dappnode/vpn/openvpn","title":"OpenVPN Access to Dappnode","description":"OpenVPN is a widely-accepted VPN protocol known for its reliability and high-security standards. Here\'s how you can set it up with Dappnode.","sidebar":"userSidebar"},"user/access-your-dappnode/vpn/overview":{"id":"user/access-your-dappnode/vpn/overview","title":"VPN Access to Dappnode","description":"Virtual Private Network (VPN) is a robust method for accessing your Dappnode. It ensures a secure and encrypted connection between your device and the Dappnode, allowing you to manage your Dappnode from virtually anywhere. Depending on your needs and preferences, Dappnode offers support for two primary VPN technologies: WireGuard and OpenVPN.","sidebar":"userSidebar"},"user/access-your-dappnode/vpn/wireguard":{"id":"user/access-your-dappnode/vpn/wireguard","title":"WireGuard Access to Dappnode","description":"WireGuard is a modern, high-performance VPN protocol that offers a simple and streamlined approach for securely accessing your Dappnode. This guide will walk you through setting up WireGuard with your Dappnode.","sidebar":"userSidebar"},"user/access-your-dappnode/wifi":{"id":"user/access-your-dappnode/wifi","title":"Wi-Fi Access to Dappnode","description":"If you bought a Dappnode from our store, or installed Dappnode on a computer with a built-in Wi-Fi chip, you can easily connect to the Dappmanager (Dappnode web UI) using the Dappnode\'s Wi-Fi hotspot.","sidebar":"userSidebar"},"user/dappnode-cloud/overview":{"id":"user/dappnode-cloud/overview","title":"What is Dappnode Cloud?","description":"Dappnode Cloud is a service that allows users to deploy a Dappnode in a cloud provider so it can be tested without the need for physical hardware. We provide easy pre-configured instances for the main cloud providers (AWS for now, more to come later) to continue to make the deployment of web3 infrastructrure accessible and hassle-free for everyone. It consists of a Dappnode image deployed on a machine instance from a cloud provider, eliminating the need to invest in hardware in order to test Dappnode.","sidebar":"userSidebar"},"user/dappnode-cloud/providers/aws/faqs":{"id":"user/dappnode-cloud/providers/aws/faqs","title":"FAQs & Troubleshooting","description":"Which machine should I choose?","sidebar":"userSidebar"},"user/dappnode-cloud/providers/aws/overview":{"id":"user/dappnode-cloud/providers/aws/overview","title":"AWS","description":"Amazon Web Services (AWS) is a cloud computing platform provided by Amazon. It offers a wide range of services, including computing power, storage options, and networking capabilities, enabling users to build and deploy applications and services efficiently.","sidebar":"userSidebar"},"user/dappnode-cloud/providers/aws/set-up-instance":{"id":"user/dappnode-cloud/providers/aws/set-up-instance","title":"How to Set Up an Instance","description":"To launch a Dappnode AMI instance, follow these steps:","sidebar":"userSidebar"},"user/dappnode-cloud/providers/coming-soon":{"id":"user/dappnode-cloud/providers/coming-soon","title":"More coming soon","description":"We are aiming to deploy Dappnode Images in more cloud providers in a nearly future.","sidebar":"userSidebar"},"user/ethical-metrics/metrics":{"id":"user/ethical-metrics/metrics","title":"Metrics Collected by Ethical Metrics","description":"Dappnode has absolutely no hidden telemetry and is completely private by design. We were reluctant of setting up a monitoring service because we did NOT want to collect any data from our users. Because of our community\'s continuous requests to offer alerts, we came up with a solution that doesn\'t compromise your privacy.","sidebar":"userSidebar"},"user/ethical-metrics/overview":{"id":"user/ethical-metrics/overview","title":"Ethical Metrics","description":"Ethical Metrics requires the Dappnode Monitoring Service (DMS) and Dappnode Exporter as dependencies.","sidebar":"userSidebar"},"user/ethical-metrics/setup":{"id":"user/ethical-metrics/setup","title":"Setting up Ethical Metrics","description":"We highly recommend utilizing the Telegram channel option in addition to or instead of relying solely on email notifications.","sidebar":"userSidebar"},"user/ethical-metrics/troubleshooting":{"id":"user/ethical-metrics/troubleshooting","title":"Troubleshooting","description":"Experiencing trouble when setting your notifications up? Check this FAQ. If your issue isn\'t listed, please pay us a visit in the Dappnode Discord and we\'ll be happy to assist you!","sidebar":"userSidebar"},"user/faqs":{"id":"user/faqs","title":"FAQs","description":"How can I start validating?","sidebar":"userSidebar"},"user/getting-started/access-dappnode-via-wifi":{"id":"user/getting-started/access-dappnode-via-wifi","title":"Access Dappnode via Wi-Fi","description":"After connecting your Dappnode to the router and power, and turning it on, it\'s time to connect to it.","sidebar":"userSidebar"},"user/getting-started/choose-your-path":{"id":"user/getting-started/choose-your-path","title":"Choose your path","description":"Regardless of how you wish to utilize Dappnode, taking the initiative to contribute to decentralization and earning rewards is commendable. Embark on your desired path and experience the full potential of Dappnode.","sidebar":"userSidebar"},"user/getting-started/connect-dappnode-to-the-router":{"id":"user/getting-started/connect-dappnode-to-the-router","title":"Connect your dappnode to the router and power","description":"Dappnode offers a seamless plug-and-play experience. For optimal performance and to ensure smooth operation, please connect your Dappnode to your router and enable UPnP settings within the router.","sidebar":"userSidebar"},"user/getting-started/next-steps":{"id":"user/getting-started/next-steps","title":"Next Steps","description":"Now that your DAppNode is set up and ready to go, it\'s time to explore further configurations and features to get the most out of your experience. Here are some of the most common next steps:","sidebar":"userSidebar"},"user/getting-started/register":{"id":"user/getting-started/register","title":"Register","description":"1. Register as New User","sidebar":"userSidebar"},"user/getting-started/setup":{"id":"user/getting-started/setup","title":"Setup","description":"Setting up Dappnode is a straightforward process. This guide will walk you through configuring your Dappnode for the first time.","sidebar":"userSidebar"},"user/hardware/maintenance":{"id":"user/hardware/maintenance","title":"Maintenance","description":"This section will cover four different approaches to servicing your hardware. The order is by level of difficulty from easiest to hardest. Remember that if you have any questions they\'re always welcome in our Discord server.","sidebar":"userSidebar"},"user/hardware/overview":{"id":"user/hardware/overview","title":"Hardware","description":"In this section you will find information related to the hardware of the Dappnode\'s host machine. If you had noticed any issue with it and have tried some steps provided by the Dappnode community and/or staff without success, this section of the Dappnode documentation will help you solving those that are on the hardware side of things.","sidebar":"userSidebar"},"user/hardware/temperature":{"id":"user/hardware/temperature","title":"Temperature","description":"Keeping a close eye to your Dappnode\'s temperature is part of the Node Runner\'s basic good practices. Dappnode provides you with metrics \ud83d\udcca in the main dashboard to do so.","sidebar":"userSidebar"},"user/install/arm":{"id":"user/install/arm","title":"Install - ARM","description":"Hardware Recommendations","sidebar":"userSidebar"},"user/install/dappnode-commands":{"id":"user/install/dappnode-commands","title":"Dappnode commands","description":"Dappnode comes with a set of commands that can be used to manage the system. These commands can be used directly from the command line.","sidebar":"userSidebar"},"user/install/iso":{"id":"user/install/iso","title":"ISO Installation","description":"When you want to perform a clean installation by installing the base operating system and Dappnode. Installing from an ISO will wipe the machine data and install Dappnode over Debian.","sidebar":"userSidebar"},"user/install/overview":{"id":"user/install/overview","title":"Installation Overview","description":"Specifications & Minimum Requirements","sidebar":"userSidebar"},"user/install/script":{"id":"user/install/script","title":"Script installation","description":"You can install Dappnode using the installation script. In this case, we recommend you use Ubuntu or Debian as your operating system.","sidebar":"userSidebar"},"user/packages/avalanche":{"id":"user/packages/avalanche","title":"Avalanche","description":"Avalanche: A Revolutionary Consensus Protocol","sidebar":"userSidebar"},"user/packages/bitcoin":{"id":"user/packages/bitcoin","title":"Bitcoin","description":"Exploring Bitcoin: The Pioneer of Cryptocurrency","sidebar":"userSidebar"},"user/packages/dms":{"id":"user/packages/dms","title":"Dappnode Monitoring Service (DMS)","description":"As a Dappnode user, there are times when having insights into the performance of your packages or your whole system can be incredibly beneficial. This means understanding the condition or \\"health\\" of your packages, the utilization of your computer resources such as CPU, RAM, and disk space, as well as monitoring network traffic flow. Yet, managing all of these aspects can become complex and tedious, even for those with experience. This is precisely where the Dappnode Monitoring Service (DMS) steps in to simplify matters.","sidebar":"userSidebar"},"user/packages/ethclassic":{"id":"user/packages/ethclassic","title":"Ethereum Classic","description":"Introducing Ethereum Classic: Preserving Blockchain Principles","sidebar":"userSidebar"},"user/packages/monero":{"id":"user/packages/monero","title":"Monero","description":"Introducing Monero: A Privacy-Centric Cryptocurrency","sidebar":"userSidebar"},"user/packages/signature":{"id":"user/packages/signature","title":"Packages\' Signature","description":"Dappnode\'s Packages Signatures","sidebar":"userSidebar"},"user/packages/swarm":{"id":"user/packages/swarm","title":"Guide to Installing Bee Node on Dappnode","description":"Introduction to Swarm","sidebar":"userSidebar"},"user/packages/understanding-dappnode-packages":{"id":"user/packages/understanding-dappnode-packages","title":"Understanding Dappnode Packages","description":"What are Dappnode packages and what features do they offer?","sidebar":"userSidebar"},"user/repository/ethereum":{"id":"user/repository/ethereum","title":"Ethereum repository","description":"Dappnode uses smart contracts to distribute the dappnode packages available in the Dappstore. The smart contracts are deployed in the Ethereum blockchain and the Dappnode client interacts with them to get the list of available packages and to download them. Your dappnode will need a connection to an Ethereum node in order to read the smart contracts and download the packages. There are two ways to establish this connection:","sidebar":"userSidebar"},"user/repository/ipfs":{"id":"user/repository/ipfs","title":"IPFS repository","description":"Dappnode leverages IPFS for distributing packages available in the Dappstore. To download these packages, your Dappnode requires a connection to an IPFS node. When it comes to connecting to the IPFS network, you have two primary choices:","sidebar":"userSidebar"},"user/rollups/optimism":{"id":"user/rollups/optimism","title":"Optimism Rollup","description":"Optimism is Ethereum\'s Layer 2 solution, leveraging Optimistic Rollups to enhance transaction speeds and lower costs. It conducts transactions off-chain, reconciling final states on the main Ethereum chain, all while preserving compatibility with Ethereum smart contracts.","sidebar":"userSidebar"},"user/rollups/overview":{"id":"user/rollups/overview","title":"Ethereum Rollups: An Overview","description":"Rollups are advanced layer-2 scaling solutions designed to increase the throughput of the Ethereum network. By executing and storing transaction data off the main Ethereum chain while keeping a cryptographic commitment on-chain, Rollups enhance scalability and reduce fees. Rollups can be broadly categorized into two types: Optimistic Rollups and zk-Rollups, each with its unique approach and trade-offs.","sidebar":"userSidebar"},"user/staking/ethereum/dvt-technologies/diva":{"id":"user/staking/ethereum/dvt-technologies/diva","title":"Diva package for Dappnode","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/dvt-technologies/obol-network":{"id":"user/staking/ethereum/dvt-technologies/obol-network","title":"Obol Distributed Validator package for Dappnode","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/dvt-technologies/ssv-network":{"id":"user/staking/ethereum/dvt-technologies/ssv-network","title":"SSV Distributed Validator package for Dappnode","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/lsd-pools/rocketpool":{"id":"user/staking/ethereum/lsd-pools/rocketpool","title":"Rocketpool","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/lsd-pools/stakehouse":{"id":"user/staking/ethereum/lsd-pools/stakehouse","title":"Stakehouse","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/lsd-pools/stakewise":{"id":"user/staking/ethereum/lsd-pools/stakewise","title":"StakeWise","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/solo/holesky":{"id":"user/staking/ethereum/solo/holesky","title":"Holesky Testnet","description":"The Holesky testnet is a testnet for the Ethereum ecosystem, serving as a sandbox for users and developers alike.","sidebar":"userSidebar"},"user/staking/ethereum/solo/mainnet":{"id":"user/staking/ethereum/solo/mainnet","title":"Ethereum mainnet","description":"Ethereum stands as a titan in the realm of smart contract platforms. Its monumental shift from Proof of Work (PoW) to Proof of Stake (PoS) has opened up opportunities for individuals to participate in Ethereum\'s block production by staking ETH.","sidebar":"userSidebar"},"user/staking/gnosis-chain/solo":{"id":"user/staking/gnosis-chain/solo","title":"Gnosis Chain","description":"Gnosis Chain stands as a sentinel, functioning as a canary chain for Ethereum. It\'s operated and nurtured by the GnosisDAO community. With over 10% of its validators being home stakers via Dappnode, it\'s a testament to its popularity and accessibility.","sidebar":"userSidebar"},"user/staking/lukso/solo":{"id":"user/staking/lukso/solo","title":"LUKSO","description":"LUKSO is the next-gen blockchain designed with creative industries in mind. Imagine a digital realm where the spirit of Ethereum meets the world of fashion, art, and design. That\'s LUKSO for you!","sidebar":"userSidebar"},"user/staking/overview":{"id":"user/staking/overview","title":"Earn with Staking in Dappnode","description":"Decentralize Proof-of-Stake chains and earn","sidebar":"userSidebar"},"user/videos-and-tutorials/crash-course":{"id":"user/videos-and-tutorials/crash-course","title":"Crash Course","description":"Want to learn more about Dappnode through video tutorials? Check out our Dappnode Driving School!","sidebar":"userSidebar"},"user/videos-and-tutorials/driving-school/configuration":{"id":"user/videos-and-tutorials/driving-school/configuration","title":"2. Configuring your Dappnode","description":"We recommend going through Initial Setup of Dappnode Driving School before watching these videos, as these videos expect you to have a basic understanding of how your Dappnode works and how to access it.","sidebar":"userSidebar"},"user/videos-and-tutorials/driving-school/initial-setup":{"id":"user/videos-and-tutorials/driving-school/initial-setup","title":"1. Initial Dappnode Setup","description":"Welcome to Dappnode Driving School! Here you\'ll find a series of videos that will guide you through the initial setup process. From booting Dappnode from ISO and accessing it through VPN, to setting up your Ethereum node, we\'ve got you covered.","sidebar":"userSidebar"},"user/videos-and-tutorials/guides/connect-node":{"id":"user/videos-and-tutorials/guides/connect-node","title":"How to Connect to My Blockchain Node","description":"When you\'ve set up your Dappnode, you might want to connect various applications to your blockchain node. This process can vary depending on which blockchain you\'ve selected. Below is a guide on how to do this:","sidebar":"userSidebar"},"user/videos-and-tutorials/overview":{"id":"user/videos-and-tutorials/overview","title":"Videos and Tutorials","description":"Welcome to the Videos and Tutorials section! Here, you\'ll find a curated list of videos and written tutorials designed to help you get the most out of Dappnode. Whether you\'re a beginner or an advanced user, there\'s something here for everyone."}}}')}}]); \ No newline at end of file diff --git a/assets/js/94131f31.7685661d.js b/assets/js/94131f31.7685661d.js deleted file mode 100644 index 42966b3f3..000000000 --- a/assets/js/94131f31.7685661d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4307],{4137:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>c});var n=a(7294);function l(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t =0||(l[a]=e[a]);return l}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,a)&&(l[a]=e[a])}return l}var o=n.createContext({}),u=function(e){var t=n.useContext(o),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},m=function(e){var t=u(e.components);return n.createElement(o.Provider,{value:t},e.children)},s="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var a=e.components,l=e.mdxType,r=e.originalType,o=e.parentName,m=p(e,["components","mdxType","originalType","parentName"]),s=u(a),k=l,c=s["".concat(o,".").concat(k)]||s[k]||d[k]||r;return a?n.createElement(c,i(i({ref:t},m),{},{components:a})):n.createElement(c,i({ref:t},m))}));function c(e,t){var a=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var r=a.length,i=new Array(r);i[0]=k;var p={};for(var o in t)hasOwnProperty.call(t,o)&&(p[o]=t[o]);p.originalType=e,p[s]="string"==typeof e?e:l,i[1]=p;for(var u=2;u {a.r(t),a.d(t,{assets:()=>o,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>p,toc:()=>u});var n=a(7462),l=(a(7294),a(4137));const r={},i="Wizard Reference",p={unversionedId:"dev/references/setup-wizard",id:"dev/references/setup-wizard",title:"Wizard Reference",description:"The setup wizard for Dappnode packages helps automate the package customization and improve its user experience. You can allow users to conveniently edit environment variables, port mappings, and upload files while interacting with a simple web form, right before installing the package.",source:"@site/docs/dev/references/setup-wizard.md",sourceDirName:"dev/references",slug:"/dev/references/setup-wizard",permalink:"/docs/dev/references/setup-wizard",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/references/setup-wizard.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"Dappnode Package (DNP) manifest",permalink:"/docs/dev/references/manifest"},next:{title:"GitHub Actions for Dappnode Packages",permalink:"/docs/dev/github-actions"}},o={},u=[{value:"How to use",id:"how-to-use",level:2},{value:"Example",id:"example",level:2},{value:"version",id:"version",level:2},{value:"fields",id:"fields",level:2},{value:"id",id:"id",level:3},{value:"target",id:"target",level:3},{value:"environment",id:"environment",level:4},{value:"name",id:"name",level:5},{value:"service",id:"service",level:5},{value:"portMapping",id:"portmapping",level:4},{value:"containerPort",id:"containerport",level:5},{value:"service",id:"service-1",level:5},{value:"namedVolumeMountpoint",id:"namedvolumemountpoint",level:4},{value:"volumeName",id:"volumename",level:5},{value:"allNamedVolumesMountpoint",id:"allnamedvolumesmountpoint",level:4},{value:"fileUpload",id:"fileupload",level:4},{value:"path",id:"path",level:5},{value:"service",id:"service-2",level:5},{value:"title",id:"title",level:3},{value:"description",id:"description",level:3},{value:"secret",id:"secret",level:3},{value:"pattern",id:"pattern",level:3},{value:"patternErrorMessage",id:"patternerrormessage",level:3},{value:"enum",id:"enum",level:3},{value:"required",id:"required",level:3},{value:"if",id:"if",level:3}],m={toc:u},s="wrapper";function d(e){let{components:t,...a}=e;return(0,l.kt)(s,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"wizard-reference"},"Wizard Reference"),(0,l.kt)("p",null,"The setup wizard for Dappnode packages helps automate the package customization and improve its user experience. You can allow users to conveniently edit environment variables, port mappings, and upload files while interacting with a simple web form, right before installing the package."),(0,l.kt)("h2",{id:"how-to-use"},"How to use"),(0,l.kt)("p",null,"To add this functionality, create a file ",(0,l.kt)("inlineCode",{parentName:"p"},"setup-wizard.yml")," in the root of your Dappnode package directory. Both JSON and YAML formats are supported, but YAML makes writing markdown text blocks much easier (its used in the ",(0,l.kt)("a",{parentName:"p",href:"#description"},(0,l.kt)("inlineCode",{parentName:"a"},"description"))," property)."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-diff"}," DappnodePackage-my-package.public.dappnode.eth/\n \u251c\u2500\u2500 build\n \u2502 \u251c\u2500\u2500 ...\n \u2502 \u2514\u2500\u2500 Dockerfile\n \u251c\u2500\u2500 avatar-my-package.png\n \u251c\u2500\u2500 dappnode_package.json\n \u251c\u2500\u2500 docker-compose.yml\n+ \u2514\u2500\u2500 setup-wizard.yml\n")),(0,l.kt)("h2",{id:"example"},"Example"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},'version: "2"\nfields:\n - id: payoutAddress,\n target:\n type: environment\n name: PAYOUT_ADDRESS\n service: service1\n title: Payout address\n description: >-\n Address to send **payouts** too. [More info](https://more.info)\n Supports markdown and multiline\n secret: true\n pattern: "^0x[a-fA-F0-9]{40}$"\n patternErrorMessage: Must be a valid address (0x1fd16a...)\n enum:\n - normal\n - archive\n - advanced\n required: true\n if: { "mode": { "enum": ["advanced"] } }\n')),(0,l.kt)("h2",{id:"version"},"version"),(0,l.kt)("p",null,"Identify this setup wizard version. Currently only supports version ",(0,l.kt)("inlineCode",{parentName:"p"},'"2"')),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"value: ",(0,l.kt)("inlineCode",{parentName:"li"},'"2"'))),(0,l.kt)("h2",{id:"fields"},"fields"),(0,l.kt)("p",null,"Setup wizard fields. Fields to show in the setup wizard form UI"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: Array type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object[]"))),(0,l.kt)("p",null,"All items must be of the type: ",(0,l.kt)("inlineCode",{parentName:"p"},"object")," with the following properties:"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"target")),(0,l.kt)("td",{parentName:"tr",align:null},"object"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"id")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required")),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"title")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required")),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"description")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required")),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"secret")),(0,l.kt)("td",{parentName:"tr",align:null},"boolean"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"false"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"pattern")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"patternErrorMessage")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"enum")),(0,l.kt)("td",{parentName:"tr",align:null},"array"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"required")),(0,l.kt)("td",{parentName:"tr",align:null},"boolean"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"if")),(0,l.kt)("td",{parentName:"tr",align:null},"object"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional"),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("h3",{id:"id"},"id"),(0,l.kt)("p",null,"Unique property ID required for internal form parsing, and to use the ",(0,l.kt)("inlineCode",{parentName:"p"},"if")," conditional block."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"id: payoutAddress\n")),(0,l.kt)("h3",{id:"target"},"target"),(0,l.kt)("p",null,"Maps the setup wizard field to a package configuration option. Supports:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#environment"},(0,l.kt)("inlineCode",{parentName:"a"},"environment")),": For environment variables"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#portMapping"},(0,l.kt)("inlineCode",{parentName:"a"},"portMapping")),": For port mapping"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#namedVolumeMountpoint"},(0,l.kt)("inlineCode",{parentName:"a"},"namedVolumeMountpoint")),": To allow hosting a specific package volume into a different drive or mountpoint"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#allNamedVolumesMountpoint"},(0,l.kt)("inlineCode",{parentName:"a"},"allNamedVolumesMountpoint")),": To allow hosting all package volumes into a different drive or mountpoint"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#fileUpload"},(0,l.kt)("inlineCode",{parentName:"a"},"fileUpload")),": To upload user files to the package container")),(0,l.kt)("h4",{id:"environment"},"environment"),(0,l.kt)("p",null,"To customize environment variables with user input. Targeted variables must be declared in the package's docker-compose. You can customize the type of input shown in the UI with this field properties"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#secret"},(0,l.kt)("inlineCode",{parentName:"a"},"secret")),": Hides input, to collect sensitive data."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#pattern"},(0,l.kt)("inlineCode",{parentName:"a"},"pattern")),": To validate input against any Regex expression."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#enum"},(0,l.kt)("inlineCode",{parentName:"a"},"enum")),": Show as a select dropdown menu.")),(0,l.kt)("p",null,"It exists two ways of defining environment variables.\nThe first one, where you define one environment var for one service, you the format to do it is the following:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"target:\n type: environment\n name: PAYOUT_ADDRESS\n service: service1\n")),(0,l.kt)("p",null,"In case you want to define an environment variable that is used in multiple services you can define it in the next way:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"target:\n type: environment\n name: PAYOUT_ADDRESS\n service: [service1, service2, service2]\n")),(0,l.kt)("h5",{id:"name"},"name"),(0,l.kt)("p",null,"The name of the environment variable as declared in the docker-compose."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"name: PAYOUT_ADDRESS\n")),(0,l.kt)("h5",{id:"service"},"service"),(0,l.kt)("p",null,"In multi-service package, which service should be targeted with this setting."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"service: service1\n")),(0,l.kt)("h4",{id:"portmapping"},"portMapping"),(0,l.kt)("p",null,"To customize port mappings with user input. Targeted container port must be declared in the package's docker-compose."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"target:\n type: portMapping\n containerPort: 9554/UDP\n service: service1\n")),(0,l.kt)("h5",{id:"containerport"},"containerPort"),(0,l.kt)("p",null,"Exposed container port to map to. Must follow the format ",(0,l.kt)("inlineCode",{parentName:"p"},"{portNumber}")," or ",(0,l.kt)("inlineCode",{parentName:"p"},"{portNumber}/{PROTOCOL}"),", where PROTOCOL must be ",(0,l.kt)("inlineCode",{parentName:"p"},"TCP")," or ",(0,l.kt)("inlineCode",{parentName:"p"},"UDP")," in all caps."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"containerPort: 9554\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"containerPort: 9554/TCP\n")),(0,l.kt)("h5",{id:"service-1"},"service"),(0,l.kt)("p",null,"See ",(0,l.kt)("a",{parentName:"p",href:"#service"},"service")),(0,l.kt)("h4",{id:"namedvolumemountpoint"},"namedVolumeMountpoint"),(0,l.kt)("p",null,"To allow hosting a specific package volume into a different drive or mountpoint"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"target:\n type: namedVolumeMountpoint\n volumeName: blockchain_data\n")),(0,l.kt)("h5",{id:"volumename"},"volumeName"),(0,l.kt)("p",null,"Name of the docker volume to allow the user to change its mountpoint. Must have the exact same name as declared in the package's compose ",(0,l.kt)("inlineCode",{parentName:"p"},"volumes")," section."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"volumeName: blockchain_data\n")),(0,l.kt)("h4",{id:"allnamedvolumesmountpoint"},"allNamedVolumesMountpoint"),(0,l.kt)("p",null,"To allow hosting all package volumes into a different drive or mountpoint at once. Use this option if your package has multiple heavy volumes whose mountpoint should be changed at once."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"target:\n type: allNamedVolumesMountpoint\n")),(0,l.kt)("h4",{id:"fileupload"},"fileUpload"),(0,l.kt)("p",null,"To allow uploading user files to the package container"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"target:\n type: fileUpload\n path: /usr/src/config.json\n service: service1\n")),(0,l.kt)("h5",{id:"path"},"path"),(0,l.kt)("p",null,"Destination path to upload the file to. Must be a valid absolute path in the package container."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"path: /usr/src/config.json\n")),(0,l.kt)("h5",{id:"service-2"},"service"),(0,l.kt)("p",null,"See ",(0,l.kt)("a",{parentName:"p",href:"#service"},"service")),(0,l.kt)("h3",{id:"title"},"title"),(0,l.kt)("p",null,"The Title Schema"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"default: ",(0,l.kt)("inlineCode",{parentName:"li"},'""')),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"title: Payout address\n")),(0,l.kt)("h3",{id:"description"},"description"),(0,l.kt)("p",null,"The Description Schema"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"default: ",(0,l.kt)("inlineCode",{parentName:"li"},'""')),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"description: >-\n Address to send **payouts** too. [More info](https://more.info)\n Supports markdown and multiline\n")),(0,l.kt)("h3",{id:"secret"},"secret"),(0,l.kt)("p",null,'Display field input as hidden. Use to collect sensitive data. It will automatically activate if the field name contains "secret" "passphrase" or "password". Only available with target environment.'),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"default: ",(0,l.kt)("inlineCode",{parentName:"li"},"false")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"boolean"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"secret: true\n")),(0,l.kt)("h3",{id:"pattern"},"pattern"),(0,l.kt)("p",null,"Enforce this property to satisfy a regex before continuing. Only available with target environment. Use also ",(0,l.kt)("a",{parentName:"p",href:"#patternErrorMessage"},(0,l.kt)("inlineCode",{parentName:"a"},"patternErrorMessage"))," to show a nicer error message when regex validation fails."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},'pattern: "^0x[a-fA-F0-9]{40}$"\n')),(0,l.kt)("h3",{id:"patternerrormessage"},"patternErrorMessage"),(0,l.kt)("p",null,"Error to show if the regex pattern validation fails. Only available with target environment."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"patternErrorMessage: Must be a valid address (0x1fd16a...)\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"patternErrorMessage: Must be at least 8 characters long\n")),(0,l.kt)("h3",{id:"enum"},"enum"),(0,l.kt)("p",null,"List valid options. Will automatically display the input as a select menu. Only available with target environment."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: Array type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string[]"))),(0,l.kt)("p",null,"All items must be of the type: ",(0,l.kt)("inlineCode",{parentName:"p"},"string")),(0,l.kt)("p",null,"Examples"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"enum:\n - normal\n - archive\n - advanced\n")),(0,l.kt)("h3",{id:"required"},"required"),(0,l.kt)("p",null,"Enforce this property to be provided before continuing"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"boolean"))),(0,l.kt)("p",null,"Examples"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"required: true\n")),(0,l.kt)("h3",{id:"if"},"if"),(0,l.kt)("p",null,"Only display the field property if the ",(0,l.kt)("inlineCode",{parentName:"p"},"if")," schema is valid against the current form data provided by the user. The form data is an object with the structure ",(0,l.kt)("inlineCode",{parentName:"p"},"{ [field.id]: JSONSchema }"),"."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object"))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},'if: { "mode": { "enum": ["advanced"] } }\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},'if: { "mode": { "enum": ["archive"] } }\n')))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/94131f31.df2e8a1b.js b/assets/js/94131f31.df2e8a1b.js new file mode 100644 index 000000000..7ed986f93 --- /dev/null +++ b/assets/js/94131f31.df2e8a1b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4307],{6088:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>d,default:()=>h,frontMatter:()=>l,metadata:()=>t,toc:()=>c});var r=i(5893),s=i(1151);const l={},d="Wizard Reference",t={id:"dev/references/setup-wizard",title:"Wizard Reference",description:"The setup wizard for Dappnode packages helps automate the package customization and improve its user experience. You can allow users to conveniently edit environment variables, port mappings, and upload files while interacting with a simple web form, right before installing the package.",source:"@site/docs/dev/references/setup-wizard.md",sourceDirName:"dev/references",slug:"/dev/references/setup-wizard",permalink:"/docs/dev/references/setup-wizard",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/references/setup-wizard.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"Dappnode Package (DNP) manifest",permalink:"/docs/dev/references/manifest"},next:{title:"GitHub Actions for Dappnode Packages",permalink:"/docs/dev/github-actions"}},a={},c=[{value:"How to use",id:"how-to-use",level:2},{value:"Example",id:"example",level:2},{value:"version",id:"version",level:2},{value:"fields",id:"fields",level:2},{value:"id",id:"id",level:3},{value:"target",id:"target",level:3},{value:"environment",id:"environment",level:4},{value:"name",id:"name",level:5},{value:"service",id:"service",level:5},{value:"portMapping",id:"portmapping",level:4},{value:"containerPort",id:"containerport",level:5},{value:"service",id:"service-1",level:5},{value:"namedVolumeMountpoint",id:"namedvolumemountpoint",level:4},{value:"volumeName",id:"volumename",level:5},{value:"allNamedVolumesMountpoint",id:"allnamedvolumesmountpoint",level:4},{value:"fileUpload",id:"fileupload",level:4},{value:"path",id:"path",level:5},{value:"service",id:"service-2",level:5},{value:"title",id:"title",level:3},{value:"description",id:"description",level:3},{value:"secret",id:"secret",level:3},{value:"pattern",id:"pattern",level:3},{value:"patternErrorMessage",id:"patternerrormessage",level:3},{value:"enum",id:"enum",level:3},{value:"required",id:"required",level:3},{value:"if",id:"if",level:3}];function o(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"wizard-reference",children:"Wizard Reference"}),"\n",(0,r.jsx)(n.p,{children:"The setup wizard for Dappnode packages helps automate the package customization and improve its user experience. You can allow users to conveniently edit environment variables, port mappings, and upload files while interacting with a simple web form, right before installing the package."}),"\n",(0,r.jsx)(n.h2,{id:"how-to-use",children:"How to use"}),"\n",(0,r.jsxs)(n.p,{children:["To add this functionality, create a file ",(0,r.jsx)(n.code,{children:"setup-wizard.yml"})," in the root of your Dappnode package directory. Both JSON and YAML formats are supported, but YAML makes writing markdown text blocks much easier (its used in the ",(0,r.jsx)(n.a,{href:"#description",children:(0,r.jsx)(n.code,{children:"description"})})," property)."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:" DappnodePackage-my-package.public.dappnode.eth/\n \u251c\u2500\u2500 build\n \u2502 \u251c\u2500\u2500 ...\n \u2502 \u2514\u2500\u2500 Dockerfile\n \u251c\u2500\u2500 avatar-my-package.png\n \u251c\u2500\u2500 dappnode_package.json\n \u251c\u2500\u2500 docker-compose.yml\n+ \u2514\u2500\u2500 setup-wizard.yml\n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'version: "2"\nfields:\n - id: payoutAddress,\n target:\n type: environment\n name: PAYOUT_ADDRESS\n service: service1\n title: Payout address\n description: >-\n Address to send **payouts** too. [More info](https://more.info)\n Supports markdown and multiline\n secret: true\n pattern: "^0x[a-fA-F0-9]{40}$"\n patternErrorMessage: Must be a valid address (0x1fd16a...)\n enum:\n - normal\n - archive\n - advanced\n required: true\n if: { "mode": { "enum": ["advanced"] } }\n'})}),"\n",(0,r.jsx)(n.h2,{id:"version",children:"version"}),"\n",(0,r.jsxs)(n.p,{children:["Identify this setup wizard version. Currently only supports version ",(0,r.jsx)(n.code,{children:'"2"'})]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n",(0,r.jsxs)(n.li,{children:["value: ",(0,r.jsx)(n.code,{children:'"2"'})]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"fields",children:"fields"}),"\n",(0,r.jsx)(n.p,{children:"Setup wizard fields. Fields to show in the setup wizard form UI"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: Array type: ",(0,r.jsx)(n.code,{children:"object[]"})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["All items must be of the type: ",(0,r.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required"}),(0,r.jsx)(n.th,{children:"Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"target"})}),(0,r.jsx)(n.td,{children:"object"}),(0,r.jsx)(n.td,{children:"Optional"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"id"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"title"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"description"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"secret"})}),(0,r.jsx)(n.td,{children:"boolean"}),(0,r.jsx)(n.td,{children:"Optional"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"pattern"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Optional"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"patternErrorMessage"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Optional"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"enum"})}),(0,r.jsx)(n.td,{children:"array"}),(0,r.jsx)(n.td,{children:"Optional"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"required"})}),(0,r.jsx)(n.td,{children:"boolean"}),(0,r.jsx)(n.td,{children:"Optional"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"if"})}),(0,r.jsx)(n.td,{children:"object"}),(0,r.jsx)(n.td,{children:"Optional"}),(0,r.jsx)(n.td,{})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"id",children:"id"}),"\n",(0,r.jsxs)(n.p,{children:["Unique property ID required for internal form parsing, and to use the ",(0,r.jsx)(n.code,{children:"if"})," conditional block."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"id: payoutAddress\n"})}),"\n",(0,r.jsx)(n.h3,{id:"target",children:"target"}),"\n",(0,r.jsx)(n.p,{children:"Maps the setup wizard field to a package configuration option. Supports:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"#environment",children:(0,r.jsx)(n.code,{children:"environment"})}),": For environment variables"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"#portMapping",children:(0,r.jsx)(n.code,{children:"portMapping"})}),": For port mapping"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"#namedVolumeMountpoint",children:(0,r.jsx)(n.code,{children:"namedVolumeMountpoint"})}),": To allow hosting a specific package volume into a different drive or mountpoint"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"#allNamedVolumesMountpoint",children:(0,r.jsx)(n.code,{children:"allNamedVolumesMountpoint"})}),": To allow hosting all package volumes into a different drive or mountpoint"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"#fileUpload",children:(0,r.jsx)(n.code,{children:"fileUpload"})}),": To upload user files to the package container"]}),"\n"]}),"\n",(0,r.jsx)(n.h4,{id:"environment",children:"environment"}),"\n",(0,r.jsx)(n.p,{children:"To customize environment variables with user input. Targeted variables must be declared in the package's docker-compose. You can customize the type of input shown in the UI with this field properties"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"#secret",children:(0,r.jsx)(n.code,{children:"secret"})}),": Hides input, to collect sensitive data."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"#pattern",children:(0,r.jsx)(n.code,{children:"pattern"})}),": To validate input against any Regex expression."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"#enum",children:(0,r.jsx)(n.code,{children:"enum"})}),": Show as a select dropdown menu."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"It exists two ways of defining environment variables.\nThe first one, where you define one environment var for one service, you the format to do it is the following:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"target:\n type: environment\n name: PAYOUT_ADDRESS\n service: service1\n"})}),"\n",(0,r.jsx)(n.p,{children:"In case you want to define an environment variable that is used in multiple services you can define it in the next way:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"target:\n type: environment\n name: PAYOUT_ADDRESS\n service: [service1, service2, service2]\n"})}),"\n",(0,r.jsx)(n.h5,{id:"name",children:"name"}),"\n",(0,r.jsx)(n.p,{children:"The name of the environment variable as declared in the docker-compose."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"name: PAYOUT_ADDRESS\n"})}),"\n",(0,r.jsx)(n.h5,{id:"service",children:"service"}),"\n",(0,r.jsx)(n.p,{children:"In multi-service package, which service should be targeted with this setting."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Examples:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"service: service1\n"})}),"\n",(0,r.jsx)(n.h4,{id:"portmapping",children:"portMapping"}),"\n",(0,r.jsx)(n.p,{children:"To customize port mappings with user input. Targeted container port must be declared in the package's docker-compose."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"target:\n type: portMapping\n containerPort: 9554/UDP\n service: service1\n"})}),"\n",(0,r.jsx)(n.h5,{id:"containerport",children:"containerPort"}),"\n",(0,r.jsxs)(n.p,{children:["Exposed container port to map to. Must follow the format ",(0,r.jsx)(n.code,{children:"{portNumber}"})," or ",(0,r.jsx)(n.code,{children:"{portNumber}/{PROTOCOL}"}),", where PROTOCOL must be ",(0,r.jsx)(n.code,{children:"TCP"})," or ",(0,r.jsx)(n.code,{children:"UDP"})," in all caps."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Examples:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"containerPort: 9554\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"containerPort: 9554/TCP\n"})}),"\n",(0,r.jsx)(n.h5,{id:"service-1",children:"service"}),"\n",(0,r.jsxs)(n.p,{children:["See ",(0,r.jsx)(n.a,{href:"#service",children:"service"})]}),"\n",(0,r.jsx)(n.h4,{id:"namedvolumemountpoint",children:"namedVolumeMountpoint"}),"\n",(0,r.jsx)(n.p,{children:"To allow hosting a specific package volume into a different drive or mountpoint"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"target:\n type: namedVolumeMountpoint\n volumeName: blockchain_data\n"})}),"\n",(0,r.jsx)(n.h5,{id:"volumename",children:"volumeName"}),"\n",(0,r.jsxs)(n.p,{children:["Name of the docker volume to allow the user to change its mountpoint. Must have the exact same name as declared in the package's compose ",(0,r.jsx)(n.code,{children:"volumes"})," section."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"volumeName: blockchain_data\n"})}),"\n",(0,r.jsx)(n.h4,{id:"allnamedvolumesmountpoint",children:"allNamedVolumesMountpoint"}),"\n",(0,r.jsx)(n.p,{children:"To allow hosting all package volumes into a different drive or mountpoint at once. Use this option if your package has multiple heavy volumes whose mountpoint should be changed at once."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"target:\n type: allNamedVolumesMountpoint\n"})}),"\n",(0,r.jsx)(n.h4,{id:"fileupload",children:"fileUpload"}),"\n",(0,r.jsx)(n.p,{children:"To allow uploading user files to the package container"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"target:\n type: fileUpload\n path: /usr/src/config.json\n service: service1\n"})}),"\n",(0,r.jsx)(n.h5,{id:"path",children:"path"}),"\n",(0,r.jsx)(n.p,{children:"Destination path to upload the file to. Must be a valid absolute path in the package container."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"path: /usr/src/config.json\n"})}),"\n",(0,r.jsx)(n.h5,{id:"service-2",children:"service"}),"\n",(0,r.jsxs)(n.p,{children:["See ",(0,r.jsx)(n.a,{href:"#service",children:"service"})]}),"\n",(0,r.jsx)(n.h3,{id:"title",children:"title"}),"\n",(0,r.jsx)(n.p,{children:"The Title Schema"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["default: ",(0,r.jsx)(n.code,{children:'""'})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"title: Payout address\n"})}),"\n",(0,r.jsx)(n.h3,{id:"description",children:"description"}),"\n",(0,r.jsx)(n.p,{children:"The Description Schema"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["default: ",(0,r.jsx)(n.code,{children:'""'})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"description: >-\n Address to send **payouts** too. [More info](https://more.info)\n Supports markdown and multiline\n"})}),"\n",(0,r.jsx)(n.h3,{id:"secret",children:"secret"}),"\n",(0,r.jsx)(n.p,{children:'Display field input as hidden. Use to collect sensitive data. It will automatically activate if the field name contains "secret" "passphrase" or "password". Only available with target environment.'}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["default: ",(0,r.jsx)(n.code,{children:"false"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"boolean"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"secret: true\n"})}),"\n",(0,r.jsx)(n.h3,{id:"pattern",children:"pattern"}),"\n",(0,r.jsxs)(n.p,{children:["Enforce this property to satisfy a regex before continuing. Only available with target environment. Use also ",(0,r.jsx)(n.a,{href:"#patternErrorMessage",children:(0,r.jsx)(n.code,{children:"patternErrorMessage"})})," to show a nicer error message when regex validation fails."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'pattern: "^0x[a-fA-F0-9]{40}$"\n'})}),"\n",(0,r.jsx)(n.h3,{id:"patternerrormessage",children:"patternErrorMessage"}),"\n",(0,r.jsx)(n.p,{children:"Error to show if the regex pattern validation fails. Only available with target environment."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Examples:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"patternErrorMessage: Must be a valid address (0x1fd16a...)\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"patternErrorMessage: Must be at least 8 characters long\n"})}),"\n",(0,r.jsx)(n.h3,{id:"enum",children:"enum"}),"\n",(0,r.jsx)(n.p,{children:"List valid options. Will automatically display the input as a select menu. Only available with target environment."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: Array type: ",(0,r.jsx)(n.code,{children:"string[]"})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["All items must be of the type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n",(0,r.jsx)(n.p,{children:"Examples"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"enum:\n - normal\n - archive\n - advanced\n"})}),"\n",(0,r.jsx)(n.h3,{id:"required",children:"required"}),"\n",(0,r.jsx)(n.p,{children:"Enforce this property to be provided before continuing"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"boolean"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Examples"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"required: true\n"})}),"\n",(0,r.jsx)(n.h3,{id:"if",children:"if"}),"\n",(0,r.jsxs)(n.p,{children:["Only display the field property if the ",(0,r.jsx)(n.code,{children:"if"})," schema is valid against the current form data provided by the user. The form data is an object with the structure ",(0,r.jsx)(n.code,{children:"{ [field.id]: JSONSchema }"}),"."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"object"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Examples:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'if: { "mode": { "enum": ["advanced"] } }\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'if: { "mode": { "enum": ["archive"] } }\n'})})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},1151:(e,n,i)=>{i.d(n,{Z:()=>t,a:()=>d});var r=i(7294);const s={},l=r.createContext(s);function d(e){const n=r.useContext(l);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:d(e.components),r.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/950718c7.52387e10.js b/assets/js/950718c7.52387e10.js new file mode 100644 index 000000000..b51396ba4 --- /dev/null +++ b/assets/js/950718c7.52387e10.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1796],{78:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>r,default:()=>u,frontMatter:()=>d,metadata:()=>a,toc:()=>s});var t=n(5893),i=n(1151);const d={sidebar_label:"Introduction"},r="Welcome to the Developer Documentation!",a={id:"dev",title:"Welcome to the Developer Documentation!",description:"Welcome to the Dappnode's developer docs! This documentation is your comprehensive guide to using the tools and resources that enable you to create, deploy, and manage your own custom dappnode packages (DNP). Whether you're new to the project or an experienced developer, this documentation will help you navigate the intricacies of developing in the dappnode environment.",source:"@site/docs/dev.md",sourceDirName:".",slug:"/dev",permalink:"/docs/dev",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev.md",tags:[],version:"current",frontMatter:{sidebar_label:"Introduction"},sidebar:"devSidebar",next:{title:"DappnodeSDK",permalink:"/docs/dev/sdk/overview"}},c={},s=[{value:"Contributing",id:"contributing",level:2},{value:"Feedback and Support",id:"feedback-and-support",level:2}];function p(e){const o={a:"a",admonition:"admonition",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h1,{id:"welcome-to-the-developer-documentation",children:"Welcome to the Developer Documentation!"}),"\n",(0,t.jsx)(o.p,{children:"Welcome to the Dappnode's developer docs! This documentation is your comprehensive guide to using the tools and resources that enable you to create, deploy, and manage your own custom dappnode packages (DNP). Whether you're new to the project or an experienced developer, this documentation will help you navigate the intricacies of developing in the dappnode environment."}),"\n",(0,t.jsx)(o.admonition,{type:"caution",children:(0,t.jsxs)(o.p,{children:["This documentation is for experienced people in the dappnode ecosystem or developers who want to contribute to dappnode by creating new packages. If you're new to dappnode, we recommend starting with the ",(0,t.jsx)(o.a,{href:"/docs/user/getting-started/choose-your-path",children:"User Documentation"}),"."]})}),"\n",(0,t.jsx)(o.h2,{id:"contributing",children:"Contributing"}),"\n",(0,t.jsx)(o.p,{children:"We welcome contributions from the community! If you'd like to contribute to Dappnode, please review our [Contributing Guidelines] to understand how you can get involved."}),"\n",(0,t.jsx)(o.h2,{id:"feedback-and-support",children:"Feedback and Support"}),"\n",(0,t.jsx)(o.p,{children:"We're here to help! If you encounter any issues, have questions, or want to provide feedback, feel free to:"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:["Join our community on ",(0,t.jsx)(o.a,{href:"https://discord.com/invite/dappnode",children:"Discord"})]}),"\n",(0,t.jsxs)(o.li,{children:["Open an issue on ",(0,t.jsx)(o.a,{href:"https://github.com/dappnode",children:"GitHub"})]}),"\n"]})]})}function u(e={}){const{wrapper:o}={...(0,i.a)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},1151:(e,o,n)=>{n.d(o,{Z:()=>a,a:()=>r});var t=n(7294);const i={},d=t.createContext(i);function r(e){const o=t.useContext(d);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(d.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/950718c7.6c460a57.js b/assets/js/950718c7.6c460a57.js deleted file mode 100644 index 97fd2c07e..000000000 --- a/assets/js/950718c7.6c460a57.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1796],{4137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t =0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=o.createContext({}),d=function(e){var t=o.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=d(e.components);return o.createElement(c.Provider,{value:t},e.children)},l="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,c=e.parentName,u=p(e,["components","mdxType","originalType","parentName"]),l=d(n),m=r,h=l["".concat(c,".").concat(m)]||l[m]||s[m]||a;return n?o.createElement(h,i(i({ref:t},u),{},{components:n})):o.createElement(h,i({ref:t},u))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=m;var p={};for(var c in t)hasOwnProperty.call(t,c)&&(p[c]=t[c]);p.originalType=e,p[l]="string"==typeof e?e:r,i[1]=p;for(var d=2;d{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>s,frontMatter:()=>a,metadata:()=>p,toc:()=>d});var o=n(7462),r=(n(7294),n(4137));const a={sidebar_label:"Introduction"},i="Welcome to the Developer Documentation!",p={unversionedId:"dev",id:"dev",title:"Welcome to the Developer Documentation!",description:"Welcome to the Dappnode's developer docs! This documentation is your comprehensive guide to using the tools and resources that enable you to create, deploy, and manage your own custom dappnode packages (DNP). Whether you're new to the project or an experienced developer, this documentation will help you navigate the intricacies of developing in the dappnode environment.",source:"@site/docs/dev.md",sourceDirName:".",slug:"/dev",permalink:"/docs/dev",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev.md",tags:[],version:"current",frontMatter:{sidebar_label:"Introduction"},sidebar:"devSidebar",next:{title:"DappnodeSDK",permalink:"/docs/dev/sdk/overview"}},c={},d=[{value:"Contributing",id:"contributing",level:2},{value:"Feedback and Support",id:"feedback-and-support",level:2}],u={toc:d},l="wrapper";function s(e){let{components:t,...n}=e;return(0,r.kt)(l,(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"welcome-to-the-developer-documentation"},"Welcome to the Developer Documentation!"),(0,r.kt)("p",null,"Welcome to the Dappnode's developer docs! This documentation is your comprehensive guide to using the tools and resources that enable you to create, deploy, and manage your own custom dappnode packages (DNP). Whether you're new to the project or an experienced developer, this documentation will help you navigate the intricacies of developing in the dappnode environment."),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"This documentation is for experienced people in the dappnode ecosystem or developers who want to contribute to dappnode by creating new packages. If you're new to dappnode, we recommend starting with the ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/getting-started/choose-your-path"},"User Documentation"),".")),(0,r.kt)("h2",{id:"contributing"},"Contributing"),(0,r.kt)("p",null,"We welcome contributions from the community! If you'd like to contribute to Dappnode, please review our ","[Contributing Guidelines]"," to understand how you can get involved."),(0,r.kt)("h2",{id:"feedback-and-support"},"Feedback and Support"),(0,r.kt)("p",null,"We're here to help! If you encounter any issues, have questions, or want to provide feedback, feel free to:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Join our community on ",(0,r.kt)("a",{parentName:"li",href:"https://discord.com/invite/dappnode"},"Discord")),(0,r.kt)("li",{parentName:"ul"},"Open an issue on ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/dappnode"},"GitHub"))))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9e4087bc.5de22c6a.js b/assets/js/9e4087bc.5de22c6a.js deleted file mode 100644 index d44809dad..000000000 --- a/assets/js/9e4087bc.5de22c6a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3608],{8151:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});var r=a(7294),l=a(3699),n=a(7325),c=a(5463),m=a(1009);function s(e){let{year:t,posts:a}=e;return r.createElement(r.Fragment,null,r.createElement("h3",null,t),r.createElement("ul",null,a.map((e=>r.createElement("li",{key:e.metadata.date},r.createElement(l.Z,{to:e.metadata.permalink},e.metadata.formattedDate," - ",e.metadata.title))))))}function i(e){let{years:t}=e;return r.createElement("section",{className:"margin-vert--lg"},r.createElement("div",{className:"container"},r.createElement("div",{className:"row"},t.map(((e,t)=>r.createElement("div",{key:t,className:"col col--4 margin-vert--lg"},r.createElement(s,e)))))))}function o(e){let{archive:t}=e;const a=(0,n.I)({id:"theme.blog.archive.title",message:"Archive",description:"The page & hero title of the blog archive page"}),l=(0,n.I)({id:"theme.blog.archive.description",message:"Archive",description:"The page & hero description of the blog archive page"}),s=function(e){const t=e.reduceRight(((e,t)=>{const a=t.metadata.date.split("-")[0],r=e.get(a)??[];return e.set(a,[t,...r])}),new Map);return Array.from(t,(e=>{let[t,a]=e;return{year:t,posts:a}}))}(t.blogPosts);return r.createElement(r.Fragment,null,r.createElement(c.d,{title:a,description:l}),r.createElement(m.Z,null,r.createElement("header",{className:"hero hero--primary"},r.createElement("div",{className:"container"},r.createElement("h1",{className:"hero__title"},a),r.createElement("p",{className:"hero__subtitle"},l))),r.createElement("main",null,s.length>0&&r.createElement(i,{years:s}))))}}}]); \ No newline at end of file diff --git a/assets/js/9e4087bc.e74391c6.js b/assets/js/9e4087bc.e74391c6.js new file mode 100644 index 000000000..5c2650bcf --- /dev/null +++ b/assets/js/9e4087bc.e74391c6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3608],{3169:(e,s,a)=>{a.r(s),a.d(s,{default:()=>o});a(7294);var r=a(9960),t=a(5999),i=a(1944),n=a(179),c=a(2503),l=a(5893);function d(e){let{year:s,posts:a}=e;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c.Z,{as:"h3",id:s,children:s}),(0,l.jsx)("ul",{children:a.map((e=>(0,l.jsx)("li",{children:(0,l.jsxs)(r.Z,{to:e.metadata.permalink,children:[e.metadata.formattedDate," - ",e.metadata.title]})},e.metadata.date)))})]})}function h(e){let{years:s}=e;return(0,l.jsx)("section",{className:"margin-vert--lg",children:(0,l.jsx)("div",{className:"container",children:(0,l.jsx)("div",{className:"row",children:s.map(((e,s)=>(0,l.jsx)("div",{className:"col col--4 margin-vert--lg",children:(0,l.jsx)(d,{...e})},s)))})})})}function o(e){let{archive:s}=e;const a=(0,t.I)({id:"theme.blog.archive.title",message:"Archive",description:"The page & hero title of the blog archive page"}),r=(0,t.I)({id:"theme.blog.archive.description",message:"Archive",description:"The page & hero description of the blog archive page"}),d=function(e){const s=e.reduce(((e,s)=>{const a=s.metadata.date.split("-")[0],r=e.get(a)??[];return e.set(a,[s,...r])}),new Map);return Array.from(s,(e=>{let[s,a]=e;return{year:s,posts:a}}))}(s.blogPosts);return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(i.d,{title:a,description:r}),(0,l.jsxs)(n.Z,{children:[(0,l.jsx)("header",{className:"hero hero--primary",children:(0,l.jsxs)("div",{className:"container",children:[(0,l.jsx)(c.Z,{as:"h1",className:"hero__title",children:a}),(0,l.jsx)("p",{className:"hero__subtitle",children:r})]})}),(0,l.jsx)("main",{children:d.length>0&&(0,l.jsx)(h,{years:d})})]})]})}}}]); \ No newline at end of file diff --git a/assets/js/9e93dc42.067f400a.js b/assets/js/9e93dc42.067f400a.js deleted file mode 100644 index 733f12dfc..000000000 --- a/assets/js/9e93dc42.067f400a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[938],{4137:(e,t,n)=>{n.d(t,{Zo:()=>d,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 i(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 r(e){for(var t=1;t =0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},d=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=p(n),m=o,h=u["".concat(s,".").concat(m)]||u[m]||c[m]||i;return n?a.createElement(h,r(r({ref:t},d),{},{components:n})):a.createElement(h,r({ref:t},d))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,r=new Array(i);r[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,r[1]=l;for(var p=2;p{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var a=n(7462),o=(n(7294),n(4137));const i={},r="ISO Installation",l={unversionedId:"user/install/iso",id:"user/install/iso",title:"ISO Installation",description:"When you want to perform a clean installation by installing the base operating system and Dappnode. Installing from an ISO will wipe the machine data and install Dappnode over Debian.",source:"@site/docs/user/install/iso.md",sourceDirName:"user/install",slug:"/user/install/iso",permalink:"/docs/user/install/iso",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/install/iso.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Installation Overview",permalink:"/docs/user/install/overview"},next:{title:"Script installation",permalink:"/docs/user/install/script"}},s={},p=[{value:"Get the ISO",id:"get-the-iso",level:2},{value:"Burn the ISO in a USB",id:"burn-the-iso-in-a-usb",level:2},{value:"Boot from the USB",id:"boot-from-the-usb",level:2},{value:"Follow the Installation Prompts",id:"follow-the-installation-prompts",level:2},{value:"Final Steps",id:"final-steps",level:2}],d={toc:p},u="wrapper";function c(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"iso-installation"},"ISO Installation"),(0,o.kt)("p",null,"When you want to perform a clean installation by installing the base operating system and Dappnode. Installing from an ISO will wipe the machine data and install Dappnode over Debian."),(0,o.kt)("h2",{id:"get-the-iso"},"Get the ISO"),(0,o.kt)("p",null,"You can get the image downloading directly from ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/dappnode/Dappnode/releases"},"Dappnode ISO")," or if you prefer you can build it from the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/dappnode/Dappnode#install-dappnode-with-iso"},"source"),"."),(0,o.kt)("admonition",{title:"Attended VS Unattended ISO",type:"note"},(0,o.kt)("ul",{parentName:"admonition"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Attended ISO"),": An attended ISO installation involves a manual setup process where the user must be present to make choices, answer prompts, and guide the installation through its various stages. It provides more control over the configuration, allowing for customization based on specific needs.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Unattended ISO"),": The unattended ISO installation is an automated process where pre-defined settings are used to install Dappnode without user intervention. This is ideal for straightforward installations where default configurations are preferred. It speeds up the process and ensures consistency in the setup."))),(0,o.kt)("p",{parentName:"admonition"},"Consider your specific requirements and the level of customization you need when deciding between these two installation methods.")),(0,o.kt)("h2",{id:"burn-the-iso-in-a-usb"},"Burn the ISO in a USB"),(0,o.kt)("p",null,"Burn the ISO to an USB stick. To do so we recommend using ",(0,o.kt)("a",{parentName:"p",href:"https://www.balena.io/etcher/"},"Balena Etcher")," for the OS with which you will prepare the USB to boot from your server and install Dappnode."),(0,o.kt)("admonition",{type:"danger"},(0,o.kt)("p",{parentName:"admonition"},"If you trigger the installation in a machine containing data, all existing data will be erased.")),(0,o.kt)("h2",{id:"boot-from-the-usb"},"Boot from the USB"),(0,o.kt)("p",null,"After burning the ISO to the USB stick:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Insert")," the USB stick into the machine where you want to install Dappnode."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Reboot")," the machine."),(0,o.kt)("li",{parentName:"ol"},"During the boot process, access the ",(0,o.kt)("strong",{parentName:"li"},"boot menu")," (the key to press varies depending on the machine manufacturer; commonly used keys include F2, F10, F12, ESC, or DEL)."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Select")," the USB stick as the boot device.")),(0,o.kt)("p",null,"The machine should now boot from the USB, and you'll see the Dappnode installation interface."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Make sure that an Ethernet cable is plugged in to your device during the installation process, otherwise it will fail.")),(0,o.kt)("h2",{id:"follow-the-installation-prompts"},"Follow the Installation Prompts"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"If you've chosen the ",(0,o.kt)("strong",{parentName:"li"},"Attended ISO"),", you'll be presented with a series of prompts asking for configuration details and preferences. Follow the on-screen instructions and provide the necessary input to proceed."),(0,o.kt)("li",{parentName:"ul"},"If you've opted for the ",(0,o.kt)("strong",{parentName:"li"},"Unattended ISO"),", the installation will proceed automatically, using predefined settings.")),(0,o.kt)("admonition",{title:"Default Credentials",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"If you're using the Unattended ISO, the default credentials are:"),(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("strong",{parentName:"p"},"user"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"dappnode")," "),(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("strong",{parentName:"p"},"pass"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"dappnode.s0"))),(0,o.kt)("h2",{id:"final-steps"},"Final Steps"),(0,o.kt)("p",null,"Once the installation is complete:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Remove")," the USB stick."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Reboot")," the machine (you might need to do this twice)"),(0,o.kt)("li",{parentName:"ol"},"On startup, Dappnode should be running. You can check it by executing ",(0,o.kt)("inlineCode",{parentName:"li"},"docker ps")," in the terminal and some of the ",(0,o.kt)("a",{parentName:"li",href:"/docs/user/install/dappnode-commands"},"Dappnode Commands")),(0,o.kt)("li",{parentName:"ol"},"Finally, you can begin the post-installation setup and configuration.")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Remember to keep your Dappnode running 24/7 for optimal performance, especially if you are hosting blockchain nodes or other continuous services.")),(0,o.kt)("p",null,"Congratulations! You've successfully installed Dappnode using the ISO method. For any further assistance or troubleshooting, always refer to the official Dappnode documentation or community support."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9e93dc42.edf13b8d.js b/assets/js/9e93dc42.edf13b8d.js new file mode 100644 index 000000000..1d43995a5 --- /dev/null +++ b/assets/js/9e93dc42.edf13b8d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[938],{6559:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>d});var i=t(5893),s=t(1151);const o={},l="ISO Installation",r={id:"user/install/iso",title:"ISO Installation",description:"When you want to perform a clean installation by installing the base operating system and Dappnode. Installing from an ISO will wipe the machine data and install Dappnode over Debian.",source:"@site/docs/user/install/iso.md",sourceDirName:"user/install",slug:"/user/install/iso",permalink:"/docs/user/install/iso",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/install/iso.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Installation Overview",permalink:"/docs/user/install/overview"},next:{title:"Script installation",permalink:"/docs/user/install/script"}},a={},d=[{value:"Get the ISO",id:"get-the-iso",level:2},{value:"Burn the ISO in a USB",id:"burn-the-iso-in-a-usb",level:2},{value:"Boot from the USB",id:"boot-from-the-usb",level:2},{value:"Follow the Installation Prompts",id:"follow-the-installation-prompts",level:2},{value:"Final Steps",id:"final-steps",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"iso-installation",children:"ISO Installation"}),"\n",(0,i.jsx)(n.p,{children:"When you want to perform a clean installation by installing the base operating system and Dappnode. Installing from an ISO will wipe the machine data and install Dappnode over Debian."}),"\n",(0,i.jsx)(n.h2,{id:"get-the-iso",children:"Get the ISO"}),"\n",(0,i.jsxs)(n.p,{children:["You can get the image downloading directly from ",(0,i.jsx)(n.a,{href:"https://github.com/dappnode/Dappnode/releases",children:"Dappnode ISO"})," or if you prefer you can build it from the ",(0,i.jsx)(n.a,{href:"https://github.com/dappnode/Dappnode#install-dappnode-with-iso",children:"source"}),"."]}),"\n",(0,i.jsxs)(n.admonition,{title:"Attended VS Unattended ISO",type:"note",children:[(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Attended ISO"}),": An attended ISO installation involves a manual setup process where the user must be present to make choices, answer prompts, and guide the installation through its various stages. It provides more control over the configuration, allowing for customization based on specific needs."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Unattended ISO"}),": The unattended ISO installation is an automated process where pre-defined settings are used to install Dappnode without user intervention. This is ideal for straightforward installations where default configurations are preferred. It speeds up the process and ensures consistency in the setup."]}),"\n"]}),"\n"]}),(0,i.jsx)(n.p,{children:"Consider your specific requirements and the level of customization you need when deciding between these two installation methods."})]}),"\n",(0,i.jsx)(n.h2,{id:"burn-the-iso-in-a-usb",children:"Burn the ISO in a USB"}),"\n",(0,i.jsxs)(n.p,{children:["Burn the ISO to an USB stick. To do so we recommend using ",(0,i.jsx)(n.a,{href:"https://www.balena.io/etcher/",children:"Balena Etcher"})," for the OS with which you will prepare the USB to boot from your server and install Dappnode."]}),"\n",(0,i.jsx)(n.admonition,{type:"danger",children:(0,i.jsx)(n.p,{children:"If you trigger the installation in a machine containing data, all existing data will be erased."})}),"\n",(0,i.jsx)(n.h2,{id:"boot-from-the-usb",children:"Boot from the USB"}),"\n",(0,i.jsx)(n.p,{children:"After burning the ISO to the USB stick:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Insert"})," the USB stick into the machine where you want to install Dappnode."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Reboot"})," the machine."]}),"\n",(0,i.jsxs)(n.li,{children:["During the boot process, access the ",(0,i.jsx)(n.strong,{children:"boot menu"})," (the key to press varies depending on the machine manufacturer; commonly used keys include F2, F10, F12, ESC, or DEL)."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Select"})," the USB stick as the boot device."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"The machine should now boot from the USB, and you'll see the Dappnode installation interface."}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"Make sure that an Ethernet cable is plugged in to your device during the installation process, otherwise it will fail."})}),"\n",(0,i.jsx)(n.h2,{id:"follow-the-installation-prompts",children:"Follow the Installation Prompts"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["If you've chosen the ",(0,i.jsx)(n.strong,{children:"Attended ISO"}),", you'll be presented with a series of prompts asking for configuration details and preferences. Follow the on-screen instructions and provide the necessary input to proceed."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["If you've opted for the ",(0,i.jsx)(n.strong,{children:"Unattended ISO"}),", the installation will proceed automatically, using predefined settings."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.admonition,{title:"Default Credentials",type:"tip",children:[(0,i.jsx)(n.p,{children:"If you're using the Unattended ISO, the default credentials are:"}),(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"user"}),": ",(0,i.jsx)(n.code,{children:"dappnode"})]}),(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"pass"}),": ",(0,i.jsx)(n.code,{children:"dappnode.s0"})]})]}),"\n",(0,i.jsx)(n.h2,{id:"final-steps",children:"Final Steps"}),"\n",(0,i.jsx)(n.p,{children:"Once the installation is complete:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Remove"})," the USB stick."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Reboot"})," the machine (you might need to do this twice)"]}),"\n",(0,i.jsxs)(n.li,{children:["On startup, Dappnode should be running. You can check it by executing ",(0,i.jsx)(n.code,{children:"docker ps"})," in the terminal and some of the ",(0,i.jsx)(n.a,{href:"/docs/user/install/dappnode-commands",children:"Dappnode Commands"})]}),"\n",(0,i.jsx)(n.li,{children:"Finally, you can begin the post-installation setup and configuration."}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"Remember to keep your Dappnode running 24/7 for optimal performance, especially if you are hosting blockchain nodes or other continuous services."})}),"\n",(0,i.jsx)(n.p,{children:"Congratulations! You've successfully installed Dappnode using the ISO method. For any further assistance or troubleshooting, always refer to the official Dappnode documentation or community support."})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>l});var i=t(7294);const s={},o=i.createContext(s);function l(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a33eb6a8.9d9a935e.js b/assets/js/a33eb6a8.9d9a935e.js new file mode 100644 index 000000000..b3d4272f7 --- /dev/null +++ b/assets/js/a33eb6a8.9d9a935e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3680],{7749:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var t=n(5893),i=n(1151);const r={},a="StakeWise",o={id:"user/staking/ethereum/lsd-pools/stakewise",title:"StakeWise",description:"---",source:"@site/docs/user/staking/ethereum/lsd-pools/stakewise.md",sourceDirName:"user/staking/ethereum/lsd-pools",slug:"/user/staking/ethereum/lsd-pools/stakewise",permalink:"/docs/user/staking/ethereum/lsd-pools/stakewise",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/ethereum/lsd-pools/stakewise.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Rocketpool",permalink:"/docs/user/staking/ethereum/lsd-pools/rocketpool"},next:{title:"Stakehouse",permalink:"/docs/user/staking/ethereum/lsd-pools/stakehouse"}},l={},d=[{value:"StakeWise Overview",id:"stakewise-overview",level:3},{value:"Package Key Features",id:"package-key-features",level:3},{value:"First Steps to Start Staking with StakeWise and Dappnode",id:"first-steps-to-start-staking-with-stakewise-and-dappnode",level:3}];function c(e){const s={h1:"h1",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"stakewise",children:"StakeWise"}),"\n",(0,t.jsx)(s.hr,{}),"\n",(0,t.jsx)(s.h3,{id:"stakewise-overview",children:(0,t.jsx)(s.strong,{children:"StakeWise Overview"})}),"\n",(0,t.jsx)(s.p,{children:"StakeWise is an LSD network service that allows anyone to benefit from the yields available on the Ethereum Beacon Chain. StakeWise runs secure and stable institutional-grade infrastructure, combined with unique tokenomics, to provide the highest possible staking yields for its users. As a liquid staking platform, users are free to un-stake at any time or utilise their staked ETH capital to earn enhanced yields throughout DeFi. There is no minimum ETH requirement to stake with StakeWise and the platform fees are the lowest seen across the industry."}),"\n",(0,t.jsx)(s.hr,{}),"\n",(0,t.jsx)(s.h3,{id:"package-key-features",children:(0,t.jsx)(s.strong,{children:"Package Key Features"})}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"Solo and Pooled Staking:"})," StakeWise allows users the flexibility to choose between solo staking and joining a staking pool."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"Tokenized Staking Rewards:"})," StakeWise tokenizes staking rewards, which users can trade, providing liquidity and flexibility."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"Comprehensive Dashboard:"})," Users have access to a detailed dashboard that displays staking performance, rewards, and other essential metrics."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"Transparent Fee Structure:"})," StakeWise prides itself on transparent fees with no hidden charges, ensuring users retain maximum rewards."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"Integrated with DappNode:"})," Easy setup, monitoring, and management of StakeWise directly from your DappNode interface."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"Active Community Engagement:"})," StakeWise boasts an active community, ensuring users get timely support and updates."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.hr,{}),"\n",(0,t.jsx)(s.h3,{id:"first-steps-to-start-staking-with-stakewise-and-dappnode",children:(0,t.jsx)(s.strong,{children:"First Steps to Start Staking with StakeWise and Dappnode"})}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Package Installation:"})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Go to the DappNode Admin UI."}),"\n",(0,t.jsx)(s.li,{children:"In the 'Packages' section, search for the StakeWise package."}),"\n",(0,t.jsx)(s.li,{children:"Click 'Install'. Once installed, StakeWise should appear in your installed packages list."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Setting up the Environment:"})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Ensure you have connected your DappNode to the Ethereum network."}),"\n",(0,t.jsx)(s.li,{children:"For best results, secure a stable and fast internet connection for your DappNode."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Beginning the Staking Process:"})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Navigate to the StakeWise dashboard in the DappNode UI."}),"\n",(0,t.jsx)(s.li,{children:"Decide between solo staking or joining a staking pool."}),"\n",(0,t.jsx)(s.li,{children:"Specify the amount of ETH you wish to stake."}),"\n",(0,t.jsx)(s.li,{children:"Follow the on-screen instructions to initiate your staking."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Funding your Staking:"})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Transfer your chosen ETH amount to the provided staking address. Be sure to safely store and remember this address."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Monitoring and Management:"})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"With staking active, use the StakeWise dashboard on DappNode to oversee performance, track rewards, and manage other staking aspects."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.hr,{}),"\n",(0,t.jsx)(s.p,{children:"Staking on Ethereum 2.0, though potentially profitable, isn't without risks. While StakeWise makes the process user-friendly, it's vital to understand all potential implications and prioritize your investments' security."}),"\n",(0,t.jsx)(s.p,{children:"For more in-depth insights and assistance, consider exploring StakeWise's official documentation and joining the discussions on DappNode's community forums."})]})}function h(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},1151:(e,s,n)=>{n.d(s,{Z:()=>o,a:()=>a});var t=n(7294);const i={},r=t.createContext(i);function a(e){const s=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a33eb6a8.d90f5bc3.js b/assets/js/a33eb6a8.d90f5bc3.js deleted file mode 100644 index 48bf4c612..000000000 --- a/assets/js/a33eb6a8.d90f5bc3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3680],{4137:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>m});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t =0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},k="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,s=e.originalType,l=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),k=p(a),c=r,m=k["".concat(l,".").concat(c)]||k[c]||d[c]||s;return a?n.createElement(m,i(i({ref:t},u),{},{components:a})):n.createElement(m,i({ref:t},u))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=a.length,i=new Array(s);i[0]=c;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o[k]="string"==typeof e?e:r,i[1]=o;for(var p=2;p {a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>p});var n=a(7462),r=(a(7294),a(4137));const s={},i="StakeWise",o={unversionedId:"user/staking/ethereum/lsd-pools/stakewise",id:"user/staking/ethereum/lsd-pools/stakewise",title:"StakeWise",description:"---",source:"@site/docs/user/staking/ethereum/lsd-pools/stakewise.md",sourceDirName:"user/staking/ethereum/lsd-pools",slug:"/user/staking/ethereum/lsd-pools/stakewise",permalink:"/docs/user/staking/ethereum/lsd-pools/stakewise",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/ethereum/lsd-pools/stakewise.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Rocketpool",permalink:"/docs/user/staking/ethereum/lsd-pools/rocketpool"},next:{title:"Stakehouse",permalink:"/docs/user/staking/ethereum/lsd-pools/stakehouse"}},l={},p=[{value:"StakeWise Overview",id:"stakewise-overview",level:3},{value:"Package Key Features",id:"package-key-features",level:3},{value:"First Steps to Start Staking with StakeWise and Dappnode",id:"first-steps-to-start-staking-with-stakewise-and-dappnode",level:3}],u={toc:p},k="wrapper";function d(e){let{components:t,...a}=e;return(0,r.kt)(k,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"stakewise"},"StakeWise"),(0,r.kt)("hr",null),(0,r.kt)("h3",{id:"stakewise-overview"},(0,r.kt)("strong",{parentName:"h3"},"StakeWise Overview")),(0,r.kt)("p",null,"StakeWise is an LSD network service that allows anyone to benefit from the yields available on the Ethereum Beacon Chain. StakeWise runs secure and stable institutional-grade infrastructure, combined with unique tokenomics, to provide the highest possible staking yields for its users. As a liquid staking platform, users are free to un-stake at any time or utilise their staked ETH capital to earn enhanced yields throughout DeFi. There is no minimum ETH requirement to stake with StakeWise and the platform fees are the lowest seen across the industry."),(0,r.kt)("hr",null),(0,r.kt)("h3",{id:"package-key-features"},(0,r.kt)("strong",{parentName:"h3"},"Package Key Features")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Solo and Pooled Staking:")," StakeWise allows users the flexibility to choose between solo staking and joining a staking pool."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Tokenized Staking Rewards:")," StakeWise tokenizes staking rewards, which users can trade, providing liquidity and flexibility."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Comprehensive Dashboard:")," Users have access to a detailed dashboard that displays staking performance, rewards, and other essential metrics."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Transparent Fee Structure:")," StakeWise prides itself on transparent fees with no hidden charges, ensuring users retain maximum rewards."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Integrated with DappNode:")," Easy setup, monitoring, and management of StakeWise directly from your DappNode interface."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Active Community Engagement:")," StakeWise boasts an active community, ensuring users get timely support and updates.")),(0,r.kt)("hr",null),(0,r.kt)("h3",{id:"first-steps-to-start-staking-with-stakewise-and-dappnode"},(0,r.kt)("strong",{parentName:"h3"},"First Steps to Start Staking with StakeWise and Dappnode")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Package Installation:")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Go to the DappNode Admin UI."),(0,r.kt)("li",{parentName:"ul"},"In the 'Packages' section, search for the StakeWise package."),(0,r.kt)("li",{parentName:"ul"},"Click 'Install'. Once installed, StakeWise should appear in your installed packages list."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Setting up the Environment:")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Ensure you have connected your DappNode to the Ethereum network."),(0,r.kt)("li",{parentName:"ul"},"For best results, secure a stable and fast internet connection for your DappNode."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Beginning the Staking Process:")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Navigate to the StakeWise dashboard in the DappNode UI."),(0,r.kt)("li",{parentName:"ul"},"Decide between solo staking or joining a staking pool."),(0,r.kt)("li",{parentName:"ul"},"Specify the amount of ETH you wish to stake."),(0,r.kt)("li",{parentName:"ul"},"Follow the on-screen instructions to initiate your staking."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Funding your Staking:")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Transfer your chosen ETH amount to the provided staking address. Be sure to safely store and remember this address."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Monitoring and Management:")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"With staking active, use the StakeWise dashboard on DappNode to oversee performance, track rewards, and manage other staking aspects.")))),(0,r.kt)("hr",null),(0,r.kt)("p",null,"Staking on Ethereum 2.0, though potentially profitable, isn't without risks. While StakeWise makes the process user-friendly, it's vital to understand all potential implications and prioritize your investments' security."),(0,r.kt)("p",null,"For more in-depth insights and assistance, consider exploring StakeWise's official documentation and joining the discussions on DappNode's community forums."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a6aa9e1f.7f9a3445.js b/assets/js/a6aa9e1f.7f9a3445.js deleted file mode 100644 index 0ed4eef94..000000000 --- a/assets/js/a6aa9e1f.7f9a3445.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3089],{9928:(e,t,a)=>{a.r(t),a.d(t,{default:()=>u});var n=a(7294),l=a(6010),r=a(9962),i=a(5463),o=a(3702),s=a(2506),c=a(2568),m=a(3647),p=a(8389);function g(e){const{metadata:t}=e,{siteConfig:{title:a}}=(0,r.Z)(),{blogDescription:l,blogTitle:o,permalink:s}=t,c="/"===s?a:o;return n.createElement(n.Fragment,null,n.createElement(i.d,{title:c,description:l}),n.createElement(m.Z,{tag:"blog_posts_list"}))}function d(e){const{metadata:t,items:a,sidebar:l}=e;return n.createElement(s.Z,{sidebar:l},n.createElement(p.Z,{items:a}),n.createElement(c.Z,{metadata:t}))}function u(e){return n.createElement(i.FG,{className:(0,l.Z)(o.k.wrapper.blogPages,o.k.page.blogListPage)},n.createElement(g,e),n.createElement(d,e))}},2568:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(7294),l=a(7325),r=a(3672);function i(e){const{metadata:t}=e,{previousPage:a,nextPage:i}=t;return n.createElement("nav",{className:"pagination-nav","aria-label":(0,l.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"})},a&&n.createElement(r.Z,{permalink:a,title:n.createElement(l.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)"},"Newer Entries")}),i&&n.createElement(r.Z,{permalink:i,title:n.createElement(l.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)"},"Older Entries"),isNext:!0}))}},8389:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(7294),l=a(9107),r=a(1116);function i(e){let{items:t,component:a=r.Z}=e;return n.createElement(n.Fragment,null,t.map((e=>{let{content:t}=e;return n.createElement(l.n,{key:t.metadata.permalink,content:t},n.createElement(a,null,n.createElement(t,null)))})))}}}]); \ No newline at end of file diff --git a/assets/js/a6aa9e1f.a18e22ce.js b/assets/js/a6aa9e1f.a18e22ce.js new file mode 100644 index 000000000..4189ac137 --- /dev/null +++ b/assets/js/a6aa9e1f.a18e22ce.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3089],{46:(e,t,a)=>{a.r(t),a.d(t,{default:()=>h});a(7294);var n=a(6010),s=a(2263),i=a(1944),r=a(5281),o=a(1460),l=a(9703),d=a(197),p=a(9985),g=a(5893);function c(e){const{metadata:t}=e,{siteConfig:{title:a}}=(0,s.Z)(),{blogDescription:n,blogTitle:r,permalink:o}=t,l="/"===o?a:r;return(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(i.d,{title:l,description:n}),(0,g.jsx)(d.Z,{tag:"blog_posts_list"})]})}function m(e){const{metadata:t,items:a,sidebar:n}=e;return(0,g.jsxs)(o.Z,{sidebar:n,children:[(0,g.jsx)(p.Z,{items:a}),(0,g.jsx)(l.Z,{metadata:t})]})}function h(e){return(0,g.jsxs)(i.FG,{className:(0,n.Z)(r.k.wrapper.blogPages,r.k.page.blogListPage),children:[(0,g.jsx)(c,{...e}),(0,g.jsx)(m,{...e})]})}},9703:(e,t,a)=>{a.d(t,{Z:()=>r});a(7294);var n=a(5999),s=a(2244),i=a(5893);function r(e){const{metadata:t}=e,{previousPage:a,nextPage:r}=t;return(0,i.jsxs)("nav",{className:"pagination-nav","aria-label":(0,n.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[a&&(0,i.jsx)(s.Z,{permalink:a,title:(0,i.jsx)(n.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer Entries"})}),r&&(0,i.jsx)(s.Z,{permalink:r,title:(0,i.jsx)(n.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older Entries"}),isNext:!0})]})}},9985:(e,t,a)=>{a.d(t,{Z:()=>r});a(7294);var n=a(9460),s=a(390),i=a(5893);function r(e){let{items:t,component:a=s.Z}=e;return(0,i.jsx)(i.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,i.jsx)(n.n,{content:t,children:(0,i.jsx)(a,{children:(0,i.jsx)(t,{})})},t.metadata.permalink)}))})}}}]); \ No newline at end of file diff --git a/assets/js/a7bd4aaa.66954c82.js b/assets/js/a7bd4aaa.66954c82.js new file mode 100644 index 000000000..61f5f82c3 --- /dev/null +++ b/assets/js/a7bd4aaa.66954c82.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8518],{8564:(n,e,s)=>{s.r(e),s.d(e,{default:()=>l});s(7294);var o=s(1944),r=s(3320),t=s(4477),c=s(8790),d=s(197),i=s(5893);function a(n){const{version:e}=n;return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(d.Z,{version:e.version,tag:(0,r.os)(e.pluginId,e.version)}),(0,i.jsx)(o.d,{children:e.noIndex&&(0,i.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function u(n){const{version:e,route:s}=n;return(0,i.jsx)(o.FG,{className:e.className,children:(0,i.jsx)(t.q,{version:e,children:(0,c.H)(s.routes)})})}function l(n){return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a,{...n}),(0,i.jsx)(u,{...n})]})}}}]); \ No newline at end of file diff --git a/assets/js/a80da1cf.5e2a619b.js b/assets/js/a80da1cf.da804b84.js similarity index 77% rename from assets/js/a80da1cf.5e2a619b.js rename to assets/js/a80da1cf.da804b84.js index c912c5e19..8c4f6b388 100644 --- a/assets/js/a80da1cf.5e2a619b.js +++ b/assets/js/a80da1cf.da804b84.js @@ -1 +1 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3205],{4863:s=>{s.exports=JSON.parse('{"label":"docusaurus","permalink":"/blog/tags/docusaurus","allTagsPath":"/blog/tags","count":4}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3205],{4863:s=>{s.exports=JSON.parse('{"label":"docusaurus","permalink":"/blog/tags/docusaurus","allTagsPath":"/blog/tags","count":4,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/a83bdfda.327f0737.js b/assets/js/a83bdfda.327f0737.js deleted file mode 100644 index 3be9d2e94..000000000 --- a/assets/js/a83bdfda.327f0737.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8769],{4137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),p=l(n),m=a,f=p["".concat(c,".").concat(m)]||p[m]||u[m]||o;return n?r.createElement(f,i(i({ref:t},d),{},{components:n})):r.createElement(f,i({ref:t},d))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=m;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[p]="string"==typeof e?e:a,i[1]=s;for(var l=2;l {n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var r=n(7462),a=(n(7294),n(4137));const o={title:"Dappnode DAO FAQ"},i=void 0,s={unversionedId:"dao/faq",id:"dao/faq",title:"Dappnode DAO FAQ",description:"What is a DAO?",source:"@site/docs/dao/faq.md",sourceDirName:"dao",slug:"/dao/faq",permalink:"/docs/dao/faq",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dao/faq.md",tags:[],version:"current",frontMatter:{title:"Dappnode DAO FAQ"},sidebar:"daoSidebar",previous:{title:"Liquidity Mining",permalink:"/docs/dao/liquidity-mining"}},c={},l=[],d={toc:l},p="wrapper";function u(e){let{components:t,...n}=e;return(0,a.kt)(p,(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("details",null,(0,a.kt)("summary",null,(0,a.kt)("b",null,"What is a DAO?")),(0,a.kt)("p",null,"A DAO, or Decentralized Autonomous Organization, is an organization represented by rules encoded as a computer program that is transparent, controlled by the organization members, and not influenced by a centralized government. It operates autonomously and can execute actions such as making decisions and managing resources based on pre-defined rules or through a consensus mechanism.")),(0,a.kt)("details",null,(0,a.kt)("summary",null,(0,a.kt)("b",null,"What is the purpose and mission of the Dappnode DAO?")," "),(0,a.kt)("p",null,"DappNode's DAO aims to promote and simplify the use of decentralized infrastructure. It aspires to create a more decentralized web by providing tools that make running nodes, DApps, and blockchain-related software more user-friendly and accessible to a wider audience. By establishing a DAO, DappNode ensures that its mission and direction are decided collectively by its community, allowing for a more democratic and transparent decision-making process. The DappNode DAO encourages collaboration, fostering a community that is actively involved in the project's evolution, and ensuring the sustainability and success of the platform in the decentralized space.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a83bdfda.5639167b.js b/assets/js/a83bdfda.5639167b.js new file mode 100644 index 000000000..cb9d02e65 --- /dev/null +++ b/assets/js/a83bdfda.5639167b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8769],{9618:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>l,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var o=t(5893),a=t(1151);const i={title:"Dappnode DAO FAQ"},s=void 0,r={id:"dao/faq",title:"Dappnode DAO FAQ",description:"What is a DAO?",source:"@site/docs/dao/faq.md",sourceDirName:"dao",slug:"/dao/faq",permalink:"/docs/dao/faq",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dao/faq.md",tags:[],version:"current",frontMatter:{title:"Dappnode DAO FAQ"},sidebar:"daoSidebar",previous:{title:"Liquidity Mining",permalink:"/docs/dao/liquidity-mining"}},d={},c=[];function p(e){const n={p:"p",...(0,a.a)(),...e.components},{Details:t}=n;return t||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(t,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("b",{children:"What is a DAO?"})}),(0,o.jsx)(n.p,{children:"A DAO, or Decentralized Autonomous Organization, is an organization represented by rules encoded as a computer program that is transparent, controlled by the organization members, and not influenced by a centralized government. It operates autonomously and can execute actions such as making decisions and managing resources based on pre-defined rules or through a consensus mechanism."})]}),"\n",(0,o.jsxs)(t,{children:[(0,o.jsxs)("summary",{children:[(0,o.jsx)("b",{children:"What is the purpose and mission of the Dappnode DAO?"})," "]}),(0,o.jsx)(n.p,{children:"DappNode's DAO aims to promote and simplify the use of decentralized infrastructure. It aspires to create a more decentralized web by providing tools that make running nodes, DApps, and blockchain-related software more user-friendly and accessible to a wider audience. By establishing a DAO, DappNode ensures that its mission and direction are decided collectively by its community, allowing for a more democratic and transparent decision-making process. The DappNode DAO encourages collaboration, fostering a community that is actively involved in the project's evolution, and ensuring the sustainability and success of the platform in the decentralized space."})]})]})}function l(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(p,{...e})}):p(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>s});var o=t(7294);const a={},i=o.createContext(a);function s(e){const n=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a9241739.a6af1d30.js b/assets/js/a9241739.a6af1d30.js deleted file mode 100644 index cd1fed249..000000000 --- a/assets/js/a9241739.a6af1d30.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3295],{4137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t =0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=c(n),m=o,h=p["".concat(l,".").concat(m)]||p[m]||d[m]||i;return n?r.createElement(h,a(a({ref:t},u),{},{components:n})):r.createElement(h,a({ref:t},u))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:o,a[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var r=n(7462),o=(n(7294),n(4137));const i={},a="Troubleshooting",s={unversionedId:"user/ethical-metrics/troubleshooting",id:"user/ethical-metrics/troubleshooting",title:"Troubleshooting",description:"Experiencing trouble when setting your notifications up? Check this FAQ. If your issue isn't listed, please pay us a visit in the Dappnode Discord and we'll be happy to assist you!",source:"@site/docs/user/ethical-metrics/troubleshooting.md",sourceDirName:"user/ethical-metrics",slug:"/user/ethical-metrics/troubleshooting",permalink:"/docs/user/ethical-metrics/troubleshooting",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/ethical-metrics/troubleshooting.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Metrics Collected by Ethical Metrics",permalink:"/docs/user/ethical-metrics/metrics"},next:{title:"What is Dappnode Cloud?",permalink:"/docs/user/dappnode-cloud/overview"}},l={},c=[],u={toc:c},p="wrapper";function d(e){let{components:t,...n}=e;return(0,o.kt)(p,(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"troubleshooting"},"Troubleshooting"),(0,o.kt)("p",null,"Experiencing trouble when setting your notifications up? Check this FAQ. If your issue isn't listed, please pay us a visit in the ",(0,o.kt)("a",{parentName:"p",href:"https://discord.gg/dappnode"},"Dappnode Discord")," and we'll be happy to assist you!"),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("strong",null,"How can I make sure my Dappnode is registered?")),(0,o.kt)("b",null,"Email:")," Upon registering, an email will be sent to your configured email address. If you don't receive this email, please check your spam folder. ",(0,o.kt)("br",null),(0,o.kt)("b",null,"Telegram:"),' Once your bot has been set up, you can press the "Send Test Notification" button to see if everything is working as expected.'),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("strong",null,'How can I test a "Dappnode down" notification?')),'There are various ways to test a "Dappnode down" notification. The easiest way is to stop your Dappnode temporarily, but you can also test it by stopping the "Prometheus" service of your Ethical Metrics package. After an hour, you should receive a "Dappnode down" notification in your Email and/or Telegram.'),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("strong",null,"How can I unregister from the Ethical Metrics monitoring system?")),(0,o.kt)("p",null,(0,o.kt)("strong",null," 1. Using the Dappnode Interface:")," From the active Dappnode, simply navigate to ",(0,o.kt)("a",{href:"http://my.dappnode/system/notifications"},"System > Notifications")," and toggle off ",(0,o.kt)("b",null,"Ethical Metrics"),". This will stop all notifications and halt metric collection from your Dappnode. As long as Ethical Metrics notifications are enabled in the Dappnode UI, your device remains registered in our monitoring system."),(0,o.kt)("p",null,(0,o.kt)("strong",null,"2. For Inactive Dappnodes:")," If your Dappnode is no longer accessible, locate the ",(0,o.kt)("b",null,"unregister link")," in the welcome email you received upon registration. Keep in mind that using this method won't employ our IP hiding measures, but you can enhance security using tools like a VPN. Please keep in mind that if your Dappnode is still up and running with Ethical Metrics notifications turned on, it'll register again by itself."),(0,o.kt)("p",null,(0,o.kt)("strong",null,"3. Manual Unregistration:")," Lost the welcome email? You can also unregister by inputting the following URL into your browser: ",(0,o.kt)("code",null,"https://ethical-metrics.dappnode.io/unregister-from-email/?instance=",(0,o.kt)("i",null,"YOUR_INSTANCE"),".onion%3A9090"),". Make sure to replace ",(0,o.kt)("i",null,"YOUR_INSTANCE"),' with the unique identifier for your Dappnode, excluding ".onion:9090", which is already included in the provided URL.')))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a9241739.f087813d.js b/assets/js/a9241739.f087813d.js new file mode 100644 index 000000000..f89120004 --- /dev/null +++ b/assets/js/a9241739.f087813d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3295],{5137:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>p,frontMatter:()=>s,metadata:()=>a,toc:()=>l});var n=i(5893),o=i(1151);const s={},r="Troubleshooting",a={id:"user/ethical-metrics/troubleshooting",title:"Troubleshooting",description:"Experiencing trouble when setting your notifications up? Check this FAQ. If your issue isn't listed, please pay us a visit in the Dappnode Discord and we'll be happy to assist you!",source:"@site/docs/user/ethical-metrics/troubleshooting.md",sourceDirName:"user/ethical-metrics",slug:"/user/ethical-metrics/troubleshooting",permalink:"/docs/user/ethical-metrics/troubleshooting",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/ethical-metrics/troubleshooting.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Metrics Collected by Ethical Metrics",permalink:"/docs/user/ethical-metrics/metrics"},next:{title:"What is Dappnode Cloud?",permalink:"/docs/user/dappnode-cloud/overview"}},c={},l=[];function d(e){const t={a:"a",h1:"h1",p:"p",...(0,o.a)(),...e.components},{Details:i}=t;return i||function(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,n.jsxs)(t.p,{children:["Experiencing trouble when setting your notifications up? Check this FAQ. If your issue isn't listed, please pay us a visit in the ",(0,n.jsx)(t.a,{href:"https://discord.gg/dappnode",children:"Dappnode Discord"})," and we'll be happy to assist you!"]}),"\n",(0,n.jsxs)(i,{children:[(0,n.jsx)("summary",{children:(0,n.jsx)("strong",{children:"How can I make sure my Dappnode is registered?"})}),(0,n.jsxs)(t.p,{children:[(0,n.jsx)("b",{children:"Email:"})," Upon registering, an email will be sent to your configured email address. If you don't receive this email, please check your spam folder. ",(0,n.jsx)("br",{})]}),(0,n.jsxs)(t.p,{children:[(0,n.jsx)("b",{children:"Telegram:"}),' Once your bot has been set up, you can press the "Send Test Notification" button to see if everything is working as expected.']})]}),"\n",(0,n.jsxs)(i,{children:[(0,n.jsx)("summary",{children:(0,n.jsx)("strong",{children:'How can I test a "Dappnode down" notification?'})}),(0,n.jsx)(t.p,{children:'There are various ways to test a "Dappnode down" notification. The easiest way is to stop your Dappnode temporarily, but you can also test it by stopping the "Prometheus" service of your Ethical Metrics package. After an hour, you should receive a "Dappnode down" notification in your Email and/or Telegram.'})]}),"\n",(0,n.jsxs)(i,{children:[(0,n.jsx)("summary",{children:(0,n.jsx)("strong",{children:"How can I unregister from the Ethical Metrics monitoring system?"})}),(0,n.jsxs)("p",{children:[(0,n.jsx)("strong",{children:" 1. Using the Dappnode Interface:"})," From the active Dappnode, simply navigate to ",(0,n.jsx)("a",{href:"http://my.dappnode/system/notifications",children:"System > Notifications"})," and toggle off ",(0,n.jsx)("b",{children:"Ethical Metrics"}),". This will stop all notifications and halt metric collection from your Dappnode. As long as Ethical Metrics notifications are enabled in the Dappnode UI, your device remains registered in our monitoring system."]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("strong",{children:"2. For Inactive Dappnodes:"})," If your Dappnode is no longer accessible, locate the ",(0,n.jsx)("b",{children:"unregister link"})," in the welcome email you received upon registration. Keep in mind that using this method won't employ our IP hiding measures, but you can enhance security using tools like a VPN. Please keep in mind that if your Dappnode is still up and running with Ethical Metrics notifications turned on, it'll register again by itself."]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("strong",{children:"3. Manual Unregistration:"})," Lost the welcome email? You can also unregister by inputting the following URL into your browser: ",(0,n.jsxs)("code",{children:[(0,n.jsx)(t.a,{href:"https://ethical-metrics.dappnode.io/unregister-from-email/?instance=",children:"https://ethical-metrics.dappnode.io/unregister-from-email/?instance="}),(0,n.jsx)("i",{children:"YOUR_INSTANCE"}),".onion%3A9090"]}),". Make sure to replace ",(0,n.jsx)("i",{children:"YOUR_INSTANCE"}),' with the unique identifier for your Dappnode, excluding ".onion:9090", which is already included in the provided URL.']})]})]})}function p(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},1151:(e,t,i)=>{i.d(t,{Z:()=>a,a:()=>r});var n=i(7294);const o={},s=n.createContext(o);function r(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a94703ab.0206c29e.js b/assets/js/a94703ab.0206c29e.js new file mode 100644 index 000000000..7ec75ac74 --- /dev/null +++ b/assets/js/a94703ab.0206c29e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4368],{2674:(e,t,n)=>{n.r(t),n.d(t,{default:()=>be});var a=n(7294),o=n(6010),i=n(1944),s=n(5281),l=n(2802),r=n(1116),c=n(5999),d=n(2466),u=n(5936);const m={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};var b=n(5893);function h(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:s,cancelScroll:l}=(0,d.Ct)();return(0,d.RF)(((e,n)=>{let{scrollY:a}=e;const s=n?.scrollY;s&&(i.current?i.current=!1:a>=s?(l(),o(!1)):a {e.location.hash&&(i.current=!0,o(!1))})),{shown:n,scrollToTop:()=>s(0)}}({threshold:300});return(0,b.jsx)("button",{"aria-label":(0,c.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.Z)("clean-btn",s.k.common.backToTopButton,m.backToTopButton,e&&m.backToTopButtonShow),type:"button",onClick:t})}var p=n(1442),x=n(6550),f=n(7524),j=n(6668),_=n(1327);function k(e){return(0,b.jsx)("svg",{width:"20",height:"20","aria-hidden":"true",...e,children:(0,b.jsxs)("g",{fill:"#7a7a7a",children:[(0,b.jsx)("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),(0,b.jsx)("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})]})})}const v={collapseSidebarButton:"collapseSidebarButton_PEFL",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_kv0_"};function g(e){let{onClick:t}=e;return(0,b.jsx)("button",{type:"button",title:(0,c.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.Z)("button button--secondary button--outline",v.collapseSidebarButton),onClick:t,children:(0,b.jsx)(k,{className:v.collapseSidebarButtonIcon})})}var C=n(9689),S=n(902);const I=Symbol("EmptyContext"),N=a.createContext(I);function T(e){let{children:t}=e;const[n,o]=(0,a.useState)(null),i=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return(0,b.jsx)(N.Provider,{value:i,children:t})}var B=n(6043),Z=n(8596),A=n(9960),L=n(2389);function y(e){let{collapsed:t,categoryLabel:n,onClick:a}=e;return(0,b.jsx)("button",{"aria-label":t?(0,c.I)({id:"theme.DocSidebarItem.expandCategoryAriaLabel",message:"Expand sidebar category '{label}'",description:"The ARIA label to expand the sidebar category"},{label:n}):(0,c.I)({id:"theme.DocSidebarItem.collapseCategoryAriaLabel",message:"Collapse sidebar category '{label}'",description:"The ARIA label to collapse the sidebar category"},{label:n}),type:"button",className:"clean-btn menu__caret",onClick:a})}function w(e){let{item:t,onItemClick:n,activePath:i,level:r,index:c,...d}=e;const{items:u,label:m,collapsible:h,className:p,href:x}=t,{docs:{sidebar:{autoCollapseCategories:f}}}=(0,j.L)(),_=function(e){const t=(0,L.Z)();return(0,a.useMemo)((()=>e.href&&!e.linkUnlisted?e.href:!t&&e.collapsible?(0,l.LM)(e):void 0),[e,t])}(t),k=(0,l._F)(t,i),v=(0,Z.Mg)(x,i),{collapsed:g,setCollapsed:C}=(0,B.u)({initialState:()=>!!h&&(!k&&t.collapsed)}),{expandedItem:T,setExpandedItem:w}=function(){const e=(0,a.useContext)(N);if(e===I)throw new S.i6("DocSidebarItemsExpandedStateProvider");return e}(),E=function(e){void 0===e&&(e=!g),w(e?null:c),C(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:o}=e;const i=(0,S.D9)(t);(0,a.useEffect)((()=>{t&&!i&&n&&o(!1)}),[t,i,n,o])}({isActive:k,collapsed:g,updateCollapsed:E}),(0,a.useEffect)((()=>{h&&null!=T&&T!==c&&f&&C(!0)}),[h,T,c,C,f]),(0,b.jsxs)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemCategory,s.k.docs.docSidebarItemCategoryLevel(r),"menu__list-item",{"menu__list-item--collapsed":g},p),children:[(0,b.jsxs)("div",{className:(0,o.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":v}),children:[(0,b.jsx)(A.Z,{className:(0,o.Z)("menu__link",{"menu__link--sublist":h,"menu__link--sublist-caret":!x&&h,"menu__link--active":k}),onClick:h?e=>{n?.(t),x?E(!1):(e.preventDefault(),E())}:()=>{n?.(t)},"aria-current":v?"page":void 0,"aria-expanded":h?!g:void 0,href:h?_??"#":_,...d,children:m}),x&&h&&(0,b.jsx)(y,{collapsed:g,categoryLabel:m,onClick:e=>{e.preventDefault(),E()}})]}),(0,b.jsx)(B.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:g,children:(0,b.jsx)(V,{items:u,tabIndex:g?-1:0,onItemClick:n,activePath:i,level:r+1})})]})}var E=n(3919),H=n(9471);const M={menuExternalLink:"menuExternalLink_NmtK"};function R(e){let{item:t,onItemClick:n,activePath:a,level:i,index:r,...c}=e;const{href:d,label:u,className:m,autoAddBaseUrl:h}=t,p=(0,l._F)(t,a),x=(0,E.Z)(d);return(0,b.jsx)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemLink,s.k.docs.docSidebarItemLinkLevel(i),"menu__list-item",m),children:(0,b.jsxs)(A.Z,{className:(0,o.Z)("menu__link",!x&&M.menuExternalLink,{"menu__link--active":p}),autoAddBaseUrl:h,"aria-current":p?"page":void 0,to:d,...x&&{onClick:n?()=>n(t):void 0},...c,children:[u,!x&&(0,b.jsx)(H.Z,{})]})},u)}const W={menuHtmlItem:"menuHtmlItem_M9Kj"};function F(e){let{item:t,level:n,index:a}=e;const{value:i,defaultStyle:l,className:r}=t;return(0,b.jsx)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemLink,s.k.docs.docSidebarItemLinkLevel(n),l&&[W.menuHtmlItem,"menu__list-item"],r),dangerouslySetInnerHTML:{__html:i}},a)}function P(e){let{item:t,...n}=e;switch(t.type){case"category":return(0,b.jsx)(w,{item:t,...n});case"html":return(0,b.jsx)(F,{item:t,...n});default:return(0,b.jsx)(R,{item:t,...n})}}function D(e){let{items:t,...n}=e;const a=(0,l.f)(t,n.activePath);return(0,b.jsx)(T,{children:a.map(((e,t)=>(0,b.jsx)(P,{item:e,index:t,...n},t)))})}const V=(0,a.memo)(D),U={menu:"menu_SIkG",menuWithAnnouncementBar:"menuWithAnnouncementBar_GW3s"};function K(e){let{path:t,sidebar:n,className:i}=e;const l=function(){const{isActive:e}=(0,C.nT)(),[t,n]=(0,a.useState)(e);return(0,d.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return(0,b.jsx)("nav",{"aria-label":(0,c.I)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.Z)("menu thin-scrollbar",U.menu,l&&U.menuWithAnnouncementBar,i),children:(0,b.jsx)("ul",{className:(0,o.Z)(s.k.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:n,activePath:t,level:1})})})}const Y="sidebar_njMd",z="sidebarWithHideableNavbar_wUlq",G="sidebarHidden_VK0M",O="sidebarLogo_isFc";function q(e){let{path:t,sidebar:n,onCollapse:a,isHidden:i}=e;const{navbar:{hideOnScroll:s},docs:{sidebar:{hideable:l}}}=(0,j.L)();return(0,b.jsxs)("div",{className:(0,o.Z)(Y,s&&z,i&&G),children:[s&&(0,b.jsx)(_.Z,{tabIndex:-1,className:O}),(0,b.jsx)(K,{path:t,sidebar:n}),l&&(0,b.jsx)(g,{onClick:a})]})}const J=a.memo(q);var Q=n(3102),X=n(2961);const $=e=>{let{sidebar:t,path:n}=e;const a=(0,X.e)();return(0,b.jsx)("ul",{className:(0,o.Z)(s.k.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&a.toggle(),"link"===e.type&&a.toggle()},level:1})})};function ee(e){return(0,b.jsx)(Q.Zo,{component:$,props:e})}const te=a.memo(ee);function ne(e){const t=(0,f.i)(),n="desktop"===t||"ssr"===t,a="mobile"===t;return(0,b.jsxs)(b.Fragment,{children:[n&&(0,b.jsx)(J,{...e}),a&&(0,b.jsx)(te,{...e})]})}const ae={expandButton:"expandButton_TmdG",expandButtonIcon:"expandButtonIcon_i1dp"};function oe(e){let{toggleSidebar:t}=e;return(0,b.jsx)("div",{className:ae.expandButton,title:(0,c.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t,children:(0,b.jsx)(k,{className:ae.expandButtonIcon})})}const ie={docSidebarContainer:"docSidebarContainer_YfHR",docSidebarContainerHidden:"docSidebarContainerHidden_DPk8",sidebarViewport:"sidebarViewport_aRkj"};function se(e){let{children:t}=e;const n=(0,r.V)();return(0,b.jsx)(a.Fragment,{children:t},n?.name??"noSidebar")}function le(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:i}=e;const{pathname:l}=(0,x.TH)(),[r,c]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{r&&c(!1),!r&&(0,p.n)()&&c(!0),i((e=>!e))}),[i,r]);return(0,b.jsx)("aside",{className:(0,o.Z)(s.k.docs.docSidebarContainer,ie.docSidebarContainer,n&&ie.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ie.docSidebarContainer)&&n&&c(!0)},children:(0,b.jsx)(se,{children:(0,b.jsxs)("div",{className:(0,o.Z)(ie.sidebarViewport,r&&ie.sidebarViewportHidden),children:[(0,b.jsx)(ne,{sidebar:t,path:l,onCollapse:d,isHidden:r}),r&&(0,b.jsx)(oe,{toggleSidebar:d})]})})})}const re={docMainContainer:"docMainContainer_TBSr",docMainContainerEnhanced:"docMainContainerEnhanced_lQrH",docItemWrapperEnhanced:"docItemWrapperEnhanced_JWYK"};function ce(e){let{hiddenSidebarContainer:t,children:n}=e;const a=(0,r.V)();return(0,b.jsx)("main",{className:(0,o.Z)(re.docMainContainer,(t||!a)&&re.docMainContainerEnhanced),children:(0,b.jsx)("div",{className:(0,o.Z)("container padding-top--md padding-bottom--lg",re.docItemWrapper,t&&re.docItemWrapperEnhanced),children:n})})}const de={docRoot:"docRoot_UBD9",docsWrapper:"docsWrapper_hBAB"};function ue(e){let{children:t}=e;const n=(0,r.V)(),[o,i]=(0,a.useState)(!1);return(0,b.jsxs)("div",{className:de.docsWrapper,children:[(0,b.jsx)(h,{}),(0,b.jsxs)("div",{className:de.docRoot,children:[n&&(0,b.jsx)(le,{sidebar:n.items,hiddenSidebarContainer:o,setHiddenSidebarContainer:i}),(0,b.jsx)(ce,{hiddenSidebarContainer:o,children:t})]})]})}var me=n(5658);function be(e){const t=(0,l.SN)(e);if(!t)return(0,b.jsx)(me.Z,{});const{docElement:n,sidebarName:a,sidebarItems:c}=t;return(0,b.jsx)(i.FG,{className:(0,o.Z)(s.k.page.docsDocPage),children:(0,b.jsx)(r.b,{name:a,items:c,children:(0,b.jsx)(ue,{children:n})})})}},5658:(e,t,n)=>{n.d(t,{Z:()=>l});n(7294);var a=n(6010),o=n(5999),i=n(2503),s=n(5893);function l(e){let{className:t}=e;return(0,s.jsx)("main",{className:(0,a.Z)("container margin-vert--xl",t),children:(0,s.jsx)("div",{className:"row",children:(0,s.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,s.jsx)(i.Z,{as:"h1",className:"hero__title",children:(0,s.jsx)(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"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/a960b763.23498b33.js b/assets/js/a960b763.23498b33.js deleted file mode 100644 index 8aab9dcf5..000000000 --- a/assets/js/a960b763.23498b33.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7484],{4137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});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 i(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 l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=p(n),m=r,h=u["".concat(l,".").concat(m)]||u[m]||c[m]||o;return n?a.createElement(h,i(i({ref:t},d),{},{components:n})):a.createElement(h,i({ref:t},d))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:r,i[1]=s;for(var p=2;p {n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var a=n(7462),r=(n(7294),n(4137));const o={},i="Guide to Installing Bee Node on Dappnode",s={unversionedId:"user/packages/swarm",id:"user/packages/swarm",title:"Guide to Installing Bee Node on Dappnode",description:"Introduction to Swarm",source:"@site/docs/user/packages/swarm.md",sourceDirName:"user/packages",slug:"/user/packages/swarm",permalink:"/docs/user/packages/swarm",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/swarm.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Monero",permalink:"/docs/user/packages/monero"},next:{title:"Ethereum repository",permalink:"/docs/user/repository/ethereum"}},l={},p=[{value:"Introduction to Swarm",id:"introduction-to-swarm",level:2},{value:"Introduction to Dappnode",id:"introduction-to-dappnode",level:2},{value:"Gnosis Chain",id:"gnosis-chain",level:2},{value:"Installing a Bee node",id:"installing-a-bee-node",level:2},{value:"Engage in Storage Incentives by Staking Your BZZ",id:"engage-in-storage-incentives-by-staking-your-bzz",level:3}],d={toc:p},u="wrapper";function c(e){let{components:t,...n}=e;return(0,r.kt)(u,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"guide-to-installing-bee-node-on-dappnode"},"Guide to Installing Bee Node on Dappnode"),(0,r.kt)("h2",{id:"introduction-to-swarm"},"Introduction to Swarm"),(0,r.kt)("p",null,"Swarm is a decentralized data storage and distribution technology. Ready to power the next generation of censorship-resistant, unstoppable, serverless dApps."),(0,r.kt)("p",null,"Node operators can ",(0,r.kt)("a",{parentName:"p",href:"https://docs.ethswarm.org/docs/bee/working-with-bee/staking/#stake-your-node-with-bee"},"stake BZZ")," to participate in the redistribution of funds, allowing Bee node operators to receive BZZ in return for providing storage and bandwidth."),(0,r.kt)("p",null,"Node operators are rewarded with BZZ tokens, the native ERC-20 token."),(0,r.kt)("p",null,"Beyond earning rewards, the Bee node serves as your personalized gateway to the Swarm network, offering you interactive access to content and dApps hosted on Swarm. The app enables you to:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Securely store (upload and download) files on Swarm's decentralized storage."),(0,r.kt)("li",{parentName:"ul"},"Share files privately and securely with others."),(0,r.kt)("li",{parentName:"ul"},"Host and manage HTML websites conveniently.")),(0,r.kt)("h2",{id:"introduction-to-dappnode"},"Introduction to Dappnode"),(0,r.kt)("p",null,"DappNode is a decentralized platform that serves as critical infrastructure for launching and managing decentralized applications (dApps) with an essence of providing users with self-sovereign data management and secure, uncensorable application interfaces."),(0,r.kt)("p",null,"Node operators on DappNode can gain enhanced control over their participation in various blockchain networks and ensure that their activities, whether it be validating transactions, participating in consensus mechanisms, or supporting network security, are conducted in a seamless, autonomous manner."),(0,r.kt)("p",null,"The unique DappNode ecosystem ensures:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Seamless deployment and management of decentralized applications and nodes."),(0,r.kt)("li",{parentName:"ul"},"Enhanced user control over data and privacy."),(0,r.kt)("li",{parentName:"ul"},"Autonomous and secure participation in various blockchain networks."),(0,r.kt)("li",{parentName:"ul"},"Simplification of running blockchain nodes, reducing technical barriers for participants.")),(0,r.kt)("h2",{id:"gnosis-chain"},"Gnosis Chain"),(0,r.kt)("p",null,"Swarm uses ",(0,r.kt)("a",{parentName:"p",href:"https://www.gnosis.io/"},"Gnosis Chain"),", formerly known as xDai, for managing its incentives."),(0,r.kt)("p",null,"Therefore, the Swarm Bee client necessitates a connection to the Gnosis Chain. As such, we recommend installing Nethermind (direct Dappnode install link) as your RPC endpoint."),(0,r.kt)("h2",{id:"installing-a-bee-node"},"Installing a Bee node"),(0,r.kt)("p",null,"Step 1: Navigate to the package installer \u2014 ",(0,r.kt)("a",{parentName:"p",href:"http://my.dappnode/installer/public/swarm.public.dappnode.eth"},"Install Swarm"),"(direct Dappnode install link). Click Install to initiate the installation."),(0,r.kt)("p",null,"Step 2: Setup optional parameters:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Swap RPC Endpoint (Gnosis Chain)")," \u2014 if you installed Nethermind and are running your own node, you can leave the default settings. Otherwise, if you use an external RPC endpoint, this is where you should set it."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"ENS resolver RPC (Ethereum Mainnet)")," \u2014 As bee can resolve ENS (a special type of blockchain name), it requires an Ethereum mainnet RPC endpoint. Install links are available for a variety of clients, or you can use an Infura RPC endpoint, or alternatively leave it blank to disable the ENS resolver."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Initial chequebook deposit (xBZZ)")," \u2014 is the amount of xBZZ the bee node must have deposited to its address in order to deploy the chequebook. You have the option to set this to 0 and deposit BZZ into the chequebook later via the UI."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Welcome message")," \u2014 some graffiti that you can admire at Swarm Scan or if you happen to be peering through the logs"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Full node mode")," \u2014 must be set to true or false, in order to stake and participate in storage incentives, and subsequently be rewarded, it should be set to true"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Storage data mountpoint")," \u2014 for advanced users; recommended to leave at default.")),(0,r.kt)("h3",{id:"engage-in-storage-incentives-by-staking-your-bzz"},"Engage in Storage Incentives by Staking Your BZZ"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Import your gift code into Metamask or another web3 wallet on Gnosis chain. Remember, the gift code is a private key that holds 12 BZZ and 0.12xDAI."),(0,r.kt)("li",{parentName:"ol"},"Transfer funds to your Node wallet address, which can be found in the logs or at Swarm UI/Account/",(0,r.kt)("a",{parentName:"li",href:"http://dashboard.swarm.public.dappnode/#/account/wallet"},"Wallet"),"."),(0,r.kt)("li",{parentName:"ol"},"Visit Account/",(0,r.kt)("a",{parentName:"li",href:"http://dashboard.swarm.public.dappnode/#/account/staking"},"Staking"),"."),(0,r.kt)("li",{parentName:"ol"},"Click on 'Stake', input an amount of 10 BZZ, and then press the 'Stake' button.")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a960b763.3537f263.js b/assets/js/a960b763.3537f263.js new file mode 100644 index 000000000..0edafbc83 --- /dev/null +++ b/assets/js/a960b763.3537f263.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7484],{377:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>l});var i=t(5893),a=t(1151);const o={},s="Guide to Installing Bee Node on Dappnode",r={id:"user/packages/swarm",title:"Guide to Installing Bee Node on Dappnode",description:"Introduction to Swarm",source:"@site/docs/user/packages/swarm.md",sourceDirName:"user/packages",slug:"/user/packages/swarm",permalink:"/docs/user/packages/swarm",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/swarm.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Monero",permalink:"/docs/user/packages/monero"},next:{title:"Ethereum repository",permalink:"/docs/user/repository/ethereum"}},d={},l=[{value:"Introduction to Swarm",id:"introduction-to-swarm",level:2},{value:"Introduction to Dappnode",id:"introduction-to-dappnode",level:2},{value:"Gnosis Chain",id:"gnosis-chain",level:2},{value:"Installing a Bee node",id:"installing-a-bee-node",level:2},{value:"Engage in Storage Incentives by Staking Your BZZ",id:"engage-in-storage-incentives-by-staking-your-bzz",level:3}];function c(e){const n={a:"a",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"guide-to-installing-bee-node-on-dappnode",children:"Guide to Installing Bee Node on Dappnode"}),"\n",(0,i.jsx)(n.h2,{id:"introduction-to-swarm",children:"Introduction to Swarm"}),"\n",(0,i.jsx)(n.p,{children:"Swarm is a decentralized data storage and distribution technology. Ready to power the next generation of censorship-resistant, unstoppable, serverless dApps."}),"\n",(0,i.jsxs)(n.p,{children:["Node operators can ",(0,i.jsx)(n.a,{href:"https://docs.ethswarm.org/docs/bee/working-with-bee/staking/#stake-your-node-with-bee",children:"stake BZZ"})," to participate in the redistribution of funds, allowing Bee node operators to receive BZZ in return for providing storage and bandwidth."]}),"\n",(0,i.jsx)(n.p,{children:"Node operators are rewarded with BZZ tokens, the native ERC-20 token."}),"\n",(0,i.jsx)(n.p,{children:"Beyond earning rewards, the Bee node serves as your personalized gateway to the Swarm network, offering you interactive access to content and dApps hosted on Swarm. The app enables you to:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Securely store (upload and download) files on Swarm's decentralized storage."}),"\n",(0,i.jsx)(n.li,{children:"Share files privately and securely with others."}),"\n",(0,i.jsx)(n.li,{children:"Host and manage HTML websites conveniently."}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"introduction-to-dappnode",children:"Introduction to Dappnode"}),"\n",(0,i.jsx)(n.p,{children:"DappNode is a decentralized platform that serves as critical infrastructure for launching and managing decentralized applications (dApps) with an essence of providing users with self-sovereign data management and secure, uncensorable application interfaces."}),"\n",(0,i.jsx)(n.p,{children:"Node operators on DappNode can gain enhanced control over their participation in various blockchain networks and ensure that their activities, whether it be validating transactions, participating in consensus mechanisms, or supporting network security, are conducted in a seamless, autonomous manner."}),"\n",(0,i.jsx)(n.p,{children:"The unique DappNode ecosystem ensures:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Seamless deployment and management of decentralized applications and nodes."}),"\n",(0,i.jsx)(n.li,{children:"Enhanced user control over data and privacy."}),"\n",(0,i.jsx)(n.li,{children:"Autonomous and secure participation in various blockchain networks."}),"\n",(0,i.jsx)(n.li,{children:"Simplification of running blockchain nodes, reducing technical barriers for participants."}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"gnosis-chain",children:"Gnosis Chain"}),"\n",(0,i.jsxs)(n.p,{children:["Swarm uses ",(0,i.jsx)(n.a,{href:"https://www.gnosis.io/",children:"Gnosis Chain"}),", formerly known as xDai, for managing its incentives."]}),"\n",(0,i.jsx)(n.p,{children:"Therefore, the Swarm Bee client necessitates a connection to the Gnosis Chain. As such, we recommend installing Nethermind (direct Dappnode install link) as your RPC endpoint."}),"\n",(0,i.jsx)(n.h2,{id:"installing-a-bee-node",children:"Installing a Bee node"}),"\n",(0,i.jsxs)(n.p,{children:["Step 1: Navigate to the package installer \u2014 ",(0,i.jsx)(n.a,{href:"http://my.dappnode/installer/public/swarm.public.dappnode.eth",children:"Install Swarm"}),"(direct Dappnode install link). Click Install to initiate the installation."]}),"\n",(0,i.jsx)(n.p,{children:"Step 2: Setup optional parameters:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Swap RPC Endpoint (Gnosis Chain)"})," \u2014 if you installed Nethermind and are running your own node, you can leave the default settings. Otherwise, if you use an external RPC endpoint, this is where you should set it."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"ENS resolver RPC (Ethereum Mainnet)"})," \u2014 As bee can resolve ENS (a special type of blockchain name), it requires an Ethereum mainnet RPC endpoint. Install links are available for a variety of clients, or you can use an Infura RPC endpoint, or alternatively leave it blank to disable the ENS resolver."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Initial chequebook deposit (xBZZ)"})," \u2014 is the amount of xBZZ the bee node must have deposited to its address in order to deploy the chequebook. You have the option to set this to 0 and deposit BZZ into the chequebook later via the UI."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Welcome message"})," \u2014 some graffiti that you can admire at Swarm Scan or if you happen to be peering through the logs"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Full node mode"})," \u2014 must be set to true or false, in order to stake and participate in storage incentives, and subsequently be rewarded, it should be set to true"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Storage data mountpoint"})," \u2014 for advanced users; recommended to leave at default."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"engage-in-storage-incentives-by-staking-your-bzz",children:"Engage in Storage Incentives by Staking Your BZZ"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Import your gift code into Metamask or another web3 wallet on Gnosis chain. Remember, the gift code is a private key that holds 12 BZZ and 0.12xDAI."}),"\n",(0,i.jsxs)(n.li,{children:["Transfer funds to your Node wallet address, which can be found in the logs or at Swarm UI/Account/",(0,i.jsx)(n.a,{href:"http://dashboard.swarm.public.dappnode/#/account/wallet",children:"Wallet"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Visit Account/",(0,i.jsx)(n.a,{href:"http://dashboard.swarm.public.dappnode/#/account/staking",children:"Staking"}),"."]}),"\n",(0,i.jsx)(n.li,{children:"Click on 'Stake', input an amount of 10 BZZ, and then press the 'Stake' button."}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>s});var i=t(7294);const a={},o=i.createContext(a);function s(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/af26485d.bb17cc6d.js b/assets/js/af26485d.bb17cc6d.js deleted file mode 100644 index 9e8e4b521..000000000 --- a/assets/js/af26485d.bb17cc6d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2217],{4137:(e,t,o)=>{o.d(t,{Zo:()=>u,kt:()=>y});var n=o(7294);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function r(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var t=1;t =0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var s=n.createContext({}),l=function(e){var t=n.useContext(s),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var o=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,u=p(e,["components","mdxType","originalType","parentName"]),d=l(o),m=a,y=d["".concat(s,".").concat(m)]||d[m]||c[m]||r;return o?n.createElement(y,i(i({ref:t},u),{},{components:o})):n.createElement(y,i({ref:t},u))}));function y(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=o.length,i=new Array(r);i[0]=m;var p={};for(var s in t)hasOwnProperty.call(t,s)&&(p[s]=t[s]);p.originalType=e,p[d]="string"==typeof e?e:a,i[1]=p;for(var l=2;l {o.r(t),o.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>r,metadata:()=>p,toc:()=>l});var n=o(7462),a=(o(7294),o(4137));const r={},i="IPFS repository",p={unversionedId:"user/repository/ipfs",id:"user/repository/ipfs",title:"IPFS repository",description:"Dappnode leverages IPFS for distributing packages available in the Dappstore. To download these packages, your Dappnode requires a connection to an IPFS node. When it comes to connecting to the IPFS network, you have two primary choices:",source:"@site/docs/user/repository/ipfs.md",sourceDirName:"user/repository",slug:"/user/repository/ipfs",permalink:"/docs/user/repository/ipfs",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/repository/ipfs.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Ethereum repository",permalink:"/docs/user/repository/ethereum"},next:{title:"Installation Overview",permalink:"/docs/user/install/overview"}},s={},l=[{value:"Run your own IPFS node",id:"run-your-own-ipfs-node",level:2},{value:"Use a remote IPFS node",id:"use-a-remote-ipfs-node",level:2},{value:"Troubleshooting",id:"troubleshooting",level:3}],u={toc:l},d="wrapper";function c(e){let{components:t,...r}=e;return(0,a.kt)(d,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"ipfs-repository"},"IPFS repository"),(0,a.kt)("p",null,"Dappnode leverages IPFS for distributing packages available in the Dappstore. To download these packages, your Dappnode requires a connection to an IPFS node. When it comes to connecting to the IPFS network, you have two primary choices:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Run Your Own IPFS Node"),": By opting for this, you maintain full control, ensuring that you directly access the distributed packages without intermediaries. However, it might require some disk space."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Use a Remote Node"),": This is a convenient option, but it comes with the caveat of needing to trust the remote node operator. It is really useful in case your own IPFS node becomes unreliable or unavailable.")),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"To configure your dappnode IPFS repository go to ",(0,a.kt)("a",{parentName:"p",href:"http://my.dappnode/repository/ipfs"},"http://my.dappnode/repository/ipfs"))),(0,a.kt)("h2",{id:"run-your-own-ipfs-node"},"Run your own IPFS node"),(0,a.kt)("p",null,"You can run your own IPFS node to connect to the IPFS network. This is the recommended option for those users who want to have full control over their dappnode. Dappnode comes with an IPFS node preinstalled and configured. You can access the ",(0,a.kt)("a",{parentName:"p",href:"http://ipfs.dappnode:5001/webui"},"IPFS Web UI")," while connected to your Dappnode."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"ipfs-remote-local",src:o(9796).Z,width:"2562",height:"1068"})),(0,a.kt)("admonition",{type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"Running your own IPFS node may affect your internet connection. If you don't want to run your own IPFS node, you can use a remote IPFS node. Consider stopping your IPFS node if you are not using it at ",(0,a.kt)("a",{parentName:"p",href:"http://my.dappnode/packages/system/ipfs.dnp.dappnode.eth/info"},"IPFS Package"))),(0,a.kt)("h2",{id:"use-a-remote-ipfs-node"},"Use a remote IPFS node"),(0,a.kt)("p",null,"You can use a remote IPFS node gateway to connect to the IPFS network. You will need to trust the node operator. Dappnode provides an ",(0,a.kt)("a",{parentName:"p",href:"https://gateway.ipfs.dappnode.io"},"Official IPFS gateway")," by default, but you can choose any other IPFS gateway."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"ipfs-remote-node",src:o(8493).Z,width:"2562",height:"1068"})),(0,a.kt)("admonition",{title:"IPFS gateways and security",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"Connecting to IPFS remote gateways could entail security risks. For example, the gateway could attempt to serve malicious content to the user. We mitigate this risk by verifying the content downladed with ",(0,a.kt)("a",{parentName:"p",href:"https://docs.ipfs.io/concepts/content-addressing/"},"CID technology"),"."),(0,a.kt)("p",{parentName:"admonition"},"If the Dappnode IPFS gateway is not available (we make no uptime guarantees and we offer it on a best-effort basis) the user can set another IPFS gateway in the input field as last resort. Check out all the ",(0,a.kt)("a",{parentName:"p",href:"https://ipfs.github.io/public-gateway-checker/"},"IPFS gateways available"))),(0,a.kt)("hr",null),(0,a.kt)("h3",{id:"troubleshooting"},"Troubleshooting"),(0,a.kt)("details",null,(0,a.kt)("summary",null,(0,a.kt)("b",null,"I can't see the logos of the packages in the Dappstore/Stakers tab. Why?")),(0,a.kt)("p",null,(0,a.kt)("p",null,"This might be related to an issue with IPFS. Try the following solutions:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"IPFS Mode"),":"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"Navigate to the ",(0,a.kt)("a",{parentName:"li",href:"http://my.dappnode/repository/ipfs"},"repository"),"."),(0,a.kt)("li",{parentName:"ul"},"Toggle between ",(0,a.kt)("inlineCode",{parentName:"li"},"local")," and ",(0,a.kt)("inlineCode",{parentName:"li"},"remote")," IPFS modes to see which one works."))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"IPFS Package Status"),":"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"If your IPFS mode is set to ",(0,a.kt)("inlineCode",{parentName:"li"},"local"),", ensure that the IPFS package is running."),(0,a.kt)("li",{parentName:"ul"},"Visit ",(0,a.kt)("a",{parentName:"li",href:"http://my.dappnode/packages/system/ipfs.dnp.dappnode.eth/info"},"IPFS Package"),' to verify its status and click on "Start" if it is stopped.'),(0,a.kt)("li",{parentName:"ul"},"If it's restarting, consider updating the IPFS package to its latest version. Post update, remove its volumes to address any potential database migration issues."))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Gateway Validity"),":"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"For ",(0,a.kt)("inlineCode",{parentName:"li"},"remote")," IPFS mode, make sure the gateway URL in the ",(0,a.kt)("a",{parentName:"li",href:"http://my.dappnode/repository/ipfs"},"repository")," is correct.")))))),(0,a.kt)("details",null,(0,a.kt)("summary",null,(0,a.kt)("b",null,"I'm using local IPFS and encountering issues downloading packages. What should I do?")),(0,a.kt)("p",null,(0,a.kt)("p",null,"This could arise from various factors:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Internet Connection"),":"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"Your connection might be unstable. Consider switching your IPFS node mode to ",(0,a.kt)("inlineCode",{parentName:"li"},"lowpower")," by accessing ",(0,a.kt)("a",{parentName:"li",href:"http://my.dappnode/packages/system/ipfs.dnp.dappnode.eth/config"},"IPFS config"),"."))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Disk Space"),":"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"Your local IPFS node might be out of storage."),(0,a.kt)("li",{parentName:"ul"},'Clear the storage by opting for "Remove volumes" at ',(0,a.kt)("a",{parentName:"li",href:"http://my.dappnode/packages/system/ipfs.dnp.dappnode.eth/info"},"IPFS package info"),"."))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Dappnode Official Gateway as Peer"),":"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"Ensure that the Dappnode Official Gateway is added as a peer to your local IPFS."),(0,a.kt)("li",{parentName:"ul"},"You can add it directly by clicking ",(0,a.kt)("a",{parentName:"li",href:"http://my.dappnode/system/add-ipfs-peer/%2Fdns4%2Fipfs.dappnode.io%2Ftcp%2F4001%2Fipfs%2FQmfB6dT5zxUq1BXiXisgcZKYkvjywdDYBK5keRaqDKH633"},"here"),".")))),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Tip"),": If these solutions don't resolve the issue, switch to the ",(0,a.kt)("inlineCode",{parentName:"p"},"remote IPFS mode")," at ",(0,a.kt)("a",{parentName:"p",href:"http://my.dappnode/repository/ipfs"},"IPFS repository"),"."))))}c.isMDXComponent=!0},9796:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/repository-ipfs-local-da32632842c89e3f1c4448b01ad12284.png"},8493:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/repository-ipfs-remote-7292c798454f1b0a934e647dacb1b055.png"}}]); \ No newline at end of file diff --git a/assets/js/af26485d.e05f3298.js b/assets/js/af26485d.e05f3298.js new file mode 100644 index 000000000..a5162d209 --- /dev/null +++ b/assets/js/af26485d.e05f3298.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2217],{9316:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var s=o(5893),t=o(1151);const i={},r="IPFS repository",a={id:"user/repository/ipfs",title:"IPFS repository",description:"Dappnode leverages IPFS for distributing packages available in the Dappstore. To download these packages, your Dappnode requires a connection to an IPFS node. When it comes to connecting to the IPFS network, you have two primary choices:",source:"@site/docs/user/repository/ipfs.md",sourceDirName:"user/repository",slug:"/user/repository/ipfs",permalink:"/docs/user/repository/ipfs",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/repository/ipfs.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Ethereum repository",permalink:"/docs/user/repository/ethereum"},next:{title:"Installation Overview",permalink:"/docs/user/install/overview"}},d={},c=[{value:"Run your own IPFS node",id:"run-your-own-ipfs-node",level:2},{value:"Use a remote IPFS node",id:"use-a-remote-ipfs-node",level:2},{value:"Troubleshooting",id:"troubleshooting",level:3}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.a)(),...e.components},{Details:i}=n;return i||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"ipfs-repository",children:"IPFS repository"}),"\n",(0,s.jsx)(n.p,{children:"Dappnode leverages IPFS for distributing packages available in the Dappstore. To download these packages, your Dappnode requires a connection to an IPFS node. When it comes to connecting to the IPFS network, you have two primary choices:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Run Your Own IPFS Node"}),": By opting for this, you maintain full control, ensuring that you directly access the distributed packages without intermediaries. However, it might require some disk space."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Use a Remote Node"}),": This is a convenient option, but it comes with the caveat of needing to trust the remote node operator. It is really useful in case your own IPFS node becomes unreliable or unavailable."]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["To configure your dappnode IPFS repository go to ",(0,s.jsx)(n.a,{href:"http://my.dappnode/repository/ipfs",children:"http://my.dappnode/repository/ipfs"})]})}),"\n",(0,s.jsx)(n.h2,{id:"run-your-own-ipfs-node",children:"Run your own IPFS node"}),"\n",(0,s.jsxs)(n.p,{children:["You can run your own IPFS node to connect to the IPFS network. This is the recommended option for those users who want to have full control over their dappnode. Dappnode comes with an IPFS node preinstalled and configured. You can access the ",(0,s.jsx)(n.a,{href:"http://ipfs.dappnode:5001/webui",children:"IPFS Web UI"})," while connected to your Dappnode."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"ipfs-remote-local",src:o(9796).Z+"",width:"2562",height:"1068"})}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsxs)(n.p,{children:["Running your own IPFS node may affect your internet connection. If you don't want to run your own IPFS node, you can use a remote IPFS node. Consider stopping your IPFS node if you are not using it at ",(0,s.jsx)(n.a,{href:"http://my.dappnode/packages/system/ipfs.dnp.dappnode.eth/info",children:"IPFS Package"})]})}),"\n",(0,s.jsx)(n.h2,{id:"use-a-remote-ipfs-node",children:"Use a remote IPFS node"}),"\n",(0,s.jsxs)(n.p,{children:["You can use a remote IPFS node gateway to connect to the IPFS network. You will need to trust the node operator. Dappnode provides an ",(0,s.jsx)(n.a,{href:"https://gateway.ipfs.dappnode.io",children:"Official IPFS gateway"})," by default, but you can choose any other IPFS gateway."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"ipfs-remote-node",src:o(8493).Z+"",width:"2562",height:"1068"})}),"\n",(0,s.jsxs)(n.admonition,{title:"IPFS gateways and security",type:"note",children:[(0,s.jsxs)(n.p,{children:["Connecting to IPFS remote gateways could entail security risks. For example, the gateway could attempt to serve malicious content to the user. We mitigate this risk by verifying the content downladed with ",(0,s.jsx)(n.a,{href:"https://docs.ipfs.io/concepts/content-addressing/",children:"CID technology"}),"."]}),(0,s.jsxs)(n.p,{children:["If the Dappnode IPFS gateway is not available (we make no uptime guarantees and we offer it on a best-effort basis) the user can set another IPFS gateway in the input field as last resort. Check out all the ",(0,s.jsx)(n.a,{href:"https://ipfs.github.io/public-gateway-checker/",children:"IPFS gateways available"})]})]}),"\n",(0,s.jsx)("hr",{}),"\n",(0,s.jsx)(n.h3,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,s.jsxs)(i,{children:[(0,s.jsx)("summary",{children:(0,s.jsx)("b",{children:"I can't see the logos of the packages in the Dappstore/Stakers tab. Why?"})}),(0,s.jsxs)("p",{children:[(0,s.jsx)(n.p,{children:"This might be related to an issue with IPFS. Try the following solutions:"}),(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"IPFS Mode"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Navigate to the ",(0,s.jsx)(n.a,{href:"http://my.dappnode/repository/ipfs",children:"repository"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Toggle between ",(0,s.jsx)(n.code,{children:"local"})," and ",(0,s.jsx)(n.code,{children:"remote"})," IPFS modes to see which one works."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"IPFS Package Status"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["If your IPFS mode is set to ",(0,s.jsx)(n.code,{children:"local"}),", ensure that the IPFS package is running."]}),"\n",(0,s.jsxs)(n.li,{children:["Visit ",(0,s.jsx)(n.a,{href:"http://my.dappnode/packages/system/ipfs.dnp.dappnode.eth/info",children:"IPFS Package"}),' to verify its status and click on "Start" if it is stopped.']}),"\n",(0,s.jsx)(n.li,{children:"If it's restarting, consider updating the IPFS package to its latest version. Post update, remove its volumes to address any potential database migration issues."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Gateway Validity"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["For ",(0,s.jsx)(n.code,{children:"remote"})," IPFS mode, make sure the gateway URL in the ",(0,s.jsx)(n.a,{href:"http://my.dappnode/repository/ipfs",children:"repository"})," is correct."]}),"\n"]}),"\n"]}),"\n"]})]})]}),"\n",(0,s.jsxs)(i,{children:[(0,s.jsx)("summary",{children:(0,s.jsx)("b",{children:"I'm using local IPFS and encountering issues downloading packages. What should I do?"})}),(0,s.jsxs)("p",{children:[(0,s.jsx)(n.p,{children:"This could arise from various factors:"}),(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Internet Connection"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Your connection might be unstable. Consider switching your IPFS node mode to ",(0,s.jsx)(n.code,{children:"lowpower"})," by accessing ",(0,s.jsx)(n.a,{href:"http://my.dappnode/packages/system/ipfs.dnp.dappnode.eth/config",children:"IPFS config"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Disk Space"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Your local IPFS node might be out of storage."}),"\n",(0,s.jsxs)(n.li,{children:['Clear the storage by opting for "Remove volumes" at ',(0,s.jsx)(n.a,{href:"http://my.dappnode/packages/system/ipfs.dnp.dappnode.eth/info",children:"IPFS package info"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Dappnode Official Gateway as Peer"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ensure that the Dappnode Official Gateway is added as a peer to your local IPFS."}),"\n",(0,s.jsxs)(n.li,{children:["You can add it directly by clicking ",(0,s.jsx)(n.a,{href:"http://my.dappnode/system/add-ipfs-peer/%2Fdns4%2Fipfs.dappnode.io%2Ftcp%2F4001%2Fipfs%2FQmfB6dT5zxUq1BXiXisgcZKYkvjywdDYBK5keRaqDKH633",children:"here"}),"."]}),"\n"]}),"\n"]}),"\n"]}),(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Tip"}),": If these solutions don't resolve the issue, switch to the ",(0,s.jsx)(n.code,{children:"remote IPFS mode"})," at ",(0,s.jsx)(n.a,{href:"http://my.dappnode/repository/ipfs",children:"IPFS repository"}),"."]})]})]})]})}function p(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},9796:(e,n,o)=>{o.d(n,{Z:()=>s});const s=o.p+"assets/images/repository-ipfs-local-da32632842c89e3f1c4448b01ad12284.png"},8493:(e,n,o)=>{o.d(n,{Z:()=>s});const s=o.p+"assets/images/repository-ipfs-remote-7292c798454f1b0a934e647dacb1b055.png"},1151:(e,n,o)=>{o.d(n,{Z:()=>a,a:()=>r});var s=o(7294);const t={},i=s.createContext(t);function r(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b2f554cd.916cd470.js b/assets/js/b2f554cd.916cd470.js deleted file mode 100644 index 1e78b74a6..000000000 --- a/assets/js/b2f554cd.916cd470.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1477],{10:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"welcome","metadata":{"permalink":"/blog/welcome","source":"@site/blog/2021-08-26-welcome/index.md","title":"Welcome","description":"Docusaurus blogging features are powered by the blog plugin.","date":"2021-08-26T00:00:00.000Z","formattedDate":"August 26, 2021","tags":[{"label":"facebook","permalink":"/blog/tags/facebook"},{"label":"hello","permalink":"/blog/tags/hello"},{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.405,"hasTruncateMarker":false,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Yangshun Tay","title":"Front End Engineer @ Facebook","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun"}],"frontMatter":{"slug":"welcome","title":"Welcome","authors":["slorber","yangshun"],"tags":["facebook","hello","docusaurus"]},"nextItem":{"title":"MDX Blog Post","permalink":"/blog/mdx-blog-post"}},"content":"[Docusaurus blogging features](https://docusaurus.io/docs/blog) are powered by the [blog plugin](https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog).\\n\\nSimply add Markdown files (or folders) to the `blog` directory.\\n\\nRegular blog authors can be added to `authors.yml`.\\n\\nThe blog post date can be extracted from filenames, such as:\\n\\n- `2019-05-30-welcome.md`\\n- `2019-05-30-welcome/index.md`\\n\\nA blog post folder can be convenient to co-locate blog post images:\\n\\n![Docusaurus Plushie](./docusaurus-plushie-banner.jpeg)\\n\\nThe blog supports tags as well!\\n\\n**And if you don\'t want a blog**: just delete this directory, and use `blog: false` in your Docusaurus config."},{"id":"mdx-blog-post","metadata":{"permalink":"/blog/mdx-blog-post","source":"@site/blog/2021-08-01-mdx-blog-post.mdx","title":"MDX Blog Post","description":"Blog posts support Docusaurus Markdown features, such as MDX.","date":"2021-08-01T00:00:00.000Z","formattedDate":"August 1, 2021","tags":[{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.175,"hasTruncateMarker":false,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"slug":"mdx-blog-post","title":"MDX Blog Post","authors":["slorber"],"tags":["docusaurus"]},"prevItem":{"title":"Welcome","permalink":"/blog/welcome"},"nextItem":{"title":"Long Blog Post","permalink":"/blog/long-blog-post"}},"content":"Blog posts support [Docusaurus Markdown features](https://docusaurus.io/docs/markdown-features), such as [MDX](https://mdxjs.com/).\\n\\n:::tip\\n\\nUse the power of React to create interactive blog posts.\\n\\n```js\\n\\n```\\n\\n\\n\\n:::"},{"id":"long-blog-post","metadata":{"permalink":"/blog/long-blog-post","source":"@site/blog/2019-05-29-long-blog-post.md","title":"Long Blog Post","description":"This is the summary of a very long blog post,","date":"2019-05-29T00:00:00.000Z","formattedDate":"May 29, 2019","tags":[{"label":"hello","permalink":"/blog/tags/hello"},{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":2.05,"hasTruncateMarker":true,"authors":[{"name":"Endilie Yacop Sucipto","title":"Maintainer of Docusaurus","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endi"}],"frontMatter":{"slug":"long-blog-post","title":"Long Blog Post","authors":"endi","tags":["hello","docusaurus"]},"prevItem":{"title":"MDX Blog Post","permalink":"/blog/mdx-blog-post"},"nextItem":{"title":"First Blog Post","permalink":"/blog/first-blog-post"}},"content":"This is the summary of a very long blog post,\\n\\nUse a `\x3c!--` `truncate` `--\x3e` comment to limit blog post size in the list view.\\n\\n\x3c!--truncate--\x3e\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"},{"id":"first-blog-post","metadata":{"permalink":"/blog/first-blog-post","source":"@site/blog/2019-05-28-first-blog-post.md","title":"First Blog Post","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet","date":"2019-05-28T00:00:00.000Z","formattedDate":"May 28, 2019","tags":[{"label":"hola","permalink":"/blog/tags/hola"},{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.12,"hasTruncateMarker":false,"authors":[{"name":"Gao Wei","title":"Docusaurus Core Team","url":"https://github.com/wgao19","image_url":"https://github.com/wgao19.png","imageURL":"https://github.com/wgao19.png"}],"frontMatter":{"slug":"first-blog-post","title":"First Blog Post","authors":{"name":"Gao Wei","title":"Docusaurus Core Team","url":"https://github.com/wgao19","image_url":"https://github.com/wgao19.png","imageURL":"https://github.com/wgao19.png"},"tags":["hola","docusaurus"]},"prevItem":{"title":"Long Blog Post","permalink":"/blog/long-blog-post"}},"content":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}]}')}}]); \ No newline at end of file diff --git a/assets/js/b2f554cd.f646151d.js b/assets/js/b2f554cd.f646151d.js new file mode 100644 index 000000000..971fc0b0e --- /dev/null +++ b/assets/js/b2f554cd.f646151d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1477],{4556:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"welcome","metadata":{"permalink":"/blog/welcome","source":"@site/blog/2021-08-26-welcome/index.md","title":"Welcome","description":"Docusaurus blogging features are powered by the blog plugin.","date":"2021-08-26T00:00:00.000Z","formattedDate":"August 26, 2021","tags":[{"label":"facebook","permalink":"/blog/tags/facebook"},{"label":"hello","permalink":"/blog/tags/hello"},{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.405,"hasTruncateMarker":false,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Yangshun Tay","title":"Front End Engineer @ Facebook","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun"}],"frontMatter":{"slug":"welcome","title":"Welcome","authors":["slorber","yangshun"],"tags":["facebook","hello","docusaurus"]},"unlisted":false,"nextItem":{"title":"MDX Blog Post","permalink":"/blog/mdx-blog-post"}},"content":"[Docusaurus blogging features](https://docusaurus.io/docs/blog) are powered by the [blog plugin](https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog).\\n\\nSimply add Markdown files (or folders) to the `blog` directory.\\n\\nRegular blog authors can be added to `authors.yml`.\\n\\nThe blog post date can be extracted from filenames, such as:\\n\\n- `2019-05-30-welcome.md`\\n- `2019-05-30-welcome/index.md`\\n\\nA blog post folder can be convenient to co-locate blog post images:\\n\\n![Docusaurus Plushie](./docusaurus-plushie-banner.jpeg)\\n\\nThe blog supports tags as well!\\n\\n**And if you don\'t want a blog**: just delete this directory, and use `blog: false` in your Docusaurus config."},{"id":"mdx-blog-post","metadata":{"permalink":"/blog/mdx-blog-post","source":"@site/blog/2021-08-01-mdx-blog-post.mdx","title":"MDX Blog Post","description":"Blog posts support Docusaurus Markdown features, such as MDX.","date":"2021-08-01T00:00:00.000Z","formattedDate":"August 1, 2021","tags":[{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.175,"hasTruncateMarker":false,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"slug":"mdx-blog-post","title":"MDX Blog Post","authors":["slorber"],"tags":["docusaurus"]},"unlisted":false,"prevItem":{"title":"Welcome","permalink":"/blog/welcome"},"nextItem":{"title":"Long Blog Post","permalink":"/blog/long-blog-post"}},"content":"Blog posts support [Docusaurus Markdown features](https://docusaurus.io/docs/markdown-features), such as [MDX](https://mdxjs.com/).\\n\\n:::tip\\n\\nUse the power of React to create interactive blog posts.\\n\\n```js\\n\\n```\\n\\n\\n\\n:::"},{"id":"long-blog-post","metadata":{"permalink":"/blog/long-blog-post","source":"@site/blog/2019-05-29-long-blog-post.md","title":"Long Blog Post","description":"This is the summary of a very long blog post,","date":"2019-05-29T00:00:00.000Z","formattedDate":"May 29, 2019","tags":[{"label":"hello","permalink":"/blog/tags/hello"},{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":2.05,"hasTruncateMarker":true,"authors":[{"name":"Endilie Yacop Sucipto","title":"Maintainer of Docusaurus","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endi"}],"frontMatter":{"slug":"long-blog-post","title":"Long Blog Post","authors":"endi","tags":["hello","docusaurus"]},"unlisted":false,"prevItem":{"title":"MDX Blog Post","permalink":"/blog/mdx-blog-post"},"nextItem":{"title":"First Blog Post","permalink":"/blog/first-blog-post"}},"content":"This is the summary of a very long blog post,\\n\\nUse a `\x3c!--` `truncate` `--\x3e` comment to limit blog post size in the list view.\\n\\n\x3c!--truncate--\x3e\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"},{"id":"first-blog-post","metadata":{"permalink":"/blog/first-blog-post","source":"@site/blog/2019-05-28-first-blog-post.md","title":"First Blog Post","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet","date":"2019-05-28T00:00:00.000Z","formattedDate":"May 28, 2019","tags":[{"label":"hola","permalink":"/blog/tags/hola"},{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.12,"hasTruncateMarker":false,"authors":[{"name":"Gao Wei","title":"Docusaurus Core Team","url":"https://github.com/wgao19","image_url":"https://github.com/wgao19.png","imageURL":"https://github.com/wgao19.png"}],"frontMatter":{"slug":"first-blog-post","title":"First Blog Post","authors":{"name":"Gao Wei","title":"Docusaurus Core Team","url":"https://github.com/wgao19","image_url":"https://github.com/wgao19.png","imageURL":"https://github.com/wgao19.png"},"tags":["hola","docusaurus"]},"unlisted":false,"prevItem":{"title":"Long Blog Post","permalink":"/blog/long-blog-post"}},"content":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}]}')}}]); \ No newline at end of file diff --git a/assets/js/b4800274.6101b4c4.js b/assets/js/b4800274.6101b4c4.js new file mode 100644 index 000000000..86c62d025 --- /dev/null +++ b/assets/js/b4800274.6101b4c4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5561],{9620:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>l,toc:()=>u});var o=t(5893),s=t(1151);const r={},i="Ethereum Rollups: An Overview",l={id:"user/rollups/overview",title:"Ethereum Rollups: An Overview",description:"Rollups are advanced layer-2 scaling solutions designed to increase the throughput of the Ethereum network. By executing and storing transaction data off the main Ethereum chain while keeping a cryptographic commitment on-chain, Rollups enhance scalability and reduce fees. Rollups can be broadly categorized into two types: Optimistic Rollups and zk-Rollups, each with its unique approach and trade-offs.",source:"@site/docs/user/rollups/overview.md",sourceDirName:"user/rollups",slug:"/user/rollups/overview",permalink:"/docs/user/rollups/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/rollups/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"LUKSO",permalink:"/docs/user/staking/lukso/solo"},next:{title:"Optimism Rollup",permalink:"/docs/user/rollups/optimism"}},a={},u=[{value:"Enable rollups",id:"enable-rollups",level:2}];function c(e){const n={a:"a",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"ethereum-rollups-an-overview",children:"Ethereum Rollups: An Overview"}),"\n",(0,o.jsx)(n.p,{children:"Rollups are advanced layer-2 scaling solutions designed to increase the throughput of the Ethereum network. By executing and storing transaction data off the main Ethereum chain while keeping a cryptographic commitment on-chain, Rollups enhance scalability and reduce fees. Rollups can be broadly categorized into two types: Optimistic Rollups and zk-Rollups, each with its unique approach and trade-offs."}),"\n",(0,o.jsx)(n.p,{children:"Currently, we support:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"/docs/user/rollups/optimism",children:(0,o.jsxs)(n.strong,{children:["\ud83c\udf40"," Optimism"]})}),": An optimistic Layer 2 solution for Ethereum, enhancing speed and efficiency."]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"enable-rollups",children:"Enable rollups"}),"\n",(0,o.jsx)(n.p,{children:"To enable this feature, you need to switch on the rollups module in the top bar of the Dappnode UI (Dappmanager):"}),"\n",(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{width:"70%",src:"/img/rollups-module.png"})})]})}function p(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>i});var o=t(7294);const s={},r=o.createContext(s);function i(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b4800274.89df982d.js b/assets/js/b4800274.89df982d.js deleted file mode 100644 index 1ba4ccb97..000000000 --- a/assets/js/b4800274.89df982d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5561],{4137:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=p(r),m=o,f=c["".concat(s,".").concat(m)]||c[m]||d[m]||a;return r?n.createElement(f,l(l({ref:t},u),{},{components:r})):n.createElement(f,l({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[c]="string"==typeof e?e:o,l[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var n=r(7462),o=(r(7294),r(4137));const a={},l="Ethereum Rollups: An Overview",i={unversionedId:"user/rollups/overview",id:"user/rollups/overview",title:"Ethereum Rollups: An Overview",description:"Rollups are advanced layer-2 scaling solutions designed to increase the throughput of the Ethereum network. By executing and storing transaction data off the main Ethereum chain while keeping a cryptographic commitment on-chain, Rollups enhance scalability and reduce fees. Rollups can be broadly categorized into two types: Optimistic Rollups and zk-Rollups, each with its unique approach and trade-offs.",source:"@site/docs/user/rollups/overview.md",sourceDirName:"user/rollups",slug:"/user/rollups/overview",permalink:"/docs/user/rollups/overview",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/rollups/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"LUKSO",permalink:"/docs/user/staking/lukso/solo"},next:{title:"Optimism Rollup",permalink:"/docs/user/rollups/optimism"}},s={},p=[{value:"Enable rollups",id:"enable-rollups",level:2}],u={toc:p},c="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(c,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"ethereum-rollups-an-overview"},"Ethereum Rollups: An Overview"),(0,o.kt)("p",null,"Rollups are advanced layer-2 scaling solutions designed to increase the throughput of the Ethereum network. By executing and storing transaction data off the main Ethereum chain while keeping a cryptographic commitment on-chain, Rollups enhance scalability and reduce fees. Rollups can be broadly categorized into two types: Optimistic Rollups and zk-Rollups, each with its unique approach and trade-offs."),(0,o.kt)("p",null,"Currently, we support:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/docs/user/rollups/optimism"},(0,o.kt)("strong",{parentName:"a"},"\ud83c\udf40 Optimism")),": An optimistic Layer 2 solution for Ethereum, enhancing speed and efficiency.")),(0,o.kt)("h2",{id:"enable-rollups"},"Enable rollups"),(0,o.kt)("p",null,"To enable this feature, you need to switch on the rollups module in the top bar of the Dappnode UI (Dappmanager):"),(0,o.kt)("p",{align:"center"},(0,o.kt)("img",{width:"70%",src:"/img/rollups-module.png"})))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b9c10046.95b35c48.js b/assets/js/b9c10046.95b35c48.js new file mode 100644 index 000000000..7895e44c2 --- /dev/null +++ b/assets/js/b9c10046.95b35c48.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4765],{7821:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>d,contentTitle:()=>r,default:()=>l,frontMatter:()=>a,metadata:()=>n,toc:()=>c});var s=o(5893),i=o(1151);const a={},r="Automatic Subscription",n={id:"smooth/subscribe-to-smooth/automatic",title:"Automatic Subscription",description:"This is the simplest way to subscribe to Smooth. It consists of changing the fee recipient of your validator to Smooth's address and subscribing automatically when proposing your next block.",source:"@site/docs/smooth/subscribe-to-smooth/automatic.md",sourceDirName:"smooth/subscribe-to-smooth",slug:"/smooth/subscribe-to-smooth/automatic",permalink:"/docs/smooth/subscribe-to-smooth/automatic",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/subscribe-to-smooth/automatic.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Subscribing to Smooth",permalink:"/docs/smooth/subscribe-to-smooth/overview"},next:{title:"Manual Subscription",permalink:"/docs/smooth/subscribe-to-smooth/manual"}},d={},c=[{value:"Step 1: Change your fee recipient to Smooth's address.",id:"step-1-change-your-fee-recipient-to-smooths-address",level:3},{value:"Step 2: Check your subscription status!",id:"step-2-check-your-subscription-status",level:3}];function h(t){const e={a:"a",admonition:"admonition",code:"code",h1:"h1",h3:"h3",img:"img",p:"p",...(0,i.a)(),...t.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(e.h1,{id:"automatic-subscription",children:"Automatic Subscription"}),"\n",(0,s.jsxs)(e.p,{children:["This is the simplest way to subscribe to ",(0,s.jsx)(e.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". It consists of changing the fee recipient of your validator to Smooth's address and subscribing automatically when proposing your next block."]}),"\n",(0,s.jsxs)(e.admonition,{title:"Before automatically subscribing to Smooth!",type:"danger",children:[(0,s.jsx)(e.p,{children:"Only validators with ETH1 withdrawal addresses can be subscribed to Smooth. If you have a validator with a BLS withdrawal address, please update it to an ETH1 withdrawal address before subscribing to Smooth."}),(0,s.jsx)(e.p,{children:"Ensure that you have control over the ETH1 withdrawal address of the validators you plan to subscribe to Smooth. This address is the one you will need to use when logging into Smooth's website and manage your validators going forward. Only the withdrawal address has the capability to claim rewards generated by your validators from Smooth."})]}),"\n",(0,s.jsx)(e.h3,{id:"step-1-change-your-fee-recipient-to-smooths-address",children:"Step 1: Change your fee recipient to Smooth's address."}),"\n",(0,s.jsxs)(e.p,{children:["Go to your dappnode's ",(0,s.jsx)(e.a,{href:"http://brain.web3signer.dappnode/",children:"staking brain"})," and change the fee recipient of the validators you want to subscribe to Smooth's address (",(0,s.jsx)(e.code,{children:"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"}),"). Once ",(0,s.jsx)(e.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," receives the rewards from your validator, it will automatically subscribe your validator, and you will start receiving rewards from other members.\n",(0,s.jsx)(e.img,{alt:"fee_recipient",src:o(4257).Z+"",width:"2728",height:"552"})]}),"\n",(0,s.jsx)(e.admonition,{title:"Keep the fee recipient set to Smooth's address!",type:"danger",children:(0,s.jsxs)(e.p,{children:["It is extremely important that you keep the fee recipient of your validator set to Smooth's address (",(0,s.jsx)(e.code,{children:"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"}),") as long as it is subscribed to ",(0,s.jsx)(e.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". If, at any point, you change the fee recipient of your validator and propose a block without unsubscribing first, you will be banned from ",(0,s.jsx)(e.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," and will not be able to participate in it again."]})}),"\n",(0,s.jsx)(e.h3,{id:"step-2-check-your-subscription-status",children:"Step 2: Check your subscription status!"}),"\n",(0,s.jsxs)(e.p,{children:["Go to ",(0,s.jsx)(e.a,{href:"https://smooth.dappnode.io/",children:"Smooth's website"})," and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear. Once the validator proposes a block, it will appear as subscribed. We recommend you familiarize yourself with this website! It is the place where you will manage your validators going forward."]})]})}function l(t={}){const{wrapper:e}={...(0,i.a)(),...t.components};return e?(0,s.jsx)(e,{...t,children:(0,s.jsx)(h,{...t})}):h(t)}},4257:(t,e,o)=>{o.d(e,{Z:()=>s});const s=o.p+"assets/images/smooth_fee_recipient-9a97308ed0c601ccc84b0295efe34cd4.png"},1151:(t,e,o)=>{o.d(e,{Z:()=>n,a:()=>r});var s=o(7294);const i={},a=s.createContext(i);function r(t){const e=s.useContext(a);return s.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function n(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:r(t.components),s.createElement(a.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/b9c10046.aaa11874.js b/assets/js/b9c10046.aaa11874.js deleted file mode 100644 index 72e5e6b4c..000000000 --- a/assets/js/b9c10046.aaa11874.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4765],{4137:(e,t,o)=>{o.d(t,{Zo:()=>d,kt:()=>m});var r=o(7294);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function s(e){for(var t=1;t =0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var c=r.createContext({}),p=function(e){var t=r.useContext(c),o=t;return e&&(o="function"==typeof e?e(t):s(s({},t),e)),o},d=function(e){var t=p(e.components);return r.createElement(c.Provider,{value:t},e.children)},l="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},h=r.forwardRef((function(e,t){var o=e.components,a=e.mdxType,i=e.originalType,c=e.parentName,d=n(e,["components","mdxType","originalType","parentName"]),l=p(o),h=a,m=l["".concat(c,".").concat(h)]||l[h]||u[h]||i;return o?r.createElement(m,s(s({ref:t},d),{},{components:o})):r.createElement(m,s({ref:t},d))}));function m(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=o.length,s=new Array(i);s[0]=h;var n={};for(var c in t)hasOwnProperty.call(t,c)&&(n[c]=t[c]);n.originalType=e,n[l]="string"==typeof e?e:a,s[1]=n;for(var p=2;p{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>i,metadata:()=>n,toc:()=>p});var r=o(7462),a=(o(7294),o(4137));const i={},s="Automatic Subscription",n={unversionedId:"smooth/subscribe-to-smooth/automatic",id:"smooth/subscribe-to-smooth/automatic",title:"Automatic Subscription",description:"This is the simplest way to subscribe to Smooth. It consists of changing the fee recipient of your validator to Smooth's address and subscribing automatically when proposing your next block.",source:"@site/docs/smooth/subscribe-to-smooth/automatic.md",sourceDirName:"smooth/subscribe-to-smooth",slug:"/smooth/subscribe-to-smooth/automatic",permalink:"/docs/smooth/subscribe-to-smooth/automatic",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/subscribe-to-smooth/automatic.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Subscribing to Smooth",permalink:"/docs/smooth/subscribe-to-smooth/overview"},next:{title:"Manual Subscription",permalink:"/docs/smooth/subscribe-to-smooth/manual"}},c={},p=[{value:"Step 1: Change your fee recipient to Smooth's address.",id:"step-1-change-your-fee-recipient-to-smooths-address",level:3},{value:"Step 2: Check your subscription status!",id:"step-2-check-your-subscription-status",level:3}],d={toc:p},l="wrapper";function u(e){let{components:t,...i}=e;return(0,a.kt)(l,(0,r.Z)({},d,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"automatic-subscription"},"Automatic Subscription"),(0,a.kt)("p",null,"This is the simplest way to subscribe to ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". It consists of changing the fee recipient of your validator to Smooth's address and subscribing automatically when proposing your next block."),(0,a.kt)("admonition",{title:"Before automatically subscribing to Smooth!",type:"danger"},(0,a.kt)("p",{parentName:"admonition"},"Only validators with ETH1 withdrawal addresses can be subscribed to Smooth. If you have a validator with a BLS withdrawal address, please update it to an ETH1 withdrawal address before subscribing to Smooth."),(0,a.kt)("p",{parentName:"admonition"},"Ensure that you have control over the ETH1 withdrawal address of the validators you plan to subscribe to Smooth. This address is the one you will need to use when logging into Smooth's website and manage your validators going forward. Only the withdrawal address has the capability to claim rewards generated by your validators from Smooth.")),(0,a.kt)("h3",{id:"step-1-change-your-fee-recipient-to-smooths-address"},"Step 1: Change your fee recipient to Smooth's address."),(0,a.kt)("p",null,"Go to your dappnode's ",(0,a.kt)("a",{parentName:"p",href:"http://brain.web3signer.dappnode/"},"staking brain")," and change the fee recipient of the validators you want to subscribe to Smooth's address (",(0,a.kt)("inlineCode",{parentName:"p"},"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"),"). Once ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," receives the rewards from your validator, it will automatically subscribe your validator, and you will start receiving rewards from other members.\n",(0,a.kt)("img",{alt:"fee_recipient",src:o(4257).Z,width:"2728",height:"552"})),(0,a.kt)("admonition",{title:"Keep the fee recipient set to Smooth's address!",type:"danger"},(0,a.kt)("p",{parentName:"admonition"},"It is extremely important that you keep the fee recipient of your validator set to Smooth's address (",(0,a.kt)("inlineCode",{parentName:"p"},"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"),") as long as it is subscribed to ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". If, at any point, you change the fee recipient of your validator and propose a block without unsubscribing first, you will be banned from ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," and will not be able to participate in it again.")),(0,a.kt)("h3",{id:"step-2-check-your-subscription-status"},"Step 2: Check your subscription status!"),(0,a.kt)("p",null,"Go to ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth's website")," and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear. Once the validator proposes a block, it will appear as subscribed. We recommend you familiarize yourself with this website! It is the place where you will manage your validators going forward."))}u.isMDXComponent=!0},4257:(e,t,o)=>{o.d(t,{Z:()=>r});const r=o.p+"assets/images/smooth_fee_recipient-9a97308ed0c601ccc84b0295efe34cd4.png"}}]); \ No newline at end of file diff --git a/assets/js/c38c9aa9.6c6bbdc1.js b/assets/js/c38c9aa9.6c6bbdc1.js deleted file mode 100644 index 8ff314197..000000000 --- a/assets/js/c38c9aa9.6c6bbdc1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8330],{4137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var i=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function r(e){for(var t=1;t =0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=i.createContext({}),p=function(e){var t=i.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},u=function(e){var t=p(e.components);return i.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},m=i.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(n),m=a,f=c["".concat(l,".").concat(m)]||c[m]||d[m]||o;return n?i.createElement(f,r(r({ref:t},u),{},{components:n})):i.createElement(f,r({ref:t},u))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,r=new Array(o);r[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:a,r[1]=s;for(var p=2;p {n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var i=n(7462),a=(n(7294),n(4137));const o={},r="Installation Overview",s={unversionedId:"user/install/overview",id:"user/install/overview",title:"Installation Overview",description:"Specifications & Minimum Requirements",source:"@site/docs/user/install/overview.md",sourceDirName:"user/install",slug:"/user/install/overview",permalink:"/docs/user/install/overview",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/install/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"IPFS repository",permalink:"/docs/user/repository/ipfs"},next:{title:"ISO Installation",permalink:"/docs/user/install/iso"}},l={},p=[{value:"Specifications & Minimum Requirements",id:"specifications--minimum-requirements",level:2},{value:"Installation Methods",id:"installation-methods",level:2},{value:"1. ISO Installation",id:"1-iso-installation",level:3},{value:"2. Script Installation over Debian-based Distribution",id:"2-script-installation-over-debian-based-distribution",level:3}],u={toc:p},c="wrapper";function d(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,i.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"installation-overview"},"Installation Overview"),(0,a.kt)("h2",{id:"specifications--minimum-requirements"},"Specifications & Minimum Requirements"),(0,a.kt)("p",null,"Dappnode is a Debian-based OS, which makes it friendly with most available commercial hardware. Depending on what you intend to run in your Dappnode you might need higher specifications, but a great number of available features can be used with the following recommendations:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Intel Core i5/i7"),(0,a.kt)("li",{parentName:"ul"},"32 GB RAM"),(0,a.kt)("li",{parentName:"ul"},"4 TB NVMe storage")),(0,a.kt)("p",null,"As minimum requirements we recommend:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Intel Core i3"),(0,a.kt)("li",{parentName:"ul"},"16 GB RAM"),(0,a.kt)("li",{parentName:"ul"},"2 TB NVMe or fast SSD storage")),(0,a.kt)("p",null,"If you don't have enough technical experience to customize your own hardware, remember you can always get a plug n play ",(0,a.kt)("a",{parentName:"p",href:"https://dappnode.com/collections/all"},"Dappnode Home")," in our online shop."),(0,a.kt)("h2",{id:"installation-methods"},"Installation Methods"),(0,a.kt)("p",null,"Installing Dappnode can be achieved through two primary methods:"),(0,a.kt)("h3",{id:"1-iso-installation"},"1. ",(0,a.kt)("a",{parentName:"h3",href:"/docs/user/install/iso"},"ISO Installation")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Description"),": This method involves downloading the Dappnode ISO file and using it to directly install Dappnode on your system."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Best for"),": Most users as it provides a comprehensive setup designed specifically for Dappnode.")),(0,a.kt)("h3",{id:"2-script-installation-over-debian-based-distribution"},"2. ",(0,a.kt)("a",{parentName:"h3",href:"/docs/user/install/script"},"Script Installation")," over Debian-based Distribution"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Description"),": If you're already running a Debian-based distribution, you can utilize the Dappnode script to facilitate the installation process."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Best for"),": Users who want to install Dappnode on a cloud server, ARM device (where it's the only option), or those who desire a specific Debian-based distro.")),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},"For ARM-based systems, only the script installation method is available.")),(0,a.kt)("p",null,"Choose the method that best fits your needs and system setup. Make sure to follow the respective installation instructions carefully for a smooth and successful Dappnode deployment."),(0,a.kt)("admonition",{title:"Continuous Uptime",type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"Dappnode is designed to run 24/7. Many features and functions within Dappnode, especially blockchain nodes, rely on continuous uptime to maintain their state, sync, and functionality. For instance:"),(0,a.kt)("ul",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Blockchain Nodes"),": If you have a synced blockchain node and you turn off Dappnode, the node will lose its sync. This means when you turn it back on, it'll take time to catch up to the latest state, which can be resource-intensive and time-consuming.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Validator Nodes"),": For users staking on certain blockchain networks, continuous uptime is crucial. Being offline might result in missed opportunities or even penalties."))),(0,a.kt)("p",{parentName:"admonition"},"Considering these aspects, it's recommended to ensure your Dappnode device remains powered on and running at all times.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c38c9aa9.7435fbbf.js b/assets/js/c38c9aa9.7435fbbf.js new file mode 100644 index 000000000..58cf68bed --- /dev/null +++ b/assets/js/c38c9aa9.7435fbbf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8330],{6993:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>r,toc:()=>d});var s=i(5893),t=i(1151);const o={},a="Installation Overview",r={id:"user/install/overview",title:"Installation Overview",description:"Specifications & Minimum Requirements",source:"@site/docs/user/install/overview.md",sourceDirName:"user/install",slug:"/user/install/overview",permalink:"/docs/user/install/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/install/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"IPFS repository",permalink:"/docs/user/repository/ipfs"},next:{title:"ISO Installation",permalink:"/docs/user/install/iso"}},l={},d=[{value:"Specifications & Minimum Requirements",id:"specifications--minimum-requirements",level:2},{value:"Installation Methods",id:"installation-methods",level:2},{value:"1. ISO Installation",id:"1-iso-installation",level:3},{value:"2. Script Installation over Debian-based Distribution",id:"2-script-installation-over-debian-based-distribution",level:3}];function c(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"installation-overview",children:"Installation Overview"}),"\n",(0,s.jsx)(n.h2,{id:"specifications--minimum-requirements",children:"Specifications & Minimum Requirements"}),"\n",(0,s.jsx)(n.p,{children:"Dappnode is a Debian-based OS, which makes it friendly with most available commercial hardware. Depending on what you intend to run in your Dappnode you might need higher specifications, but a great number of available features can be used with the following recommendations:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Intel Core i5/i7"}),"\n",(0,s.jsx)(n.li,{children:"32 GB RAM"}),"\n",(0,s.jsx)(n.li,{children:"4 TB NVMe storage"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"As minimum requirements we recommend:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Intel Core i3"}),"\n",(0,s.jsx)(n.li,{children:"16 GB RAM"}),"\n",(0,s.jsx)(n.li,{children:"2 TB NVMe or fast SSD storage"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["If you don't have enough technical experience to customize your own hardware, remember you can always get a plug n play ",(0,s.jsx)(n.a,{href:"https://dappnode.com/collections/all",children:"Dappnode Home"})," in our online shop."]}),"\n",(0,s.jsx)(n.h2,{id:"installation-methods",children:"Installation Methods"}),"\n",(0,s.jsx)(n.p,{children:"Installing Dappnode can be achieved through two primary methods:"}),"\n",(0,s.jsxs)(n.h3,{id:"1-iso-installation",children:["1. ",(0,s.jsx)(n.a,{href:"/docs/user/install/iso",children:"ISO Installation"})]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Description"}),": This method involves downloading the Dappnode ISO file and using it to directly install Dappnode on your system."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Best for"}),": Most users as it provides a comprehensive setup designed specifically for Dappnode."]}),"\n"]}),"\n",(0,s.jsxs)(n.h3,{id:"2-script-installation-over-debian-based-distribution",children:["2. ",(0,s.jsx)(n.a,{href:"/docs/user/install/script",children:"Script Installation"})," over Debian-based Distribution"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Description"}),": If you're already running a Debian-based distribution, you can utilize the Dappnode script to facilitate the installation process."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Best for"}),": Users who want to install Dappnode on a cloud server, ARM device (where it's the only option), or those who desire a specific Debian-based distro."]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"For ARM-based systems, only the script installation method is available."})}),"\n",(0,s.jsx)(n.p,{children:"Choose the method that best fits your needs and system setup. Make sure to follow the respective installation instructions carefully for a smooth and successful Dappnode deployment."}),"\n",(0,s.jsxs)(n.admonition,{title:"Continuous Uptime",type:"caution",children:[(0,s.jsx)(n.p,{children:"Dappnode is designed to run 24/7. Many features and functions within Dappnode, especially blockchain nodes, rely on continuous uptime to maintain their state, sync, and functionality. For instance:"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Blockchain Nodes"}),": If you have a synced blockchain node and you turn off Dappnode, the node will lose its sync. This means when you turn it back on, it'll take time to catch up to the latest state, which can be resource-intensive and time-consuming."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Validator Nodes"}),": For users staking on certain blockchain networks, continuous uptime is crucial. Being offline might result in missed opportunities or even penalties."]}),"\n"]}),"\n"]}),(0,s.jsx)(n.p,{children:"Considering these aspects, it's recommended to ensure your Dappnode device remains powered on and running at all times."})]})]})}function u(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},1151:(e,n,i)=>{i.d(n,{Z:()=>r,a:()=>a});var s=i(7294);const t={},o=s.createContext(t);function a(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c7a466cb.479665d6.js b/assets/js/c7a466cb.479665d6.js new file mode 100644 index 000000000..c8fe86d11 --- /dev/null +++ b/assets/js/c7a466cb.479665d6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[78],{5367:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var s=r(5893),t=r(1151);const o={},i="Register",c={id:"user/getting-started/register",title:"Register",description:"1. Register as New User",source:"@site/docs/user/getting-started/register.md",sourceDirName:"user/getting-started",slug:"/user/getting-started/register",permalink:"/docs/user/getting-started/register",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/getting-started/register.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Access Dappnode via Wi-Fi",permalink:"/docs/user/getting-started/access-dappnode-via-wifi"},next:{title:"Setup",permalink:"/docs/user/getting-started/setup"}},d={},l=[{value:"1. Register as New User",id:"1-register-as-new-user",level:2},{value:"2. Secure Your Recovery Token",id:"2-secure-your-recovery-token",level:2},{value:"3. Logging In",id:"3-logging-in",level:2},{value:"Troubleshooting",id:"troubleshooting",level:3}];function a(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components},{Details:r}=n;return r||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"register",children:"Register"}),"\n",(0,s.jsx)(n.h2,{id:"1-register-as-new-user",children:"1. Register as New User"}),"\n",(0,s.jsx)(n.p,{children:"Start by setting up your new account:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Input"})," your desired ",(0,s.jsx)(n.strong,{children:"Username"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Select a secure password"}),". It should include a combination of characters, numbers, and special symbols for optimal security."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Confirm your password"})," to ensure accuracy."]}),"\n",(0,s.jsxs)(n.li,{children:["Click the ",(0,s.jsx)(n.strong,{children:"Register"})," button."]}),"\n"]}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{width:"50%",src:"/img/register.png",alt:"Register"})}),"\n",(0,s.jsx)(n.h2,{id:"2-secure-your-recovery-token",children:"2. Secure Your Recovery Token"}),"\n",(0,s.jsx)(n.p,{children:"Upon successful registration, you'll be provided with a Recovery Token. This token is crucial for:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Retrieving your password if forgotten."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Regaining account access if needed."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"To safeguard your token"}),":"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:'Click the button or link labeled "View Recovery Token".'}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Diligently copy the token and store it in a safe location."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsx)(n.p,{children:"We recommend that you store your token in both digital (encrypted) and physical forms (noted and stored securely). If you lose access to both your password and token, you will lose access to your account."})}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{width:"50%",src:"/img/register-token.png",alt:"Recovery Token"})}),"\n",(0,s.jsx)(n.h2,{id:"3-logging-in",children:"3. Logging In"}),"\n",(0,s.jsx)(n.p,{children:"With your account ready and Recovery Token secured:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Proceed to the ",(0,s.jsx)(n.strong,{children:"Login"})," page."]}),"\n",(0,s.jsxs)(n.li,{children:["Input your ",(0,s.jsx)(n.strong,{children:"Username"})," and ",(0,s.jsx)(n.strong,{children:"Password"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Press the ",(0,s.jsx)(n.strong,{children:"Login"})," button to dive into your Dappnode account."]}),"\n"]}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{width:"50%",src:"/img/register-login.png",alt:"Login"})}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h3,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,s.jsx)(r,{children:(0,s.jsxs)(n.p,{children:[(0,s.jsx)("summary",{children:(0,s.jsx)("b",{children:"Want to change your password?"})}),"\nVisit ",(0,s.jsx)("a",{href:"http://my.dappnode/system/profile",children:"Profile Settings"})," to reset it."]})}),"\n",(0,s.jsx)(r,{children:(0,s.jsxs)(n.p,{children:[(0,s.jsx)("summary",{children:(0,s.jsx)("b",{children:"Forgot your password?"})}),"\nGo to the ",(0,s.jsx)("a",{href:"http://my.dappnode/",children:"Login"})," page and click on \"Forgot your password?\". You'll be prompted to enter the recovery token you saved during registration. Once entered, you'll be able to reset your password."]})}),"\n",(0,s.jsxs)(r,{children:[(0,s.jsxs)(n.p,{children:[(0,s.jsx)("summary",{children:(0,s.jsx)("b",{children:"Lost your recovery token?"})}),"\nIf you've lost your recovery token, there is still a chance to regain access to the Dappmanager UI. However, you will require ",(0,s.jsx)("a",{href:"/docs/user/access-your-dappnode/terminal",children:"accessing via terminal"}),". Once you are in, you can get your recovery token by running the following command:"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cat /usr/src/dappnode/DNCORE/admin-recovery-token.txt\n"})})]})]})}function u(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>c,a:()=>i});var s=r(7294);const t={},o=s.createContext(t);function i(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c7a466cb.e0d756fb.js b/assets/js/c7a466cb.e0d756fb.js deleted file mode 100644 index 48c598a0c..000000000 --- a/assets/js/c7a466cb.e0d756fb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[78],{4137:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),u=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},p="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=u(r),d=o,m=p["".concat(l,".").concat(d)]||p[d]||g[d]||a;return r?n.createElement(m,i(i({ref:t},c),{},{components:r})):n.createElement(m,i({ref:t},c))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:o,i[1]=s;for(var u=2;u{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>g,frontMatter:()=>a,metadata:()=>s,toc:()=>u});var n=r(7462),o=(r(7294),r(4137));const a={},i="Register",s={unversionedId:"user/getting-started/register",id:"user/getting-started/register",title:"Register",description:"1. Register as New User",source:"@site/docs/user/getting-started/register.md",sourceDirName:"user/getting-started",slug:"/user/getting-started/register",permalink:"/docs/user/getting-started/register",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/getting-started/register.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Access Dappnode via Wi-Fi",permalink:"/docs/user/getting-started/access-dappnode-via-wifi"},next:{title:"Setup",permalink:"/docs/user/getting-started/setup"}},l={},u=[{value:"1. Register as New User",id:"1-register-as-new-user",level:2},{value:"2. Secure Your Recovery Token",id:"2-secure-your-recovery-token",level:2},{value:"3. Logging In",id:"3-logging-in",level:2},{value:"Troubleshooting",id:"troubleshooting",level:3}],c={toc:u},p="wrapper";function g(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"register"},"Register"),(0,o.kt)("h2",{id:"1-register-as-new-user"},"1. Register as New User"),(0,o.kt)("p",null,"Start by setting up your new account:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Input")," your desired ",(0,o.kt)("strong",{parentName:"li"},"Username"),"."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Select a secure password"),". It should include a combination of characters, numbers, and special symbols for optimal security."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Confirm your password")," to ensure accuracy."),(0,o.kt)("li",{parentName:"ol"},"Click the ",(0,o.kt)("strong",{parentName:"li"},"Register")," button.")),(0,o.kt)("p",{align:"center"},(0,o.kt)("img",{width:"50%",src:"/img/register.png",alt:"Register"})),(0,o.kt)("h2",{id:"2-secure-your-recovery-token"},"2. Secure Your Recovery Token"),(0,o.kt)("p",null,"Upon successful registration, you'll be provided with a Recovery Token. This token is crucial for:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Retrieving your password if forgotten.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Regaining account access if needed."),(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"To safeguard your token"),":")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},'Click the button or link labeled "View Recovery Token".')),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Diligently copy the token and store it in a safe location."))),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"We recommend that you store your token in both digital (encrypted) and physical forms (noted and stored securely). If you lose access to both your password and token, you will lose access to your account.")),(0,o.kt)("p",{align:"center"},(0,o.kt)("img",{width:"50%",src:"/img/register-token.png",alt:"Recovery Token"})),(0,o.kt)("h2",{id:"3-logging-in"},"3. Logging In"),(0,o.kt)("p",null,"With your account ready and Recovery Token secured:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Proceed to the ",(0,o.kt)("strong",{parentName:"li"},"Login")," page."),(0,o.kt)("li",{parentName:"ol"},"Input your ",(0,o.kt)("strong",{parentName:"li"},"Username")," and ",(0,o.kt)("strong",{parentName:"li"},"Password"),"."),(0,o.kt)("li",{parentName:"ol"},"Press the ",(0,o.kt)("strong",{parentName:"li"},"Login")," button to dive into your Dappnode account.")),(0,o.kt)("p",{align:"center"},(0,o.kt)("img",{width:"50%",src:"/img/register-login.png",alt:"Login"})),(0,o.kt)("hr",null),(0,o.kt)("h3",{id:"troubleshooting"},"Troubleshooting"),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("b",null,"Want to change your password?")),"Visit ",(0,o.kt)("a",{href:"http://my.dappnode/system/profile"},"Profile Settings")," to reset it."),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("b",null,"Forgot your password?")),"Go to the ",(0,o.kt)("a",{href:"http://my.dappnode/"},"Login")," page and click on \"Forgot your password?\". You'll be prompted to enter the recovery token you saved during registration. Once entered, you'll be able to reset your password."),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("b",null,"Lost your recovery token?")),"If you've lost your recovery token, there is still a chance to regain access to the Dappmanager UI. However, you will require ",(0,o.kt)("a",{href:"/docs/user/access-your-dappnode/terminal"},"accessing via terminal"),". Once you are in, you can get your recovery token by running the following command:",(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"cat /usr/src/dappnode/DNCORE/admin-recovery-token.txt\n"))))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c9627cbc.93c4a5f2.js b/assets/js/c9627cbc.93c4a5f2.js deleted file mode 100644 index 0f88c219d..000000000 --- a/assets/js/c9627cbc.93c4a5f2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[468],{4137:(e,t,o)=>{o.d(t,{Zo:()=>d,kt:()=>w});var r=o(7294);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function n(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function i(e){for(var t=1;t =0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var u=r.createContext({}),c=function(e){var t=r.useContext(u),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},d=function(e){var t=c(e.components);return r.createElement(u.Provider,{value:t},e.children)},l="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},h=r.forwardRef((function(e,t){var o=e.components,a=e.mdxType,n=e.originalType,u=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),l=c(o),h=a,w=l["".concat(u,".").concat(h)]||l[h]||p[h]||n;return o?r.createElement(w,i(i({ref:t},d),{},{components:o})):r.createElement(w,i({ref:t},d))}));function w(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=o.length,i=new Array(n);i[0]=h;var s={};for(var u in t)hasOwnProperty.call(t,u)&&(s[u]=t[u]);s.originalType=e,s[l]="string"==typeof e?e:a,i[1]=s;for(var c=2;c {o.r(t),o.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>p,frontMatter:()=>n,metadata:()=>s,toc:()=>c});var r=o(7462),a=(o(7294),o(4137));const n={},i="Crash Course",s={unversionedId:"user/videos-and-tutorials/crash-course",id:"user/videos-and-tutorials/crash-course",title:"Crash Course",description:"Want to learn more about Dappnode through video tutorials? Check out our Dappnode Driving School!",source:"@site/docs/user/videos-and-tutorials/crash-course.md",sourceDirName:"user/videos-and-tutorials",slug:"/user/videos-and-tutorials/crash-course",permalink:"/docs/user/videos-and-tutorials/crash-course",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/videos-and-tutorials/crash-course.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"2. Configuring your Dappnode",permalink:"/docs/user/videos-and-tutorials/driving-school/configuration"},next:{title:"How to Connect to My Blockchain Node",permalink:"/docs/user/videos-and-tutorials/guides/connect-node"}},u={},c=[{value:"1. How to set up Dappnode from scratch using your own hardware",id:"1-how-to-set-up-dappnode-from-scratch-using-your-own-hardware",level:2},{value:"2. How to set up a validator",id:"2-how-to-set-up-a-validator",level:2},{value:"3. How to setup Stakehouse node operator",id:"3-how-to-setup-stakehouse-node-operator",level:2},{value:"4. How to withdraw your staked ETH",id:"4-how-to-withdraw-your-staked-eth",level:2},{value:"5. How to subscribe your validator to Smooth \ud83d\ude0e",id:"5-how-to-subscribe-your-validator-to-smooth-",level:2},{value:"6. How to earn rewards with your Dappnode without investing",id:"6-how-to-earn-rewards-with-your-dappnode-without-investing",level:2}],d={toc:c},l="wrapper";function p(e){let{components:t,...o}=e;return(0,a.kt)(l,(0,r.Z)({},d,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"crash-course"},"Crash Course"),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Want to learn more about Dappnode through video tutorials? Check out our ",(0,a.kt)("strong",{parentName:"p"},(0,a.kt)("a",{parentName:"strong",href:"/docs/user/videos-and-tutorials/driving-school/initial-setup"},"Dappnode Driving School!"))," ")),(0,a.kt)("p",null,"Every now and then we get together in our Dappnode Discord Community to offer live workshops on how to achieve different features and tricks with your Dappnode. These sessions are uploaded to our YouTube channel, so you can watch them at your own pace. Here are a few past editions you might find interesting!"),(0,a.kt)("h2",{id:"1-how-to-set-up-dappnode-from-scratch-using-your-own-hardware"},"1. How to set up Dappnode from scratch using your own hardware"),(0,a.kt)("center",null,(0,a.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/VBUIIV8Jo_U",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,a.kt)("h2",{id:"2-how-to-set-up-a-validator"},"2. How to set up a validator"),(0,a.kt)("center",null,(0,a.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/Bc6FomfhkbI",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,a.kt)("h2",{id:"3-how-to-setup-stakehouse-node-operator"},"3. How to setup Stakehouse node operator"),(0,a.kt)("center",null,(0,a.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/tQwy096M8L8",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,a.kt)("h2",{id:"4-how-to-withdraw-your-staked-eth"},"4. How to withdraw your staked ETH"),(0,a.kt)("center",null,(0,a.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/1uxOIcR92uQ",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,a.kt)("h2",{id:"5-how-to-subscribe-your-validator-to-smooth-"},"5. How to subscribe your validator to Smooth \ud83d\ude0e"),(0,a.kt)("center",null,(0,a.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/1ZJUEiAFtSw",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,a.kt)("h2",{id:"6-how-to-earn-rewards-with-your-dappnode-without-investing"},"6. How to earn rewards with your Dappnode without investing"),(0,a.kt)("center",null,(0,a.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/nLH4632sAKg",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c9627cbc.c22bd77f.js b/assets/js/c9627cbc.c22bd77f.js new file mode 100644 index 000000000..9ef28a104 --- /dev/null +++ b/assets/js/c9627cbc.c22bd77f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[468],{1726:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>d,contentTitle:()=>n,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var r=t(5893),s=t(1151);const a={},n="Crash Course",i={id:"user/videos-and-tutorials/crash-course",title:"Crash Course",description:"Want to learn more about Dappnode through video tutorials? Check out our Dappnode Driving School!",source:"@site/docs/user/videos-and-tutorials/crash-course.md",sourceDirName:"user/videos-and-tutorials",slug:"/user/videos-and-tutorials/crash-course",permalink:"/docs/user/videos-and-tutorials/crash-course",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/videos-and-tutorials/crash-course.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"2. Configuring your Dappnode",permalink:"/docs/user/videos-and-tutorials/driving-school/configuration"},next:{title:"How to Connect to My Blockchain Node",permalink:"/docs/user/videos-and-tutorials/guides/connect-node"}},d={},u=[{value:"1. How to set up Dappnode from scratch using your own hardware",id:"1-how-to-set-up-dappnode-from-scratch-using-your-own-hardware",level:2},{value:"2. How to set up a validator",id:"2-how-to-set-up-a-validator",level:2},{value:"3. How to setup Stakehouse node operator",id:"3-how-to-setup-stakehouse-node-operator",level:2},{value:"4. How to withdraw your staked ETH",id:"4-how-to-withdraw-your-staked-eth",level:2},{value:"5. How to subscribe your validator to Smooth \ud83d\ude0e",id:"5-how-to-subscribe-your-validator-to-smooth-",level:2},{value:"6. How to earn rewards with your Dappnode without investing",id:"6-how-to-earn-rewards-with-your-dappnode-without-investing",level:2}];function c(e){const o={a:"a",admonition:"admonition",h1:"h1",h2:"h2",p:"p",strong:"strong",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(o.h1,{id:"crash-course",children:"Crash Course"}),"\n",(0,r.jsx)(o.admonition,{type:"info",children:(0,r.jsxs)(o.p,{children:["Want to learn more about Dappnode through video tutorials? Check out our ",(0,r.jsx)(o.strong,{children:(0,r.jsx)(o.a,{href:"/docs/user/videos-and-tutorials/driving-school/initial-setup",children:"Dappnode Driving School!"})})]})}),"\n",(0,r.jsx)(o.p,{children:"Every now and then we get together in our Dappnode Discord Community to offer live workshops on how to achieve different features and tricks with your Dappnode. These sessions are uploaded to our YouTube channel, so you can watch them at your own pace. Here are a few past editions you might find interesting!"}),"\n",(0,r.jsx)(o.h2,{id:"1-how-to-set-up-dappnode-from-scratch-using-your-own-hardware",children:"1. How to set up Dappnode from scratch using your own hardware"}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/VBUIIV8Jo_U",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)(o.h2,{id:"2-how-to-set-up-a-validator",children:"2. How to set up a validator"}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/Bc6FomfhkbI",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)(o.h2,{id:"3-how-to-setup-stakehouse-node-operator",children:"3. How to setup Stakehouse node operator"}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/tQwy096M8L8",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)(o.h2,{id:"4-how-to-withdraw-your-staked-eth",children:"4. How to withdraw your staked ETH"}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/1uxOIcR92uQ",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)(o.h2,{id:"5-how-to-subscribe-your-validator-to-smooth-",children:"5. How to subscribe your validator to Smooth \ud83d\ude0e"}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/1ZJUEiAFtSw",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)(o.h2,{id:"6-how-to-earn-rewards-with-your-dappnode-without-investing",children:"6. How to earn rewards with your Dappnode without investing"}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/nLH4632sAKg",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})})]})}function h(e={}){const{wrapper:o}={...(0,s.a)(),...e.components};return o?(0,r.jsx)(o,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},1151:(e,o,t)=>{t.d(o,{Z:()=>i,a:()=>n});var r=t(7294);const s={},a=r.createContext(s);function n(e){const o=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:n(e.components),r.createElement(a.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/caaf4754.2c80a9aa.js b/assets/js/caaf4754.2c80a9aa.js new file mode 100644 index 000000000..9bbde0ea7 --- /dev/null +++ b/assets/js/caaf4754.2c80a9aa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5914],{6450:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>d,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var s=n(5893),t=n(1151);const i={},o="Understanding Dappnode Packages",r={id:"user/packages/understanding-dappnode-packages",title:"Understanding Dappnode Packages",description:"What are Dappnode packages and what features do they offer?",source:"@site/docs/user/packages/understanding-dappnode-packages.md",sourceDirName:"user/packages",slug:"/user/packages/understanding-dappnode-packages",permalink:"/docs/user/packages/understanding-dappnode-packages",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/understanding-dappnode-packages.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Optimism Rollup",permalink:"/docs/user/rollups/optimism"},next:{title:"Packages' Signature",permalink:"/docs/user/packages/signature"}},d={},c=[{value:"What are Dappnode packages and what features do they offer?",id:"what-are-dappnode-packages-and-what-features-do-they-offer",level:2},{value:"Introduction",id:"introduction",level:3},{value:"Info",id:"info",level:4},{value:"Config",id:"config",level:4},{value:"Network",id:"network",level:4},{value:"Logs",id:"logs",level:4},{value:"Backup",id:"backup",level:4},{value:"File Manager",id:"file-manager",level:4}];function l(e){const a={code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",hr:"hr",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(a.h1,{id:"understanding-dappnode-packages",children:"Understanding Dappnode Packages"}),"\n",(0,s.jsx)(a.h2,{id:"what-are-dappnode-packages-and-what-features-do-they-offer",children:"What are Dappnode packages and what features do they offer?"}),"\n",(0,s.jsx)(a.hr,{}),"\n",(0,s.jsx)(a.h3,{id:"introduction",children:(0,s.jsx)(a.strong,{children:"Introduction"})}),"\n",(0,s.jsx)(a.p,{children:"One of Dappnode's top features is to offer a user-friendly interface to interact with different packages that contain clients and other applications. This section will go over the basic features you'll find in any Dappnode package."}),"\n",(0,s.jsx)(a.hr,{}),"\n",(0,s.jsx)(a.h4,{id:"info",children:"Info"}),"\n",(0,s.jsxs)(a.ul,{children:["\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.strong,{children:"Version"}),": You'll find both the package's version and its upstream version here."]}),"\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.strong,{children:"Getting Started"}),": Some of the basic information needed to run the package."]}),"\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.strong,{children:"URLs"}),": These will offer a number of different options, starting with bundled package UI/Dashboards and related tools such as Launchpads or external documentation."]}),"\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.strong,{children:"Package Status"}),": Will provide information about the package's status, for example if it's running fine or if it has crashed or in the process of restarting."]}),"\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.strong,{children:"Pause/Restart Package"}),": Useful for troubleshooting or restarting a stopped package."]}),"\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.strong,{children:"Remove Volumes"}),': Also known as the "gray trash bin", this option will wipe all of the package\'s data and start syncing from scratch in the case of clients.']}),"\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.strong,{children:"Remove Package"}),': This would be the "red trash bin", and clicking it will give you the option to preserve or delete the associated database.']}),"\n"]}),"\n",(0,s.jsx)(a.p,{children:(0,s.jsx)(a.img,{alt:"dappnode_packages1",src:n(9561).Z+"",width:"1741",height:"1091"})}),"\n",(0,s.jsx)(a.hr,{}),"\n",(0,s.jsx)(a.h4,{id:"config",children:"Config"}),"\n",(0,s.jsx)(a.p,{children:"The package's settings will be available under this tab in both a simple and advanced mode. The advanced mode can be accessed by clicking the lower-right corner of the screen when available."}),"\n",(0,s.jsx)(a.p,{children:(0,s.jsx)(a.img,{alt:"dappnode_packages2",src:n(899).Z+"",width:"1741",height:"1091"})}),"\n",(0,s.jsx)(a.hr,{}),"\n",(0,s.jsx)(a.h4,{id:"network",children:"Network"}),"\n",(0,s.jsxs)(a.ul,{children:["\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.strong,{children:"Service"}),": Some packages may have multiple services running as part of the same container. This option will allow you to adjust each of their network settings separately."]}),"\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.strong,{children:"Public port mapping"}),": Need to change your package's port mapping? You can change this setting in this field as well as its protocol between TCP and UDP."]}),"\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.strong,{children:"HTTPs domain mapping"}),": Do you want to expose your package to the internet? You'll be able to add multiple public domains to your package here. This is a great way to share your node's RPC with friends and family!"]}),"\n"]}),"\n",(0,s.jsx)(a.p,{children:(0,s.jsx)(a.img,{alt:"dappnode_packages3",src:n(8454).Z+"",width:"1741",height:"1091"})}),"\n",(0,s.jsx)(a.hr,{}),"\n",(0,s.jsx)(a.h4,{id:"logs",children:"Logs"}),"\n",(0,s.jsxs)(a.p,{children:['This is a great section for finding out something that is not working in your package or to look for both expected and unexpected behavior. Packages with multiple services will give you the option to switch logs in the top "Service" bar, something common for consensus clients for example, which usually run one service for the ',(0,s.jsx)(a.code,{children:"beacon-chain"})," and another one for ",(0,s.jsx)(a.code,{children:"validator"}),". Whenever you request for support in the Dappnode community, keep these handy!"]}),"\n",(0,s.jsx)(a.p,{children:(0,s.jsx)(a.img,{alt:"dappnode_packages4",src:n(7908).Z+"",width:"1741",height:"1091"})}),"\n",(0,s.jsx)(a.hr,{}),"\n",(0,s.jsx)(a.h4,{id:"backup",children:"Backup"}),"\n",(0,s.jsx)(a.p,{children:'This option will be available in packages that generate any kind of local database that includes sensitive information such as validator keystores. You\'ll have two very self-explainatory options: "Backup Now" and "Restore Backup".'}),"\n",(0,s.jsx)(a.p,{children:(0,s.jsx)(a.img,{alt:"dappnode_packages5",src:n(4418).Z+"",width:"1741",height:"1091"})}),"\n",(0,s.jsx)(a.hr,{}),"\n",(0,s.jsx)(a.h4,{id:"file-manager",children:"File Manager"}),"\n",(0,s.jsx)(a.p,{children:"Also handy whenever your package has a database you'll need to access or modify, but without going through a terminal. Download and upload files in an easy way with the File Manager."}),"\n",(0,s.jsx)(a.p,{children:(0,s.jsx)(a.img,{alt:"dappnode_packages6",src:n(6274).Z+"",width:"1741",height:"1091"})})]})}function p(e={}){const{wrapper:a}={...(0,t.a)(),...e.components};return a?(0,s.jsx)(a,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},9561:(e,a,n)=>{n.d(a,{Z:()=>s});const s=n.p+"assets/images/dappnode_packages1-9986b39b271ef6adbc6d4a98e907f5c7.png"},899:(e,a,n)=>{n.d(a,{Z:()=>s});const s=n.p+"assets/images/dappnode_packages2-bfcef9f7947159b0341c2c914f93378e.png"},8454:(e,a,n)=>{n.d(a,{Z:()=>s});const s=n.p+"assets/images/dappnode_packages3-96bce25fad6818075d28d1f51529b442.png"},7908:(e,a,n)=>{n.d(a,{Z:()=>s});const s=n.p+"assets/images/dappnode_packages4-bb2f5a5218ea06c59a09858997773adf.png"},4418:(e,a,n)=>{n.d(a,{Z:()=>s});const s=n.p+"assets/images/dappnode_packages5-dd905b985e061e57968acfccca3cd1f1.png"},6274:(e,a,n)=>{n.d(a,{Z:()=>s});const s=n.p+"assets/images/dappnode_packages6-3da72f7cab4ec4f639799523d3274ff8.png"},1151:(e,a,n)=>{n.d(a,{Z:()=>r,a:()=>o});var s=n(7294);const t={},i=s.createContext(t);function o(e){const a=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(i.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/caaf4754.eb8046b2.js b/assets/js/caaf4754.eb8046b2.js deleted file mode 100644 index 232b415c7..000000000 --- a/assets/js/caaf4754.eb8046b2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5914],{4137:(e,a,t)=>{t.d(a,{Zo:()=>d,kt:()=>h});var n=t(7294);function r(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function o(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function i(e){for(var a=1;a =0||(r[t]=e[t]);return r}(e,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var p=n.createContext({}),l=function(e){var a=n.useContext(p),t=a;return e&&(t="function"==typeof e?e(a):i(i({},a),e)),t},d=function(e){var a=l(e.components);return n.createElement(p.Provider,{value:a},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},g=n.forwardRef((function(e,a){var t=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),c=l(t),g=r,h=c["".concat(p,".").concat(g)]||c[g]||u[g]||o;return t?n.createElement(h,i(i({ref:a},d),{},{components:t})):n.createElement(h,i({ref:a},d))}));function h(e,a){var t=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var o=t.length,i=new Array(o);i[0]=g;var s={};for(var p in a)hasOwnProperty.call(a,p)&&(s[p]=a[p]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var l=2;l {t.r(a),t.d(a,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var n=t(7462),r=(t(7294),t(4137));const o={},i="Understanding Dappnode Packages",s={unversionedId:"user/packages/understanding-dappnode-packages",id:"user/packages/understanding-dappnode-packages",title:"Understanding Dappnode Packages",description:"What are Dappnode packages and what features do they offer?",source:"@site/docs/user/packages/understanding-dappnode-packages.md",sourceDirName:"user/packages",slug:"/user/packages/understanding-dappnode-packages",permalink:"/docs/user/packages/understanding-dappnode-packages",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/understanding-dappnode-packages.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Optimism Rollup",permalink:"/docs/user/rollups/optimism"},next:{title:"Packages' Signature",permalink:"/docs/user/packages/signature"}},p={},l=[{value:"What are Dappnode packages and what features do they offer?",id:"what-are-dappnode-packages-and-what-features-do-they-offer",level:2},{value:"Introduction",id:"introduction",level:3},{value:"Info",id:"info",level:4},{value:"Config",id:"config",level:4},{value:"Network",id:"network",level:4},{value:"Logs",id:"logs",level:4},{value:"Backup",id:"backup",level:4},{value:"File Manager",id:"file-manager",level:4}],d={toc:l},c="wrapper";function u(e){let{components:a,...o}=e;return(0,r.kt)(c,(0,n.Z)({},d,o,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"understanding-dappnode-packages"},"Understanding Dappnode Packages"),(0,r.kt)("h2",{id:"what-are-dappnode-packages-and-what-features-do-they-offer"},"What are Dappnode packages and what features do they offer?"),(0,r.kt)("hr",null),(0,r.kt)("h3",{id:"introduction"},(0,r.kt)("strong",{parentName:"h3"},"Introduction")),(0,r.kt)("p",null,"One of Dappnode's top features is to offer a user-friendly interface to interact with different packages that contain clients and other applications. This section will go over the basic features you'll find in any Dappnode package."),(0,r.kt)("hr",null),(0,r.kt)("h4",{id:"info"},"Info"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Version"),": You'll find both the package's version and its upstream version here."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Getting Started"),": Some of the basic information needed to run the package."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"URLs"),": These will offer a number of different options, starting with bundled package UI/Dashboards and related tools such as Launchpads or external documentation."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Package Status"),": Will provide information about the package's status, for example if it's running fine or if it has crashed or in the process of restarting."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Pause/Restart Package"),": Useful for troubleshooting or restarting a stopped package."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Remove Volumes"),': Also known as the "gray trash bin", this option will wipe all of the package\'s data and start syncing from scratch in the case of clients.'),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Remove Package"),': This would be the "red trash bin", and clicking it will give you the option to preserve or delete the associated database.')),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"dappnode_packages1",src:t(9561).Z,width:"1741",height:"1091"})),(0,r.kt)("hr",null),(0,r.kt)("h4",{id:"config"},"Config"),(0,r.kt)("p",null,"The package's settings will be available under this tab in both a simple and advanced mode. The advanced mode can be accessed by clicking the lower-right corner of the screen when available."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"dappnode_packages2",src:t(899).Z,width:"1741",height:"1091"})),(0,r.kt)("hr",null),(0,r.kt)("h4",{id:"network"},"Network"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Service"),": Some packages may have multiple services running as part of the same container. This option will allow you to adjust each of their network settings separately."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Public port mapping"),": Need to change your package's port mapping? You can change this setting in this field as well as its protocol between TCP and UDP."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"HTTPs domain mapping"),": Do you want to expose your package to the internet? You'll be able to add multiple public domains to your package here. This is a great way to share your node's RPC with friends and family!")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"dappnode_packages3",src:t(2802).Z,width:"1741",height:"1091"})),(0,r.kt)("hr",null),(0,r.kt)("h4",{id:"logs"},"Logs"),(0,r.kt)("p",null,'This is a great section for finding out something that is not working in your package or to look for both expected and unexpected behavior. Packages with multiple services will give you the option to switch logs in the top "Service" bar, something common for consensus clients for example, which usually run one service for the ',(0,r.kt)("inlineCode",{parentName:"p"},"beacon-chain")," and another one for ",(0,r.kt)("inlineCode",{parentName:"p"},"validator"),". Whenever you request for support in the Dappnode community, keep these handy!"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"dappnode_packages4",src:t(7908).Z,width:"1741",height:"1091"})),(0,r.kt)("hr",null),(0,r.kt)("h4",{id:"backup"},"Backup"),(0,r.kt)("p",null,'This option will be available in packages that generate any kind of local database that includes sensitive information such as validator keystores. You\'ll have two very self-explainatory options: "Backup Now" and "Restore Backup".'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"dappnode_packages5",src:t(4418).Z,width:"1741",height:"1091"})),(0,r.kt)("hr",null),(0,r.kt)("h4",{id:"file-manager"},"File Manager"),(0,r.kt)("p",null,"Also handy whenever your package has a database you'll need to access or modify, but without going through a terminal. Download and upload files in an easy way with the File Manager."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"dappnode_packages6",src:t(6274).Z,width:"1741",height:"1091"})))}u.isMDXComponent=!0},9561:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/dappnode_packages1-9986b39b271ef6adbc6d4a98e907f5c7.png"},899:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/dappnode_packages2-bfcef9f7947159b0341c2c914f93378e.png"},2802:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/dappnode_packages3-96bce25fad6818075d28d1f51529b442.png"},7908:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/dappnode_packages4-bb2f5a5218ea06c59a09858997773adf.png"},4418:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/dappnode_packages5-dd905b985e061e57968acfccca3cd1f1.png"},6274:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/dappnode_packages6-3da72f7cab4ec4f639799523d3274ff8.png"}}]); \ No newline at end of file diff --git a/assets/js/cbc5934e.7adfcf05.js b/assets/js/cbc5934e.7adfcf05.js deleted file mode 100644 index daa631c3c..000000000 --- a/assets/js/cbc5934e.7adfcf05.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[651],{4137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t =0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=o.createContext({}),p=function(e){var t=o.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=p(e.components);return o.createElement(c.Provider,{value:t},e.children)},l="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,c=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),l=p(n),h=r,m=l["".concat(c,".").concat(h)]||l[h]||u[h]||a;return n?o.createElement(m,i(i({ref:t},d),{},{components:n})):o.createElement(m,i({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=h;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[l]="string"==typeof e?e:r,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var o=n(7462),r=(n(7294),n(4137));const a={title:"DAO",description:"DAO information"},i=void 0,s={unversionedId:"dao",id:"dao",title:"DAO",description:"DAO information",source:"@site/docs/dao.md",sourceDirName:".",slug:"/dao",permalink:"/docs/dao",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dao.md",tags:[],version:"current",frontMatter:{title:"DAO",description:"DAO information"},sidebar:"daoSidebar",next:{title:"The NODE Economy",permalink:"/docs/dao/node-basics"}},c={},p=[{value:"Token Addresses",id:"token-addresses",level:3},{value:"Mission & Membership",id:"mission--membership",level:3},{value:"Architecture",id:"architecture",level:3},{value:"DAO Projects",id:"dao-projects",level:3}],d={toc:p},l="wrapper";function u(e){let{components:t,...n}=e;return(0,r.kt)(l,(0,o.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("admonition",{title:"Documentation alert",type:"danger"},(0,r.kt)("p",{parentName:"admonition"},"The DAO section of our documentation is currently outdated due to a security incident. For a detailed explanation of the issue and our response plan, please refer to our ",(0,r.kt)("a",{parentName:"p",href:"https://discourse.dappnode.io/t/node-hack-post-mortem-and-recovery-plan/1826"},"post-mortem report on the node hack"),".")),(0,r.kt)("h1",{id:"governance"},"Governance"),(0,r.kt)("h3",{id:"token-addresses"},"Token Addresses"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"NODE Mainnet - ",(0,r.kt)("a",{parentName:"li",href:"https://etherscan.io/address/0xDa007777D86AC6d989cC9f79A73261b3fC5e0DA0"},"0xDa007777D86AC6d989cC9f79A73261b3fC5e0DA0")),(0,r.kt)("li",{parentName:"ul"},"NODE xDai - ",(0,r.kt)("a",{parentName:"li",href:"https://blockscout.com/xdai/mainnet/address/0xc60e38C6352875c051B481Cbe79Dd0383AdB7817/transactions"},"0xc60e38C6352875c051B481Cbe79Dd0383AdB7817"))),(0,r.kt)("h3",{id:"mission--membership"},"Mission & Membership"),(0,r.kt)("p",null,"The Dappnode DAO will be an inclusive hub in which Dappnode\u2019s community will carry on its mission to keep the web decentralized, uncensored and resilient. Active DAO members will have the opportunity to vote on Dappnode\u2019s future projects and on how to expand its array of hardware and software solutions."),(0,r.kt)("p",null,"To get involved in Governance, DAO aspirants will need to make contributions to the ecosystem and help kick-start the NODE economy. Those who provide liquidity in the sanctioned pools (Uniswap and Sushiswap) or commit NODE to Governance Staking on Ethereum Mainnet or xDai will be granted voting powers proportional to their contributions. This way we can ensure that those with a voice are also those with a stake, and are not merely speculating with the token."),(0,r.kt)("h3",{id:"architecture"},"Architecture"),(0,r.kt)("p",null,"DAppnode has tapped ",(0,r.kt)("a",{parentName:"p",href:"https://snapshot.org/#/"},"Snapshot")," technology to build its Governance structure. Snapshot is a novel piece of technology that allows off-chain voting for on-chain actions. It removes the prohibitive gas costs of participating in on-chain governance by taking snapshots of members\u2019 NODE currently being staked. Voting and creating proposals with Snapshot is done with a simple crypto wallet signature, no gas needed."),(0,r.kt)("h3",{id:"dao-projects"},"DAO Projects"),(0,r.kt)("p",null,"The first Dappnode project post-launch will be the hotly awaited ValidatorDAO. You can read this ",(0,r.kt)("a",{parentName:"p",href:"https://medium.com/dappnode/guardians-of-ethereum-a-validator-dao-proposal-d82e76231b45"},"Medium article")," to learn more about how ValidatorDAO is poised to revolutionize the relationship between Validators and Nominators!"))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/cbc5934e.9fd61c20.js b/assets/js/cbc5934e.9fd61c20.js new file mode 100644 index 000000000..cbbcb653a --- /dev/null +++ b/assets/js/cbc5934e.9fd61c20.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[651],{4759:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>r,toc:()=>c});var o=t(5893),i=t(1151);const s={title:"DAO",description:"DAO information"},a="Governance",r={id:"dao",title:"DAO",description:"DAO information",source:"@site/docs/dao.md",sourceDirName:".",slug:"/dao",permalink:"/docs/dao",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dao.md",tags:[],version:"current",frontMatter:{title:"DAO",description:"DAO information"},sidebar:"daoSidebar",next:{title:"The NODE Economy",permalink:"/docs/dao/node-basics"}},d={},c=[{value:"Token Addresses",id:"token-addresses",level:3},{value:"Mission & Membership",id:"mission--membership",level:3},{value:"Architecture",id:"architecture",level:3},{value:"DAO Projects",id:"dao-projects",level:3}];function l(e){const n={a:"a",admonition:"admonition",h1:"h1",h3:"h3",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.admonition,{title:"Documentation alert",type:"danger",children:(0,o.jsxs)(n.p,{children:["The DAO section of our documentation is currently outdated due to a security incident. For a detailed explanation of the issue and our response plan, please refer to our ",(0,o.jsx)(n.a,{href:"https://discourse.dappnode.io/t/node-hack-post-mortem-and-recovery-plan/1826",children:"post-mortem report on the node hack"}),"."]})}),"\n",(0,o.jsx)(n.h1,{id:"governance",children:"Governance"}),"\n",(0,o.jsx)(n.h3,{id:"token-addresses",children:"Token Addresses"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["NODE Mainnet - ",(0,o.jsx)(n.a,{href:"https://etherscan.io/address/0xDa007777D86AC6d989cC9f79A73261b3fC5e0DA0",children:"0xDa007777D86AC6d989cC9f79A73261b3fC5e0DA0"})]}),"\n",(0,o.jsxs)(n.li,{children:["NODE xDai - ",(0,o.jsx)(n.a,{href:"https://blockscout.com/xdai/mainnet/address/0xc60e38C6352875c051B481Cbe79Dd0383AdB7817/transactions",children:"0xc60e38C6352875c051B481Cbe79Dd0383AdB7817"})]}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"mission--membership",children:"Mission & Membership"}),"\n",(0,o.jsx)(n.p,{children:"The Dappnode DAO will be an inclusive hub in which Dappnode\u2019s community will carry on its mission to keep the web decentralized, uncensored and resilient. Active DAO members will have the opportunity to vote on Dappnode\u2019s future projects and on how to expand its array of hardware and software solutions."}),"\n",(0,o.jsx)(n.p,{children:"To get involved in Governance, DAO aspirants will need to make contributions to the ecosystem and help kick-start the NODE economy. Those who provide liquidity in the sanctioned pools (Uniswap and Sushiswap) or commit NODE to Governance Staking on Ethereum Mainnet or xDai will be granted voting powers proportional to their contributions. This way we can ensure that those with a voice are also those with a stake, and are not merely speculating with the token."}),"\n",(0,o.jsx)(n.h3,{id:"architecture",children:"Architecture"}),"\n",(0,o.jsxs)(n.p,{children:["DAppnode has tapped ",(0,o.jsx)(n.a,{href:"https://snapshot.org/#/",children:"Snapshot"})," technology to build its Governance structure. Snapshot is a novel piece of technology that allows off-chain voting for on-chain actions. It removes the prohibitive gas costs of participating in on-chain governance by taking snapshots of members\u2019 NODE currently being staked. Voting and creating proposals with Snapshot is done with a simple crypto wallet signature, no gas needed."]}),"\n",(0,o.jsx)(n.h3,{id:"dao-projects",children:"DAO Projects"}),"\n",(0,o.jsxs)(n.p,{children:["The first Dappnode project post-launch will be the hotly awaited ValidatorDAO. You can read this ",(0,o.jsx)(n.a,{href:"https://medium.com/dappnode/guardians-of-ethereum-a-validator-dao-proposal-d82e76231b45",children:"Medium article"})," to learn more about how ValidatorDAO is poised to revolutionize the relationship between Validators and Nominators!"]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>a});var o=t(7294);const i={},s=o.createContext(i);function a(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ccc49370.1fab23a6.js b/assets/js/ccc49370.1fab23a6.js new file mode 100644 index 000000000..dbda41587 --- /dev/null +++ b/assets/js/ccc49370.1fab23a6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6103],{5203:(e,n,t)=>{t.r(n),t.d(n,{default:()=>p});t(7294);var a=t(6010),i=t(1944),s=t(5281),o=t(9460),l=t(1460),r=t(390),c=t(5999),d=t(2244),u=t(5893);function m(e){const{nextItem:n,prevItem:t}=e;return(0,u.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,c.I)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"}),children:[t&&(0,u.jsx)(d.Z,{...t,subLabel:(0,u.jsx)(c.Z,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post",children:"Newer Post"})}),n&&(0,u.jsx)(d.Z,{...n,subLabel:(0,u.jsx)(c.Z,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post",children:"Older Post"}),isNext:!0})]})}function g(){const{assets:e,metadata:n}=(0,o.C)(),{title:t,description:a,date:s,tags:l,authors:r,frontMatter:c}=n,{keywords:d}=c,m=e.image??c.image;return(0,u.jsxs)(i.d,{title:t,description:a,keywords:d,image:m,children:[(0,u.jsx)("meta",{property:"og:type",content:"article"}),(0,u.jsx)("meta",{property:"article:published_time",content:s}),r.some((e=>e.url))&&(0,u.jsx)("meta",{property:"article:author",content:r.map((e=>e.url)).filter(Boolean).join(",")}),l.length>0&&(0,u.jsx)("meta",{property:"article:tag",content:l.map((e=>e.label)).join(",")})]})}var h=t(9407),f=t(2212);function v(e){let{sidebar:n,children:t}=e;const{metadata:a,toc:i}=(0,o.C)(),{nextItem:s,prevItem:c,frontMatter:d,unlisted:g}=a,{hide_table_of_contents:v,toc_min_heading_level:p,toc_max_heading_level:x}=d;return(0,u.jsxs)(l.Z,{sidebar:n,toc:!v&&i.length>0?(0,u.jsx)(h.Z,{toc:i,minHeadingLevel:p,maxHeadingLevel:x}):void 0,children:[g&&(0,u.jsx)(f.Z,{}),(0,u.jsx)(r.Z,{children:t}),(s||c)&&(0,u.jsx)(m,{nextItem:s,prevItem:c})]})}function p(e){const n=e.content;return(0,u.jsx)(o.n,{content:e.content,isBlogPostPage:!0,children:(0,u.jsxs)(i.FG,{className:(0,a.Z)(s.k.wrapper.blogPages,s.k.page.blogPostPage),children:[(0,u.jsx)(g,{}),(0,u.jsx)(v,{sidebar:e.sidebar,children:(0,u.jsx)(n,{})})]})})}},9407:(e,n,t)=>{t.d(n,{Z:()=>c});t(7294);var a=t(6010),i=t(3743);const s={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"};var o=t(5893);const l="table-of-contents__link toc-highlight",r="table-of-contents__link--active";function c(e){let{className:n,...t}=e;return(0,o.jsx)("div",{className:(0,a.Z)(s.tableOfContents,"thin-scrollbar",n),children:(0,o.jsx)(i.Z,{...t,linkClassName:l,linkActiveClassName:r})})}},3743:(e,n,t)=>{t.d(n,{Z:()=>f});var a=t(7294),i=t(6668);function s(e){const n=e.map((e=>({...e,parentIndex:-1,children:[]}))),t=Array(7).fill(-1);n.forEach(((e,n)=>{const a=t.slice(2,e.level);e.parentIndex=Math.max(...a),t[e.level]=n}));const a=[];return n.forEach((e=>{const{parentIndex:t,...i}=e;t>=0?n[t].children.push(i):a.push(i)})),a}function o(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:a}=e;return n.flatMap((e=>{const n=o({toc:e.children,minHeadingLevel:t,maxHeadingLevel:a});return function(e){return e.level>=t&&e.level<=a}(e)?[{...e,children:n}]:n}))}function l(e){const n=e.getBoundingClientRect();return n.top===n.bottom?l(e.parentNode):n}function r(e,n){let{anchorTopOffset:t}=n;const a=e.find((e=>l(e).top>=t));if(a){return function(e){return e.top>0&&e.bottom {e.current=n?0:document.querySelector(".navbar").clientHeight}),[n]),e}function d(e){const n=(0,a.useRef)(void 0),t=c();(0,a.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:i,minHeadingLevel:s,maxHeadingLevel:o}=e;function l(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),l=function(e){let{minHeadingLevel:n,maxHeadingLevel:t}=e;const a=[];for(let i=n;i<=t;i+=1)a.push(`h${i}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:s,maxHeadingLevel:o}),c=r(l,{anchorTopOffset:t.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,t){t?(n.current&&n.current!==e&&n.current.classList.remove(i),e.classList.add(i),n.current=e):e.classList.remove(i)}(e,e===d)}))}return document.addEventListener("scroll",l),document.addEventListener("resize",l),l(),()=>{document.removeEventListener("scroll",l),document.removeEventListener("resize",l)}}),[e,t])}var u=t(9960),m=t(5893);function g(e){let{toc:n,className:t,linkClassName:a,isChild:i}=e;return n.length?(0,m.jsx)("ul",{className:i?void 0:t,children:n.map((e=>(0,m.jsxs)("li",{children:[(0,m.jsx)(u.Z,{to:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,m.jsx)(g,{isChild:!0,toc:e.children,className:t,linkClassName:a})]},e.id)))}):null}const h=a.memo(g);function f(e){let{toc:n,className:t="table-of-contents table-of-contents__left-border",linkClassName:l="table-of-contents__link",linkActiveClassName:r,minHeadingLevel:c,maxHeadingLevel:u,...g}=e;const f=(0,i.L)(),v=c??f.tableOfContents.minHeadingLevel,p=u??f.tableOfContents.maxHeadingLevel,x=function(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:i}=e;return(0,a.useMemo)((()=>o({toc:s(n),minHeadingLevel:t,maxHeadingLevel:i})),[n,t,i])}({toc:n,minHeadingLevel:v,maxHeadingLevel:p});return d((0,a.useMemo)((()=>{if(l&&r)return{linkClassName:l,linkActiveClassName:r,minHeadingLevel:v,maxHeadingLevel:p}}),[l,r,v,p])),(0,m.jsx)(h,{toc:x,className:t,linkClassName:l,...g})}},2212:(e,n,t)=>{t.d(n,{Z:()=>g});t(7294);var a=t(6010),i=t(5999),s=t(5742),o=t(5893);function l(){return(0,o.jsx)(i.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function r(){return(0,o.jsx)(i.Z,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,o.jsx)(s.Z,{children:(0,o.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=t(5281),u=t(9047);function m(e){let{className:n}=e;return(0,o.jsx)(u.Z,{type:"caution",title:(0,o.jsx)(l,{}),className:(0,a.Z)(n,d.k.common.unlistedBanner),children:(0,o.jsx)(r,{})})}function g(e){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(c,{}),(0,o.jsx)(m,{...e})]})}}}]); \ No newline at end of file diff --git a/assets/js/ccc49370.88a7723b.js b/assets/js/ccc49370.88a7723b.js deleted file mode 100644 index 3e850c0a0..000000000 --- a/assets/js/ccc49370.88a7723b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6103],{324:(e,t,n)=>{n.r(t),n.d(t,{default:()=>h});var a=n(7294),l=n(6010),o=n(5463),r=n(3702),i=n(9107),c=n(2506),s=n(1116),m=n(7462),d=n(7325),u=n(3672);function g(e){const{nextItem:t,prevItem:n}=e;return a.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,d.I)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"})},n&&a.createElement(u.Z,(0,m.Z)({},n,{subLabel:a.createElement(d.Z,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post"},"Newer Post")})),t&&a.createElement(u.Z,(0,m.Z)({},t,{subLabel:a.createElement(d.Z,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post"},"Older Post"),isNext:!0})))}function f(){const{assets:e,metadata:t}=(0,i.C)(),{title:n,description:l,date:r,tags:c,authors:s,frontMatter:m}=t,{keywords:d}=m,u=e.image??m.image;return a.createElement(o.d,{title:n,description:l,keywords:d,image:u},a.createElement("meta",{property:"og:type",content:"article"}),a.createElement("meta",{property:"article:published_time",content:r}),s.some((e=>e.url))&&a.createElement("meta",{property:"article:author",content:s.map((e=>e.url)).filter(Boolean).join(",")}),c.length>0&&a.createElement("meta",{property:"article:tag",content:c.map((e=>e.label)).join(",")}))}var v=n(7086);function p(e){let{sidebar:t,children:n}=e;const{metadata:l,toc:o}=(0,i.C)(),{nextItem:r,prevItem:m,frontMatter:d}=l,{hide_table_of_contents:u,toc_min_heading_level:f,toc_max_heading_level:p}=d;return a.createElement(c.Z,{sidebar:t,toc:!u&&o.length>0?a.createElement(v.Z,{toc:o,minHeadingLevel:f,maxHeadingLevel:p}):void 0},a.createElement(s.Z,null,n),(r||m)&&a.createElement(g,{nextItem:r,prevItem:m}))}function h(e){const t=e.content;return a.createElement(i.n,{content:e.content,isBlogPostPage:!0},a.createElement(o.FG,{className:(0,l.Z)(r.k.wrapper.blogPages,r.k.page.blogPostPage)},a.createElement(f,null),a.createElement(p,{sidebar:e.sidebar},a.createElement(t,null))))}},7086:(e,t,n)=>{n.d(t,{Z:()=>m});var a=n(7462),l=n(7294),o=n(6010),r=n(2728);const i={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"},c="table-of-contents__link toc-highlight",s="table-of-contents__link--active";function m(e){let{className:t,...n}=e;return l.createElement("div",{className:(0,o.Z)(i.tableOfContents,"thin-scrollbar",t)},l.createElement(r.Z,(0,a.Z)({},n,{linkClassName:c,linkActiveClassName:s})))}},2728:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(7462),l=n(7294),o=n(107);function r(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...l}=e;n>=0?t[n].children.push(l):a.push(l)})),a}function i(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=i({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function c(e){const t=e.getBoundingClientRect();return t.top===t.bottom?c(e.parentNode):t}function s(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>c(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom {e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function d(e){const t=(0,l.useRef)(void 0),n=m();(0,l.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:l,minHeadingLevel:o,maxHeadingLevel:r}=e;function i(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),i=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let l=t;l<=n;l+=1)a.push(`h${l}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:o,maxHeadingLevel:r}),c=s(i,{anchorTopOffset:n.current}),m=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(l),e.classList.add(l),t.current=e):e.classList.remove(l)}(e,e===m)}))}return document.addEventListener("scroll",i),document.addEventListener("resize",i),i(),()=>{document.removeEventListener("scroll",i),document.removeEventListener("resize",i)}}),[e,n])}function u(e){let{toc:t,className:n,linkClassName:a,isChild:o}=e;return t.length?l.createElement("ul",{className:o?void 0:n},t.map((e=>l.createElement("li",{key:e.id},l.createElement("a",{href:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),l.createElement(u,{isChild:!0,toc:e.children,className:n,linkClassName:a}))))):null}const g=l.memo(u);function f(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:c="table-of-contents__link",linkActiveClassName:s,minHeadingLevel:m,maxHeadingLevel:u,...f}=e;const v=(0,o.L)(),p=m??v.tableOfContents.minHeadingLevel,h=u??v.tableOfContents.maxHeadingLevel,b=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,l.useMemo)((()=>i({toc:r(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:p,maxHeadingLevel:h});return d((0,l.useMemo)((()=>{if(c&&s)return{linkClassName:c,linkActiveClassName:s,minHeadingLevel:p,maxHeadingLevel:h}}),[c,s,p,h])),l.createElement(g,(0,a.Z)({toc:b,className:n,linkClassName:c},f))}}}]); \ No newline at end of file diff --git a/assets/js/cdc6bc37.1a361d72.js b/assets/js/cdc6bc37.1a361d72.js deleted file mode 100644 index 18e0cc71a..000000000 --- a/assets/js/cdc6bc37.1a361d72.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4407],{4137:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>u});var r=a(7294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function n(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t=1;t =0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var d=r.createContext({}),l=function(e){var t=r.useContext(d),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},p=function(e){var t=l(e.components);return r.createElement(d.Provider,{value:t},e.children)},h="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},c=r.forwardRef((function(e,t){var a=e.components,o=e.mdxType,n=e.originalType,d=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),h=l(a),c=o,u=h["".concat(d,".").concat(c)]||h[c]||m[c]||n;return a?r.createElement(u,i(i({ref:t},p),{},{components:a})):r.createElement(u,i({ref:t},p))}));function u(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var n=a.length,i=new Array(n);i[0]=c;var s={};for(var d in t)hasOwnProperty.call(t,d)&&(s[d]=t[d]);s.originalType=e,s[h]="string"==typeof e?e:o,i[1]=s;for(var l=2;l